我有一组点 A 。我得到了 CH_A 的凸包 A

然后,我有额外的点,点集 B 。我将 B 添加到 A 并获得更大的点集。我获得了包含 CH_ABA 的更大集合的凸包 B

我想量化将 B 添加到集合 A 中需要支付多少。我正在考虑使用一个额外的区域来量化这个成本。

假设 CH_A 的面积为 Area_A ,那么 CH_AB 的面积为 Area_AB 。然后,我想计算边际成本为

(Area_AB - Area_A) / Area_A

如何在 Python 中获得凸包的面积?

最佳答案

凸包是一个简单的凸多边形让您可以轻松尝试{this}{this}找到2D多边形的面积。

类似于以下内容(我们的版本):

def PolyArea2D(pts):
    lines = np.hstack([pts,np.roll(pts,-1,axis=0)])
    area = 0.5*abs(sum(x1*y2-x2*y1 for x1,y1,x2,y2 in lines))
    return area

其中 pts 是多边形顶点数组,即 (nx2) 数组。

完全使用:
import numpy as np

def PolyArea2D(pts):
    lines = np.hstack([pts,np.roll(pts,-1,axis=0)])
    area = 0.5*abs(sum(x1*y2-x2*y1 for x1,y1,x2,y2 in lines))
    return area

pts = [[0,0],[1,0],[1,1],[0,1]]
print PolyArea2D(pts)

pts = [[0,0],[1,0],[0,1]]
print PolyArea2D(pts)

pts = [[0,0],[1,0],[0.5,0.5]]
print PolyArea2D(pts)

>>>
1.0
0.5
0.25

关于python - Python中的凸包区域?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19873596/

10-13 05:30