ধরুন আমাদের কাছে অর্ডার করা পয়েন্টের একটি তালিকা রয়েছে যা একটি 2D সমতলে একটি সাধারণ বহুভুজ শেষ বিন্দুকে উপস্থাপন করে। আমাদের এই বহুভুজের পরিধি খুঁজে বের করতে হবে।
সুতরাং, ইনপুট যদি পয়েন্টের মত হয় =[(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 :=পয়েন্টের আকার
- (firstx, firsty) :=পয়েন্ট[0]
- (prevx, prevy) :=(firstx, firsty)
- res :=0 1 থেকে N-1 রেঞ্জের মধ্যে
- এর জন্য, করুন
- (nextx, nexty) :=পয়েন্ট[i]
- res :=res + getInfo(prevx, prevy, nextx, nexty)
- prevx :=nextx
- prevy :=nexty
- res :=res + getInfo(prevx, prevy, firstx, firsty)
- রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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