ポリゴンから N 番目ごとの頂点を取得する (頂点の数を N だけ減らす) という、明らかに最もばかげたアルゴリズムは別として、いくつかの 3D アルゴリズムに触発されたアイデアを次に示します。
通常、3D では、全体のボリュームにあまり寄与しない面を削除する必要があります。これを行うために、モデルの「最も平坦な」領域を単純化しようとします。
2D では、これを「セグメント間の角度が最も小さいセグメントを単純化する」に変換できます。最初の単純な実装は次のようになります。
- 多角形のセグメント Si と Si+1 の間のすべての角度を計算します
- 所定のしきい値を下回るすべての角度を取得します (または M 個の最小の角度を取得します)。
- 2. で特定したセグメントを単純化します ([Pi, Pi+1] と [Pi+1, Pi+2] を [Pi, Pi+2] に置き換えます)。
- ポリゴンを十分に縮小するまで、1. から繰り返します。
もちろん、これは最適ではありませんが、品質と速度の間の適切なトレードオフになるはずです。角度の代わりに、2 つのセグメントの中間点 (Pi+1) と潜在的に簡略化されたセグメント ([Pi, Pi+2]) の間の最小距離を取ることができます。
編集:
あまりパフォーマンスが必要ない場合に試す別のアルゴリズム:
- 元のポリゴン頂点を Catmull-Rom スプラインの制御点と見なす
- このスプラインを目的のポイント数でテッセレートします
最後に、そのリンクでいくつかのソース コードを見つけました: http://motiondraw.com/md/as_samples/t/LineGeneralization/demo.htmlと、関連するアルゴリズム: http://www.geom.unimelb。 edu.au/gisweb/LGmodule/LGSimplification.htm