【发布时间】:2016-04-27 19:04:01
【问题描述】:
考虑到过去在 stackoverflow 中提供了解决方案,我要求 python 代码用 (x,y) 坐标列表计算多边形的面积似乎有点奇怪。但是,我发现提供的所有解决方案都对给定的 (x,y) 坐标列表的顺序敏感。例如,用下面的代码求多边形的面积:
def area(p):
return 0.5 * abs(sum(x0*y1 - x1*y0
for ((x0, y0), (x1, y1)) in segments(p)))
def segments(p):
return zip(p, p[1:] + [p[0]])
coordinates1 = [(0.5,0.5), (1.5,0.5), (0.5,1.5), (1.5,1.5)]
coordinates2 = [(0.5,0.5), (1.5,0.5), (1.5,1.5), (0.5,1.5)]
print "coordinates1", area(coordinates1)
print "coordinates2", area(coordinates2)
返回
coordinates1 0.0
coordinates2 1.0 #This is the correct area
对于同一组坐标但顺序不同。我将如何更正此问题,以便使用我想要制作成非相交多边形的随机 (x,y) 坐标列表来获取非相交完整多边形的面积?
编辑:我现在意识到一组坐标中可以有多个不相交的多边形。基本上我正在使用 scipy.spatial.Voronoi 创建 Voronoi 单元格,并且我希望在将坐标输入 scipy Voronoi 函数后计算单元格的面积 - 不幸的是,该函数并不总是按以下顺序输出坐标将允许我计算正确的面积。
【问题讨论】:
-
你,你在找convex hull?
-
感谢您的评论@tobias_k 我已经包含了一个编辑,它可以更好地解释我的问题。我正在阅读您的链接,以查看凸包是否是我的问题的准确描述。
-
嗨@tobias_k 无论如何我可以利用我的清单来获得所需的区域吗?