センターの定義は一般的に意味がありません。
これを確認するには、平面上に整列していない 3 つの点を描画し、3 つの点すべてを通過する唯一の円を計算します。明らかに、三角形の中心はこの円の中心でなければなりません。
次に、円上にない 4 番目の点を描き、4 辺の多角形を形成します。センターって何?すべての頂点から等距離にある平面内の点はありません。
また、頂点から等距離の点を使用する三角形の場合でも、ポリゴンの外側や遠く離れた点が得られる可能性があり、数値的にも不安定であることに注意してください (任意の ε>0 および M>0 が与えられた場合、いつでも三角形を構築できます。 ε 未満の距離だけの頂点の特定の移動は、M を超える距離だけ中心を移動します)。
計算が簡単な一般的に使用される「中心」は、すべての頂点の平均、境界の平均、質量の中心、または軸に沿ったバウンディング ボックスの中心です。ただし、ポリゴンが凸面でない場合、それらはすべてポリゴンの外側にある可能性がありますが、あなたの場合は機能する可能性があります。
最も単純で合理的なもの (座標系に依存しないため) は、頂点の重心です (Python のコード):
xc = sum(x for (x, y) in points) / len(points)
yc = sum(y for (x, y) in points) / len(points)
ポリゴンの片側を分割するだけで別の中心が得られるのは悪いことです(つまり、ポリゴンによって囲まれたポイントのセットではなく、頂点に依存します)。ポリゴンに依存する最も単純なものは、IMO 境界の重心です。
sx = sy = sL = 0
for i in range(len(points)): # counts from 0 to len(points)-1
x0, y0 = points[i - 1] # in Python points[-1] is last element of points
x1, y1 = points[i]
L = ((x1 - x0)**2 + (y1 - y0)**2) ** 0.5
sx += (x0 + x1)/2 * L
sy += (y0 + y1)/2 * L
sL += L
xc = sx / sL
yc = sy / sL
どちらも 3d への拡張は簡単です...z
同じ式を使用して追加するだけです。
一般的な (必ずしも凸状ではなく、必ずしも単純に接続されているとは限らない) 多角形の場合、有用であるとわかったが計算するのは簡単ではない「中心」は、境界から最大距離にある (内の) 内側の点です (言い換えれば、「最も内側の」ポイント)。
この場合、離散 (ビットマップ) 表現とガウス距離変換を使用することにしました。