【问题标题】:Python - area of irregular polygon results in negative value?Python - 不规则多边形区域导致负值?
【发布时间】:2014-02-15 14:09:32
【问题描述】:

大家早上好! 我必须使用 python 计算多边形的面积。 执行此操作的公式由(抱歉,还不能发布图片..)给出。

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


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() 就可以了。

标签: python polygon area


【解决方案1】:

最终答案的符号基于多边形的方向。您可以通过在给定示例中获取多边形的反向列表来检查它。

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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      相关资源
      最近更新 更多