मान लीजिए कि हमारे पास ऑर्डर किए गए बिंदुओं की एक सूची है जो 2 डी विमान पर एक साधारण बहुभुज समापन बिंदु का प्रतिनिधित्व करती है। हमें इस बहुभुज का परिमाप ज्ञात करना है।
इसलिए, यदि इनपुट अंक =[(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 :=अंकों का आकार
- (फर्स्टएक्स, फर्स्टी):=पॉइंट्स[0]
- (prevx, prevy) :=(फर्स्टएक्स, फर्स्टी)
- res :=0
- 1 से N-1 की श्रेणी के लिए, करें
- (nextx, nexty):=अंक[i]
- res :=res + getInfo(prevx, prevy, nextx, nexty)
- prevx :=nextx
- पिछला :=अगला
- res :=res + getInfo(prevx, prevy, firstx, firsty)
- रिटर्न रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
गणित आयात से :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) , प्रीवी, नेक्स्ट, नेक्स्ट) प्रीवक्स =नेक्स्टक्स प्रीवी =नेक्स्ट रेस =रेस + गेटइन्फो (प्रीवीएक्स, प्रीवी, फर्स्टएक्स, फर्स्ट) रिटर्न रिस्प्वाइंट्स =[(0, 0), (0,5), (3, 5), ( 3,0)]प्रिंट(समाधान(अंक))इनपुट
[(0, 0), (0,5), (3, 5), (3,0)]
आउटपुट
16.0