簡體   English   中英

Python - 不規則多邊形區域導致負值?

[英]Python - area of irregular polygon results in negative value?

大家早上好! 我必須使用python計算多邊形的面積。 這樣做的公式是由(抱歉,不能發布圖片..)

(x 0 * y 1 - y 0 * x 1 )+(x 1 * y 2 - y 1 * x 2 )+ ... +(x n-1 * y 0 - y n-1 * x 0


2

這是我想出的代碼。 但是,它會導致(正確的)負值,我不知道為什么。 簡單地將區域時間乘以-0.5還是有效的,或者我的代碼有問題嗎? 任何幫助是極大的贊賞!!

polygon = [[0,0],[-1,5],[2,3],[1,5],[3,6],[4,5],[5,3],[8,-2],[4,-4],[2,-5]]
area = 0.0

n = len(polygon)
for i in range(n):
    i1 = (i+1)%n
    area += polygon[i][0]*polygon[i1][1] - polygon[i1][0]*polygon[i][1]       
area *= 0.5
print 'area = ', area

該公式通過計算組成多邊形的線段的起點和末端之間的每對向量的叉積之和來工作。 實質上,該區域被計算為下圖中綠色和紅色三角形區域之間的差異。 (請注意,紅色三角形部分位於綠色三角形的下面。)

插圖

叉積的符號取決於向量的方向,即,是否可以通過左右旋轉使第二個向量與第一個向量對齊。 因此,您將獲得負面或正面區域,具體取決於多邊形中的點是順時針還是逆時針排序。 解決方案是正確的,但您需要將abs()函數應用於結果,因為您不需要符號。

最終答案的符號基於多邊形的方向。 您可以通過在給定示例中使用多邊形的反向列表來檢查它。

polygon = [[0,0],[-1,5],[2,3],[1,5],[3,6],[4,5],[5,3],[8,-2],[4,-4],[2,-5]]
polygon.reverse()
...

在這種情況下,你會發現區域是正面的,認為它基本上是相同的多邊形。

您可以在此處詳細了解為什么方向區域為負。

您只需要獲取最終結果的絕對值即可。

print 'area = ', abs(area)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM