ポイントのセットから(Boost.polygonを使用して)Voronoïダイアグラムを計算しました。
各ボロノイエッジの各セルの中心を接続するドロネー三角形分割を見つけようとしますが、エッジがいくつか欠落しています。
次の画像では、赤い点が私の最初のポイントであり、青い線がVoronoïエッジです(無限のエッジは無視しました)。
斜めのエッジが欠落していることがわかります。私は何が欠けていますか?
ポイントのセットから(Boost.polygonを使用して)Voronoïダイアグラムを計算しました。
各ボロノイエッジの各セルの中心を接続するドロネー三角形分割を見つけようとしますが、エッジがいくつか欠落しています。
次の画像では、赤い点が私の最初のポイントであり、青い線がVoronoïエッジです(無限のエッジは無視しました)。
斜めのエッジが欠落していることがわかります。私は何が欠けていますか?
回答:
ダイアグラムの中心点は、ボロノイ図の縮退したエッジです。不規則な点群のボロノイ図を生成すると、すべての頂点の次数は3になります。4次(またはそれ以上)の頂点は、2つ(またはそれ以上)の頂点が一致する場合にのみ発生します。つまり、それらの間には長さゼロのエッジがあります。ただし、そのエッジには、ドロネー三角形分割で対応するエッジがまだあるはずです。問題は、長さゼロのエッジには方向が関連付けられていないため、2つのエッジのうちどちらを選択するかは任意であるということです。
私が話していることを視覚化するために、4つのより規則的な間隔の点から始めて(次数3の頂点のみで開始するように)、それらを通常の位置に徐々に変換することを検討してください。
これは2つの異なる方法で行うことができますが、どちらもダイアグラムで縮退する場合があります。最終的に、2つの異なるDelaunay三角形分割になります。これらはどちらも縮退ケースの有効な制限です。
何らかの理由でコードにこの縮退ケースが欠落していると思いますが、ボロノイ図からドロネー三角形分割を計算する方法を実際に見ないと、これ以上指摘することは不可能です。
また、さらに高い縮退性(円の周りに等しい角度で4つ以上の点が分布している)がある場合は、さらに注意が必要になることに注意してください。
これらのアニメーションは、(非縮退の場合でも)、対応するボロノイとドロネーのエッジが実際にそれらの有限範囲内で必ずしも交差しないことも示しています。そのため、最後の正多角形を三角形化する2(または3)のエッジが、すべて中心にあるいくつかの縮退エッジに実際に対応していることがわかりにくくなる場合があります。また、合計で五角形の5つの異なる三角形分割と六角形の14の三角形分割があることに注意してください(14がすべて、非縮退三角形分割を変形することで取得できるかどうかはわかりません)。
編集(OPによる)
Boost.polygonで計算されたボロノイ図により、各ボロノイ頂点、およびそれらの頂点にリンクされた各エッジ(時計回りまたは反時計回り)を歩くことができます。この方法で、エッジのペアごとに1つの三角形を作成できます(接続された2つのエッジは3つのセルにリンクします)。