Skip to main content
 首页 » 编程设计

python之具有 (x,y) 坐标列表的多边形区域

2025年05月04日13pengyingh

鉴于过去在 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 函数后计算单元的面积 - 不幸的是,该函数并不总是按照以下顺序输出坐标将使我能够计算出正确的面积。

请您参考如下方法:

可以从随机的坐标列表(取决于其顺序)创建多个不相交的多边形,并且每个多边形将具有不同的面积,因此您必须指定坐标的顺序来构建多边形(有关示例,请参见附图)。