3

だから私は表面を近似する三角形のメッシュを持っています。

これは、次のプロパティを持つグラフのようなものです。

  • グラフの境界線上の頂点は簡単に識別できます。(隣接する頂点の数 > 含まれる三角形の数)
  • 任意の 2 つの頂点間の距離を簡単に計算できます。(ユークリッド距離)
  • 任意の頂点vについて、 vの隣接点ではない頂点は、vの隣接点の少なくとも 1 つよりもvまでの距離が大きくなければなりません。つまり、 vの近傍リング内に非隣接頂点が出現することはありません。

各頂点vについて、v から任意の境界頂点までの最小距離を計算したいと考えています。

私は力ずくでこれを行い、すべての境界頂点のリストを作成し、vの距離をそれぞれと比較し、最小値を維持することができます。しかし、これは非効率的です。

単一の頂点vごとに最も効率的な方法は、最上位の要素がvに最も近い優先キューを持つことだと思います。キューはvの隣人で初期化されます。キューの上部は境界頂点ではありませんが、上部をポップし、ポップされた頂点のすべての隣接をプッシュします。

頂点vに 6 つの隣接点があるとします。6 つのそれぞれの最小境界距離を計算し、6 つの隣接点の最小値を与える正確な境界頂点を記録しました。これらのいずれかがvの最小境界値も与える必要があることを私は知っています。これを証明することはできませんが、直感的だと思います。vが隣接する頂点に囲まれている場合、 vに最も近い境界頂点は、隣接する頂点の 1 つに最も近い境界頂点でなければなりません。

この知識を使用して、グラフの各ポイントの最小値を効率的に計算する方法があるかどうかを知りたいです。各頂点からの幅優先検索よりも効率的です。

4

1 に答える 1

0

境界頂点が見つかるまで幅優先探索を行っても、これが最も近い境界頂点であるとは限りません。これを確認するには、2 次元の三角形分割された平面グラフの場合、各頂点に非常に小さい個別の z 座標を追加し、その自然で最も単純で適切な近似三角形メッシュ (完全な近似を与える) の 3 次元サーフェスを定義できることに注意してください。元の平面グラフに対応するメッシュです。したがって、v を境界頂点に接続するパス上の最小 #edges に関して最も近い境界頂点が、ユークリッド距離に関して最も近い境界頂点ではない頂点 v が存在する三角形分割された平面グラフの例を示すだけで十分です。このような平面グラフの例を次に示します。

最初に、頂点 (0,0)、(1,0)、(0,1) を持つ直角三角形を描きます。次に、頂点がエッジを同じサイズのセグメントに分割するように、エッジに沿って (1,0) から (0,1) までの多数の頂点を選択します。これらすべての頂点を (0,0) に接続します。次に、追加したすべての頂点について、隣接する頂点の各ペアについて、2 つの頂点を 2 つの正三角形の頂点として使用する正三角形を描画します。正三角形のすべての「頂点」を直線で結びます。これで、トランプの家の最初のレベルのような領域ができたはずです。同様に、ハウス オブ カードの第 2 レベルを第 1 レベルの上に追加します。これがグラフで、あなたの特性を満たしています。ここで、(1,0) から (0,1) までのエッジに沿って追加したすべての頂点について、隣接点として (0,0) があり、これが境界頂点であることに注意してください。ただし、ユークリッド距離に関して最も近い境界頂点は、2 レベルのカードの家の周囲に沿った境界頂点の 1 つになり、ほとんどの場合、2 エッジ離れています。これらの内部頂点の 1 つから幅優先検索を行うと、最も近い境界頂点として (0,0) が返されますが、これは正しくありません。この例は、あなたの仮定がまだ満たされているように、物事がどれほど複雑になるかを垣間見ただけだと思います。実際、最速のアルゴリズムは、すべての境界頂点を列挙し、各頂点についてすべての境界頂点をテストして最も近いものを見つけることです。ほとんどの頂点が境界頂点ではない適切な「太い」メッシュがある場合、少なくとも境界頂点の数は頂点の総数よりもはるかに少なくなります。

于 2013-07-18T19:56:54.983 に答える