ধরুন আমাদের কাছে অর্ডার করা পয়েন্টের একটি তালিকা রয়েছে যা একটি 2D সমতলে একটি সাধারণ বহুভুজ শেষ বিন্দুকে উপস্থাপন করে। আমাদের এই বহুভুজের ক্ষেত্রফল বের করতে হবে।
সুতরাং, যদি ইনপুট পয়েন্টের মত হয় =[(0, 0), (0,5), (3, 5), (3,0)], তাহলে আউটপুট হবে 15।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন getInfo() সংজ্ঞায়িত করুন। এটি x1, y1, x2, y2 লাগবে
- রিটার্ন x1*y2 - y1*x2
- মূল পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন
- 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)
- রিটার্ন | রিটার্ন | / 2.0
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def getInfo(x1, y1, x2, y2): return x1*y2 - y1*x2 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 abs(res)/2.0 points = [(0, 0), (0,5), (3, 5), (3,0)] print(solve(points))
ইনপুট
[(0, 0), (0,5), (3, 5), (3,0)]
আউটপুট
15.0