早上好! 我必须使用python计算多边形的面积。 这样做的公式是由(抱歉,还不能发布图片..)
(x 0 * y 1 - y 0 * x 1 )+(x 1 * y 2 - y 1 * x 2 )+ ... +(x n-1 < / sub> * 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
答案 0 :(得分:5)
该公式通过计算构成多边形的线段的原点和每个末端之间的每对矢量的叉积之和来工作。实质上,该区域被计算为下图中绿色和红色三角形区域之间的差异。 (请注意,红色三角形部分位于绿色三角形下方。)
叉积的符号取决于矢量的方向,即,如果我们可以通过向左或向右转动使第二个矢量与第一个矢量对齐。因此,您将获得负面或正面区域,具体取决于多边形中的点是顺时针还是逆时针排序。解决方案是正确的,但您需要将abs()
函数应用于结果,因为您不需要该符号。
答案 1 :(得分:2)
最终答案的符号基于多边形的方向。您可以通过在给定示例中使用多边形的反向列表来检查它。
polygon = [[0,0],[-1,5],[2,3],[1,5],[3,6],[4,5],[5,3],[8,-2],[4,-4],[2,-5]]
polygon.reverse()
...
在这种情况下,你会发现区域是正面的,认为它基本上是相同的多边形。
您可以详细了解为什么方向会使区域为负here。
您只需要获取最终结果的绝对值。
print 'area = ', abs(area)