30

与えられたもの:これらの点でメッシュを構築する頂点と三角形のセットで定義された3Dメッシュ。

問題:任意の平面に投影された任意に回転したメッシュの2Dアウトラインを見つけます。

投影は簡単です。課題は、平面に投影された三角形のエッジの「船体」を見つけることにあります。このアルゴリズムの研究に関する入力/ポインターについての助けが必要です。簡単にするために、3Dエッジがxy平面に真っ直ぐ下に投影されていると仮定できます。

4

6 に答える 6

12
  • 右端の点(x座標が最大の点)から開始します
  • このポイントからすべてのエッジを取得します
  • 正のx軸に対して最小の角度のエッジをたどり、それを解集合に追加します
  • 到達したポイントから、最小の角度のエッジをたどって、元のエッジに追加します
  • 元のポイントに到達するまで繰り返します
于 2009-06-18T23:27:17.780 に答える
3

私は凸解の答えしか見ないので、ここに非凸の私のものがあります。(意図が少し混乱しました。)

2D三角形からすべてのエッジを取得し、それらをグループ化します。2つのエッジが両方のエンドポイントを共有している場合、それらは同じグループにあります。エッジが1つしかないすべてのグループは、シェルの一部になります。

最後に、シェルエッジを結合することにより、シェルエッジを1つのリングに結合できます。

于 2009-06-21T17:39:13.117 に答える
2

この質問で言及されているアルファ形状手法は、頂点接続が不明な一般的なポイントのセットを処理します。

2D凹型船体を生成するための効率的なアルゴリズムはありますか?

ただし、投影によって保存できる「顔」情報はすでに知っているので、おそらく最善のアプローチではありません。

ブルートフォースアルゴリズムは、特に空間ソート構造が使用されている場合に実行可能である可能性があります。たとえば、各ファセットについて:

  1. ファセットを平面に投影します
  2. 投影されたファセットが既存のジオメトリによって完全に囲まれているかどうかを確認します。囲まれている場合:完了(投影されたシルエットを拡張する必要はありません)
  3. ポイントが既存のジオメトリの外側にある場合は、三角形と三角形の交差を実行して外側にある部分を特定し、任意のn-gon(おそらく凹面)を作成して不足しているスペースを埋めてから、n-gonを三角形に切り刻みます

別のアイデアは、必要な忠実度に応じて、投影面から元のジオメトリに垂直な光線の束を発射することです。2Dヒット/ミスを作成し、それを使用してエクステントを決定します。

于 2009-06-18T18:22:22.557 に答える
2

メッシュ投影の2Dアウトラインは、そのエッジの投影のサブセットです。

この観察結果を使用すると、次の方法を使用して2Dアウトラインを決定できます。

  • 1つの面のみに属するすべてのエッジの投影は、2Dアウトラインの一部であり、
  • 他のエッジの場合、隣接する面の法線ベクトルを決定します
  • これらの法線と射影面の法線の内積を計算します
  • 内積のすべての符号が同じでない場合、このエッジの投影は2Dアウトラインに属します(つまり、一方の面が投影面を向いているのに対し、少なくとももう1つの面は向いていないため、エッジがの一部として識別されます。概要)。

この方法では、投影面から見えないエッジも含めて、投影面に直交するすべてのエッジが報告されることに注意してください。たとえば、トーラスを使用すると、投影面の視点から内部の穴が見えないようにトーラスを回転させた場合でも、内部と外部の輪郭が検出されます。どのエッジが表示されているかを分類するには、ある種の可視性テストが必要になります。使用目的がユーザー表示の場合は、正射影行列で計算された深度バッファーを使用して、射影平面の視点からジオメトリをレンダリングし、Z検定を実行して、平面から見えるエッジを決定できます。精度が必要な場合は、視程を決定するために光線/三角形の交差を実行する必要があります。

于 2014-03-23T18:58:47.943 に答える
2

追加するだけです:投影のエッジを見つける非常に直感的な方法は、裏面カリングです!カリングされた面とカリングされていない面の間のエッジは、アウトラインである必要があります。内部のエッジを非表示にする場合は、zバッファを使用します。背面カリングは、単純に投影後の頂点の順序であり、計算が非常に安価です。

于 2015-04-20T05:13:46.363 に答える
0
  1. xが最小である点を見つけます
  2. この点のすべてのエッジを見つける
  3. この時点から始めて、スティック(緑)があることをイメージすると、時計のように回転して、最初に出会うエッジを見つけます。それをエッジAと呼びましょう。 エッジ-A
  4. そのエッジで交差点を探します-A。交差の原因となるエッジBを見つけます。これをインターAと呼びましょう。このインターAは2番目のアウトラインポイントです。 エッジB
  5. 次に、次のアウトラインポイントであるエッジBの2つのポイントの間を考えてみましょう。インターAと始点をリン​​クします。次に、「スティックを転がして」次のアウトラインポイントを見つけることができます。(候補点1が1つです) ここに画像の説明を入力します
  6. コレクションにすでに存在するポイントが見つかるまで、上記の手順を繰り返します。

バニーのアウトラインを見つけるデモを参照してください。これは、上記のアルゴリズム の実装です。

于 2021-04-17T11:09:05.007 に答える