特定のポイントを囲む最も近いポイント(それによってポリゴンを形成する)を見つけるにはどうすればよいですか(画像を参照)


8

私はゲームエンジンを使用していますが、私の仕事は、剛体メッシュの破壊をシミュレートするコードを追加することです。

現在、私はキューブの破壊に取り組んでいます。

私はボロノイのアルゴリズムを使用して(現実的な)破片を作成し、半平面法を使用してボロノイセルを生成しています。

ボロノイ(紫色の点)の周りの最も近い(赤い丸で囲まれた)点を見つける

これを行う方法はすべてのシードポイントに対してです。残りのシードポイントを使用して、垂直二等分面(画像の直線の黒い線)である平面を作成し、これらのすべての平面の交点を計算して、明確なポイントを与えます(すべてのオレンジ色のドット)。

ここまで来ました。

これらの計算されたすべての交点のうち、シードポイント(赤で囲まれたポイント)を最も近くかつ囲んでいる交点のみが必要であり、残りはすべて破棄する必要があります。

私が持っている情報:

1)すべての平面の平面方程式(正規化された法線ベクトルと原点からの距離で定義)

2)交点(計算したもの)

誰かが私が赤で囲まれたポイントを見つける方法を見つけるのを手伝ってくれる?


答えはありませんが、それは興味深い問題です。
Tim Holt

回答:


4

半平面法に従うと、1つおきの点への線分と、それぞれの垂直二等分線が見つかります。

ステップ1:線分 ステップ2:垂直二等分線

これを交差させて、ボロノイセルの潜在的な頂点を見つけます。

ここで、二等分線によって形成される「離れた」半平面のいずれかと交差するものを除外します。

2つの一致する交差、1つの一致しない

明確にするために、「遠い」半平面を半透明の青に着色しました。

ここでは、円で囲まれ2つの赤い点がテストに合格しています。それらは半平面内にありません。uncircled赤い点は、それが右上に点に向かって形成された半平面内だとして、渡しません。

これは事実上、各点すべての二等分線の反対側にあるかどうか(ボロノイサイトに対して)をテストし、そうでないものを破棄することを意味します。(丸め誤差に注意してください。)


この回答は非常に役に立ちました。両方の点が平面の同じ側にあるかどうかを確認するために、平面方程式のベクトルを代入し、それらの符号を探しました。両方が正/負だった場合、それらは同じ側にあります。そうでなければ、彼らは反対側にいます。これでうまくいきます!私のコードは、Voronoiシャードの正しい頂点を生成しているようです!
nilspin 2014

回答でこれらの画像を生成するためにどのプログラムを使用しましたか?
nilspin 2015

@nilspin Inkscape
Anko

3

単純にエッジを反復処理して、対象のポイントを持つ同じ半平面にないすべての頂点をフィルターで除外できます。

最適化として、最も近いエッジから最も遠いエッジまで反復します。スライスを生成するときに頂点をフィルタリングすることもできると思います。

それは、チェリーが付いた小さなピースだけが残るまで、エンドレスナイフでパイをスライスするようなものです。アナロジーが好きなら。切り取って、どの部分が使用され、どの部分が廃棄されるかを確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.