質問

ポリゴンの外観をあまり変えずに、ポリゴンの頂点の数を減らすための良いアルゴリズムは何ですか?

入力:点のリストとして表されるポリゴンで、頂点が多すぎます。たとえば、マウスからの生の入力。

出力:頂点の数がはるかに少ないポリゴンで、元の画像によく似ています。たとえば、衝突検出に使用できるもの(必ずしも凸ではない)。

編集:これに対する解決策は、グラフに最適なマルチセグメント化された線を見つけることに似ています。私のアルゴリズムの本では、Segmented Least Squaresと呼ばれています。

Edit2:Douglas Peuckerアルゴリズムは本当に欲しいものです。

役に立ちましたか?

解決

編集:ああ、ポリゴンの単純化

衝突検出について言及しました。本当に簡単に、その周りの境界凸包を計算できます。

凹面領域を気にする場合、多角形の重心を取り、開始点を選択することにより、凹面の船体を計算できます。開始点から重心を中心に回転し、保持する各頂点を見つけ、それを境界ハルの次の頂点として割り当てます。アルゴリズムの複雑さは、どの頂点を保持するかをどのように決定するかによって決まりますが、すでに考えていたと思います。重心を基準とした位置に基づいて、すべての頂点をバケットに投げることができます。バケットが頂点の任意の数を超えていっぱいになったら、分割できます。次に、そのバケット内の頂点の平均値を、境界ハルで使用する頂点として取得します。または、バケットを忘れて、重心の周りを移動しているときに、最後のポイントから指定された距離を超えている場合にのみポイントを選択します。

実際には、ポリゴンのすべての頂点を「ポイントクラウド」として使用することができます。そしてその周りの凹包を計算します。アルゴリズムリンクを探します。これに関する最悪のケースは、完全に凸の多角形です。

別の方法は、境界矩形から開始することです。長方形の各頂点について、ポイントからポリゴンまでの距離を見つけます。最も遠い頂点については、さらに2つの頂点に分割し、いくつかの頂点に移動します。頂点または面積のいずれかの割合が満たされるまで繰り返します。これについてもう少し詳しく考えなければなりません。

多角形が実際に似ていることを気にする場合、自己交差する多角形の場合でも、別のアプローチが必要になりますが、衝突検出について尋ねたので必要なようには聞こえません。

この投稿には、凸包部分に関する詳細が記載されています。

他のヒント

そこには多くの資料があります。 「メッシュの削減」、「メッシュの単純化」、「メッシュの最適化」などのようなものをグーグルで検索してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top