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

Calculating area of a non-self-intersecting polygon with n vertices

我想使用 x,y 点的二维列表查找非自相交多边形的面积。例如,给定列表 [(0, 0), (4, 0), (2, 2), (4, 4), (0, 4), (2, 2)] 我想找到该区域。使用公式

我知道这是可能的,但我很难比较列表中的 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

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

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 数组。但它应该让您深入了解如何理解您的数据并实施适用于列表或元组的计算。