मान लीजिए हमारे पास एक 2D तल पर एक साधारण बहुभुज के अंतिम बिंदुओं को दर्शाने वाले क्रमबद्ध बिंदुओं की सूची है। हमें इस बहुभुज का परिमाप ढूंढना है।
उदाहरण के लिए, यदि इनपुट points = [(0, 0), (0,5), (3, 5), (3,0)] है, तो आउटपुट 16 होगा क्योंकि

दो भुजाएं लंबाई 3 की हैं और दो भुजाएं लंबाई 5 की हैं, तो 2*5 + 2*3 = 16।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- getInfo() नामक एक फंक्शन परिभाषित करें। यह x1, y1, x2, y2 लेगा
- ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) का वर्गमूल लौटाएं जो यूक्लिडियन दूरी है
- (x1, y1) और (x2, y2) के बीच
- मुख्य विधि से, निम्न करें
- N := points का आकार
- (firstx, firsty) := points[0]
- (prevx, prevy) := (firstx, firsty)
- res := 0
- i के लिए 1 से N-1 तक की रेंज में, करें
- (nextx, nexty) := points[i]
- res := res + getInfo(prevx, prevy, nextx, nexty)
- prevx := nextx
- prevy := nexty
- res := res + getInfo(prevx, prevy, firstx, firsty)
- res लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
from math import sqrt
def getInfo(x1, y1, x2, y2):
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
def solve(points):
N = len(points)
firstx, firsty = points[0]
prevx, prevy = firstx, firsty
res = 0
for i in range(1, N):
nextx, nexty = points[i]
res = res + getInfo(prevx, prevy, nextx, nexty)
prevx = nextx
prevy = nexty
res = res + getInfo(prevx, prevy, firstx, firsty)
return res
points = [(0, 0), (0,5), (3, 5), (3,0)]
print(solve(points))इनपुट
[(0, 0), (0,5), (3, 5), (3,0)]
आउटपुट
16.0