カーブしたエッジを持つ 2D で閉じた不規則な形状のアウトラインを描画し、(a) 形状の領域の重心 (重心) と (b) 形状の周囲の重心(つまりたとえば、形状の外側にしっかりと巻き付けられたワイヤーの重心)。Python と Matlab については、初心者レベルの習熟度があります。
(a) と (b) は、多角形の頂点が与えられれば十分に簡単です。多角形の面積の重心は、次の式で与えられます。多角形の周囲の重心は、線によって重み付けされたすべての線分の中点の平均にすぎません。セグメントの長さ。私はすでにこれを行うためのいくつかの関数を書いています。
私が抱えている問題は、湾曲したエッジで閉じた形状を描く方法を知っている方法からそれらの頂点を取得/近似することです。私がこれまでに思いついた最善の解決策は、このmatplotlib
ベースのスクリプトのようなものを使用して曲線の形状を描画し、次に を呼び出しpath.to_polygons()
て Path オブジェクトをポリゴンに変換することですが、驚くほど低い解像度で変換するため、結果の近似値はは非常に貧弱です (そして、私の目的には貧弱すぎます — これらの重心をかなり正確に計算したいと思います)。
したがって、(i) の解像度を.to_polygons
(約 10 倍) 上げる方法を見つけるか、これは私の目的には満足できるものであるか、(ii) 新しい戦略を完全に試すかのいずれかを検討しています。1つのオプションは、Adobe Illustratorなどを使用して形状を描画し、プラグインまたは画像処理ツールボックスを介して頂点の近似値を取得することです(ただし、これらのいずれかを行う方法がわかりません). もう1つは、領域と周囲の重心を見つけるための組み込み関数を既に備えているツールボックス/ライブラリを使用して形状を描画することです(前者を持つものを見たことがありますが、後者はありません)。しかし、私が考慮していない他の多くのオプションがあると確信しています。