如何使用Python从点列表计算多边形的面积?

4
我有一个由二维点组成的列表/数组,形成了一个非凸、非自交的形状。我想计算该多边形所包含的面积。
首先,我需要用提供的点构造一个多边形(非自交)。如果我可以将该多边形三角化,就可以计算面积(我可以容忍一定的相对误差)。
使用scipy的scipy.spatial.ConvexHull()会导致错误的形状和面积,显然,但是我没有找到可用的算法来解决这个问题。
有人能告诉我如何做吗?

6
给定x和y坐标,计算多边形的面积。以下是Python的示例代码:def polygon_area(x, y): area = 0.0 for i in range(-1, len(x)-1): area += x[i] * (y[i+1] - y[i-1]) return abs(area) / 2.0输入参数xy是两个列表,包含了多边形每个点的x和y坐标。返回值是这个多边形的面积。 - SteveJ
一些点的数组可以被解释为不止一个非凸多边形,即使您限制它们不相交。在这种模棱两可的情况下,程序应该如何计算多边形的面积? - Mr. T
@Piinthesky 嗯,三角形的一条边总是已知的,它是从曲线上的一个点到下一个点的线段,我认为已经有人想出了一个可以实现这个算法的方法。 - zython
@Piinthesky,也许你误解了“曲线”这个术语,这里的曲线更像是一条路径,如果这样说会更清楚。 - zython
好的,如果这个问题在你的数据集中不会出现,你就不必考虑它。 - Mr. T
显示剩余3条评论
1个回答

14

使用可在Python 2.7和3中使用的Shapely模块。

In [41]: from shapely.geometry import Polygon

In [48]: coords  = ((-1, 0), (-1, 1), (0, 0.5), (1, 1), (1, 0), (-1, 0))

In [49]: polygon = Polygon(coords)

In [50]: polygon.area
Out[50]: 1.5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接