Python-不规则多边形的面积导致负值?

Python-不规则多边形的面积导致负值?,python,polygon,area,Python,Polygon,Area,大家早上好! 我必须使用python计算多边形的面积。 公式如下所示(对不起,现在还不能发布图片) (x0*y1-y0*x1)+(x1*y2-y1*x2)+…+(xn-1*y0-yn-1*x0) 二, 这是我想出的密码。然而,它会产生一个(正确的)负值,我不知道为什么。 简单地乘以面积时间-0.5是有效的,还是我的代码有问题? 非常感谢您的帮助 polygon = [[0,0],[-1,5],[2,3],[1,5],[3,6],[4,5],[5,3],[8,-2],[4,-4],[2,-5]]

大家早上好! 我必须使用python计算多边形的面积。 公式如下所示(对不起,现在还不能发布图片)

(x0*y1-y0*x1)+(x1*y2-y1*x2)+…+(xn-1*y0-yn-1*x0)


二,

这是我想出的密码。然而,它会产生一个(正确的)负值,我不知道为什么。 简单地乘以面积时间-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

最终答案的符号基于多边形的方向。您可以通过使用给定示例中多边形的反转列表进行检查

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)

该公式通过计算构成多边形的线段的原点和两端之间每对向量的叉积之和来工作。本质上,面积计算为下图中绿色三角形和红色三角形的面积之差。(请注意,红色三角形部分位于绿色三角形下方。)


叉积的符号取决于向量的方向,即我们是否可以通过向左或向右转动第二个向量使其与第一个向量对齐。因此,根据多边形中的点是顺时针排列还是逆时针排列,您将获得一个负区域或正区域。解决方案是正确的,但是您需要对结果应用
abs()
函数,因为您不需要符号。

我想您会发现结果的符号仅仅取决于您是顺时针还是逆时针绕点旋转。因此,只需获取结果的
abs()
,就可以了。