计算具有n个顶点的非自相交多边形的面积

时间:2020-06-05 21:12:52

标签: python python-3.x list nested-lists area

我想使用x,y点的2d列表查找非自相交多边形的区域。例如给定列表[(0,0),(4,0),(2,2),(4,4),(0,4),(2,2)]我要查找区域。使用公式enter image description here

我知道这是有可能的,但是比较列表中的两个不同点有很多困难。帮助如何正确遍历列表将非常有用

编辑:我想使它适用于具有任意多个边的多边形(因此列表可以是可以创建多边形的任意大小

2 个答案:

答案 0 :(得分:2)

我不确定这是否是您尝试专门使用该公式的练习,但是如果您只是想了解该领域,可以尝试使用Python的shapely module

from shapely import geometry

pts =  [(0, 0), (4, 0), (2, 2), (4, 4), (0, 4), (2, 2)] 

polygon = geometry.Polygon(pts)
print (polygon.area)  # 8.0

答案 1 :(得分:1)

如果您想了解如何遍历列表,元组首先使用一些打印语句:

a=[(0, 0), (4, 0), (2, 2), (4, 4), (0, 4), (2, 2)]   

print(type(a))
print(type(a[0]))

print(a[1])  # 2nd tuple

print(a[1][0])  # first element of 2nd tuple all positions in python lists,tuples etc are zero based)
print(a[-1][0])  # first element of last tuple

n=len(a)
print(n)

输出:

<class 'list'>
<class 'tuple'>
(4, 0)
4
2
6

然后您的实际问题就很容易写:

sum=0
for i in range(n-1 ):
    sum+= a[i][0]*a[i+1][1]- a[i+1][0]*a[i][1]

print(sum/2)    

输出:

8.0

这不是超快又漂亮。如果需要后者,可以使用numpy数组。但这应该使您对如何理解数据以及实现可用于列表或元组的计算有深刻的了解。