(V1, V2, V3)
通常の三角形メッシュでランダムに選択された
3つの頂点があります。これらの3つの頂点について、それらの間の測地線距離と(ダイクストラを使用して)パスを計算し、上の図のように三角形のような表面を形成しました。
これで、各パスにある頂点があり、特定の頂点から測地線距離を計算できます。
私がしたいことは、三角形のような領域にある頂点または三角形を取得することです。これどうやってするの?
(V1, V2, V3)
通常の三角形メッシュでランダムに選択された
3つの頂点があります。これらの3つの頂点について、それらの間の測地線距離と(ダイクストラを使用して)パスを計算し、上の図のように三角形のような表面を形成しました。
これで、各パスにある頂点があり、特定の頂点から測地線距離を計算できます。
私がしたいことは、三角形のような領域にある頂点または三角形を取得することです。これどうやってするの?
回答:
洪水充填に依存する別の方法があります。まず、エッジが反時計回りのループを形成しているループにエッジデータを配置します。次に、ループの任意の点から開始し、その点を結ぶエッジを選択します。アウトバウンド境界エッジを使用して、それを他のアウトバウンドエッジと交差させます。それがフェース法線の方向を指している場合、それを含めないでください。このエッジから境界エッジに到達するまで続行し、境界エッジで塗りを終了します。まだ訪れていない境界エッジ頂点で続行します。
塗りつぶしの使用についてはすでにコメントしましたが、より柔軟であるためどのように改善するのが望ましいでしょうか。別の解決策としてスキャンラインがあります。(私はそれがあなたの幾何学について多くの仮定をしているので可能だと言いますが、示されている特定のセットと多くの同様のもののためにそれは働くでしょう。)
3点の例の場合:セグメントv1、v2とv3が存在する線から交差頂点を見つけます。(v2の左上の頂点)この頂点をv4と呼びます。
For every vertex pair a,b down v1,v4 and v1,v3
For every vertex from a to b
Mark as in the set
For every vertex pair a,b down v3,v2 and v4,v3
For every vertex from a to b
Mark as in the set
これはスキャンラインと呼ばれます(上の画像では)赤と緑のラインを同時に下に移動し、次に赤と青のラインを同時に移動してラインをスキャンします。
インデックスパターンがある場合、このソリューションは非常に高速です。これはよくあることです。そうでない場合、隣接するどの頂点がライン上にあるかを決定するために計算が必要になります。
面白いのは、スキャンライン、重心テスト(三角形の境界ボックス内)、および塗りつぶしはすべて、3Dレンダリングで三角形を描画する方法です。
表面の各点について、表面にバインドされた重心座標を計算し、それらを使用して三角形の内側または外側を確認できると思います。
正確なアルゴリズムは手元にありませんが、このような座標を正確に処理しているように見える以下の論文を見つけました。