我有一组点 A
。我得到了 CH_A
的凸包 A
。
然后,我有额外的点,点集 B
。我将 B
添加到 A
并获得更大的点集。我获得了包含 CH_AB
和 A
的更大集合的凸包 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/