web-dev-qa-db-ja.com

線分がドローネ三角形分割の外部エッジかどうかを判断する方法は?

一連の点のドローニー三角形分割を作成しました。次に、三角形分割を反復処理して、次の条件に当てはまる外部のラインセグメント/エッジを削除します。

  1. 外側のエッジは三角形の斜辺です
  2. 斜辺を「ベース」と呼び、三角形の「高さ」を決定します。次に、base/height> x(xはいくつかの基準値、たとえば4です)の場合、そのEdge/triangleを削除します(データ構造/オブジェクト定義に応じて)。

本質的には、三角形からエッジを削除して、三角形の外側にある細長いエッジを削除して、より特徴的な形状を作成しようとしています。後で、残りの平均と比較した三角形のサイズのチェックも追加する可能性があります。

私の質問は、特定のエッジが三角形分割の外側にあるかどうかを確認する簡単な方法はありますか?

私は三角測量プロセス自体に、すべてのラインセグメントを独自のオブジェクトにし、各ラインセグメントに隣接するポリゴンを「認識」させ、空の隣接スロットがある場合は外部にする設計を組み込むことができると考えました。しかし、これは効率が悪いようで、現在私が持っているコードは、頂点のインデックスが保存されている三角形のオブジェクトの束を吐き出しているだけです。ラインセグメントの計算はそれほど悪くないはずですが、すべてのエッジに対してではなく、外部エッジに対してのみ削除プロセスを実行したいと思います。

この質問が数学やプログラミングに属していたかどうかはわかりませんが、ここに含めるべきではないのか、私が提供した情報が少なすぎる/多すぎるのか、お詫びします。

私はPythonで作業していますが、ここでの懸念はコードではなく理論的なアプローチ/アルゴリズムに関するものであるため、コードを含める必要はないと思います。

注意して編集:1つの外部三角形を削除した後、最初のラウンドの三角形が削除パラメーターに適合する新しい外部を明らかにする場合は、外部を複数回繰り返したいと思います。したがって、外部エッジを毎回完全に再計算することは避けたいです。つまり、存在する場合、簡単な質問についてです。

6
acm_myk

ポイントセットの三角形分割により、各ポイントについて、「隣接する」ポイント、つまりポイントが接続されている隣接ポイントのリストが提供されます。

三角形分割を計算したら、従来の gift-wrappingアルゴリズム に類似したアルゴリズムを凸包に適用することにより、外側のエッジを決定できます。たとえば、「最も右の」ポイント(凸包の一部であり、外側のエッジにある)から始めます。次に、三角形分割の外側のエッジのみを使用して、ポイントからポイントへステップします。 「凸包」アルゴリズムとの唯一の違いは、点p_(n-1)とp_(n)がある場合、p_(n)間の角度を最小化するすべての隣接する点の中の点としてp_(n + 1)を選択することです。 -> p_(n-1)およびp_(n)-> p_(n + 1)。

お役に立てれば。

example for going from p_n to p_(n+1)

5
Doc Brown

三角形オブジェクトのリストから始めることができるのは幸運です。

  • flatMap エッジのリストへの三角形のリスト。
  • 外側のエッジはリストに一度だけ表示されます。

これを見ると、写真を見ることができます。各内側のエッジは、ちょうど2つの三角形で共有されます。各外側のエッジは正確に1つの三角形に属しています。

エッジを削除すると、その三角形の他の2つのエッジは、まだ外れていない場合でも、常に外側のエッジになります。リストから三角形を削除する前に、それらを一連の外側エッジに追加するだけです。これは、マップをエッジから三角形に戻すことで高速化できます。

3
Karl Bielefeldt