16

ポイントのセットがありAます。の凸包を取得しCH_AますA

次に、余分なポイント、ポイント セットがありBます。追加BしてA、より大きなポイント セットを取得します。と の両方をCH_AB含むこの大きなセットの凸包を取得します。AB

Bsetに追加するために支払わなければならない金額を定量化したいと考えていAます。このコストを定量化するために、追加の領域を使用することを考えています。

の面積CH_AがあるとするとArea_ACH_ABの面積がありArea_ABます。次に、限界費用を次のように計算します。

(Area_AB - Area_A) / Area_A 

Pythonで凸包の面積を取得するにはどうすればよいですか?

4

2 に答える 2

16

凸包は単なる多角形であるため、 {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
于 2013-11-09T11:37:38.930 に答える