11

Delaunay三角形分割がそのステップである、内側軸抽出の実装を必要とするプログラムを書いています。外部内側軸は不要であるため、対応する外部三角形を削除する予定です。幸いなことに、多くの図が掲載されたページに出くわしました。また、内部および外部の Delaunay 三角形を決定する方法のヒント (「破線の周囲に基づく」) もありましたが、詳細な説明はなく、ヒントにすぎません。アルゴリズムを知っている人はいますか?

編集:最初の点が閉じた多角形の境界からサンプリングされることを忘れていました。私の意図は、各ドローネ三角形が多角形の内側にあるかどうかを判断することです。

4

4 に答える 4

14

このソリューションでは、 CGALと同じように「仮想無限 Delaunay 頂点」を使用して Delaunay 三角形分割を表すデータ構造があることを前提としています(詳細はこちらを参照)。

アイデアは、境界 Delaunay エッジを見つけることです。2 つの連続するサンプル ポイントを接続するエッジです。次に、ドロネー三角形分割を「フラッド」して、ドロネー面を分類します。無限頂点は外部であることを知っているので、境界エッジを交差しない限り、その隣接 (および隣接の隣接など) を外部として分類できます。境界エッジに到達した場合は、単純に隣接する三角形を内部としてマークし、同様に続行できます。

入力: 閉じた形状の境界を高密度にサンプリングした点の集合。
出力: 形状の内部のボロノイ図 (形状の中心軸の近似値)

  1. ポイントの Delaunay 三角形分割を計算します
  2. 2 つの連続するサンプル点を接続する Delaunay エッジをマークします。(このペーパーの 4 ~ 5 ページを参照して、すべての Delaunay エッジでローカル テストを使用してこれを行う方法を参照してください)
  3. すべての無限 Delaunay 面を OUTSIDE として分類し、それらをキューQにプッシュします。
  4. Qが空でない 間
    1. Delaunay 面 f = Qからのポップ
    2. f の 未分類の隣接三角形tごとに
      • tfが共有する Delaunay エッジがマークされている場合、 tをfの反対として分類する
      • そうでなければfと同じようにtを分類する
      • tQにプッシュ
  5. すべての Delaunay エッジeについて
    • 隣接する 2 つのドローネ三角形d1d2が両方とも INTERIOR として分類される場合、 d1d2の外心を結ぶ線分を出力します。

このような入力の場合
サンプルポイント
、次の中心軸近似を計算できます。 中心軸

Mesecinaの無料の Windows バイナリを使用して、この中心軸近似が実際にどのように動作するかを確認できます。ソースコードはこちら

于 2009-06-16T17:06:43.570 に答える
2

外部三角形を作成しない別の形式の三角形分割の使用を検討しましたか? 私はかつて、多角形の三角形分割の理論的側面について議論するために多くの時間を費やしたコースを受講しました。コースのサイトをざっと見てみると、いくつかの洞察が得られるでしょうか? http://cgm.cs.mcgill.ca/~godfried/teaching/cg-web.html#triangulation

編集:実際には、私は別のことを考えていました. 三角測量しようとしている多角形が既にある場合は、グリーンの定理を使用できます。グリーンの定理は、多角形の周囲を使用してその面積を計算します! さらに重要なことは、この場合、点が線の片側にあるのか、それとも別の側にあるのかを、面積の符号を見ることで判断できることです。多角形では、グリーンの定理は単純な引き算の問題になります。したがって、多角形の内側にあることがわかっている任意の点を取り、多角形の各エッジに対する面積を計算します。これにより、各線のどちら側にポイントを配置する必要があるかがわかります。次に、各三角形の内側に点を取り、同じことを行います。いずれかの符号が間違っている場合は、外部三角形があります。(注: ポリゴンの形状によっては、これが実際に機能しない場合があります。

于 2009-06-15T16:35:33.867 に答える
0

彼らが提示するアルゴリズムは、彼らの図の 1 つに示されているように、少し壊れているように見えます。これが、Google Scholar に有用な引用がないように見える理由かもしれません.

提案されたアルゴリズムを非凸多角形に使用すると、実際の三角形分割が常に復元されるとは限らないことがわかります。http://www.cc.kyoto-su.ac.jp/~atsushi/Jun/Topics/Teddy/images/example2_2.jpg

于 2009-06-15T17:16:53.920 に答える
0

おそらく、私はここであまりにも多くの仮定を立てていますが、ポイントの束で構成される多角形があり、それらのポイントを三角形分割しているように聞こえます。次に、ポリゴンの外側にあるすべての三角形を破棄したいと思いますよね?

外部三角形を作成しないように、(モノトーン分解または類似のものを使用して) 多角形を三角形化しないのはなぜですか? これにより実行時間が長くなる可能性があると思います(最初にO(nlogn)時間で三角測量を行い、次にO(n ^ 2)時間でドローネー三角測量を作成します)が、より高速な方法があるかもしれません。

于 2009-06-15T16:24:48.880 に答える