単純な非凸多角形の一連の点があるという問題があります (用語が正しいことを願っています)。しかし、ポイントは必ずしも順番通りではありません (つまり、時計回りまたは反時計回り)。Flash の描画 API で塗りつぶし領域を正しく描画するには、これらのポイントを端に沿って順番に進行させる必要があります (最終的に始点に接続するため)。
デカルト座標のリストを時計回りまたは反時計回りに並べ替えて、「ペンを持ち上げる」ことなくポイントからポイントへとシェイプを描画できる方法はありますか?
多角形の 4 点をソートするという投稿を 1 つ見ましたが、4 点だけの特殊なケースだったと思います。私の図形には最低 6 つのポイントがあります。リストでは、各エントリが少なくとも 1 つの隣接エントリ (前のポイントまたは次のポイント) に (時計回りまたは反時計回りの順序で) 隣接していることが保証されます。例: A, B, D, C... または B, A, D, C... ですが、 A, C, B, D... ではありません (A, B, C のいずれかになるように並べ替える必要があります、D または D、C、B、A)。この投稿を見つけましたが、回答がないようです:ポイント リストをポリゴンに並べ替える
CPU のパフォーマンスが問題です。しかし、「遅い」解決策でさえ、実装と理解が簡単であれば (次のプログラマーにとって)、効果的なキャッシュメカニズムを考え出すことができれば問題ないかもしれません。
私がしなければならないことの例を示すために写真を添付したいと思いますが、まだ評判ポイントが 10 ありません。とにかく、このポリゴンのリストで 3 番目の例の頂点を並べ替える手段があれば、それは完璧です: http://upload.wikimedia.org/wikipedia/commons/1/1f/Assorted_polygons.svg
私は本当にすべての助けに感謝します、ありがとう!
編集:確かに座標系の中心点を保証できます-それは画面の中心になります。すべてのポイントは 0 と画面の幅/高さの間になります (原点は明らかに幅/高さ / 2 です)。ポリゴンの内部に原点が含まれているとは限りません。まれな例外ですが、説明する必要があります。
ところで、私のセグメントが必ずしも順番どおりではない理由は、それらが Conrec: http://paulbourke.net/papers/conrec/を使用して生成されているためです(それらは等高線です)。以下を使用して、Conrec によって生成された等高線セグメントを注文します。 Conrec を使用して等高線の連続点の配列を組み立てる方法 問題のケースは、地図上の外側の等高線です。それらはマップの端と交差します (つまり、閉じた多角形を形成しません)。この場合、線の始点 (マップの端) に再接続するか、兄弟線がマップに入るまで (最終的に元の位置に戻るまで繰り返します)、マップの境界の端に沿って描画します。点)。次に、領域を描画して、塗りつぶし API を機能させることができます。この情報がお役に立てば幸いです。最善の方法は、ポリゴン頂点の順序付きリストを生成することだと思いましたが、おそらく別のアプローチが必要です。