考虑到过去在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函数后计算单元格的面积 - 遗憾的是,函数并不总是输出坐标按顺序允许我计算正确的区域。