【问题标题】:Calculating area of a non-self-intersecting polygon with n vertices计算具有 n 个顶点的非自相交多边形的面积
【发布时间】:2020-06-05 21:12:52
【问题描述】:

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

我知道这是可能的,但我很难比较列表中的 2 个不同点。帮助如何正确遍历列表会很棒

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

【问题讨论】:

  • 如果 aa 是列表,只需使用 print 语句查找列表元素,如 aa[0,0]) 或其长度 len(aa) ,。您的 y (i+1) 可能类似于 aa[i+1,1],而 x(i) 可能是 aa[i,0]。玩它并展示它。您还可以使用 numpy 将您拥有的元组列表转换为 numpy 数组(例如 an = np.array(aa))。使用转置,您可以让自己成为 x 和 y 向量,以便于阅读。

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


【解决方案1】:

我不确定这是否是您尝试专门使用该公式的练习,但如果您只是对该领域感兴趣,可以尝试 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

【讨论】:

  • 遗憾的是,我特别想使用该公式,但感谢您提供其他解决方案!
【解决方案2】:

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

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

【讨论】:

  • 我不应该为添加的数字使用不同的变量名称,因为 sum 已经预定义了吗?
  • sum=0 只是初始化变量。然后你在循环中不断地添加它。如果你不这样做,你可能会有另一个变量 sum 更远,你会继续添加到那个变量中。
猜你喜欢
  • 2012-01-26
  • 2015-03-26
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
相关资源
最近更新 更多