有一種非常簡單的方法可以創建一個近似的Voronoi圖VD對於每個需要在VD中定義一個單元的s
(二維平面),你在一個圓錐體的s
處以恆定的斜率和一定的高度作爲中心,然後你從上面看到圓錐體(所有尖峯都是可見的)景觀。滿足(投影到2D平面)是(近似的)Voronoi圖。
(Image Source)
當您在意見中的要求,以獲得實際的邊緣數據似乎不那麼容易。但是可能有一些圖形例程通過相交圓錐來生成它們。
另一種方法是計算給定點集的Delaunay三角剖分。這個related post中引用了一些實現(也提到了簡單的近似值)。然後你計算你的三角測量的雙重圖,你就得到了Voronoi圖。 (雙圖表示對於三角剖分中的每個邊緣AB
的每一個邊緣,VD中存在一個邊緣,平分兩個頂點A
和B
之間的空間,並且對於每個三角形,在雙邊相遇的VD處存在頂點。) Othwerwise還有許多C#
Voronoi實現:Unity-delaunay,但正如你所提到的使用Fortune方法。
如果你想自己的代碼都可能在O(n^2)
時間計算點用蠻力三角爲n
點。然後應用圈內測試和edge flips。也就是說,對於每個三角形t(abc)
創建一個由t
三個頂點定義的圓C
。然後檢查你的點的另一點d
是否在C
內。如果是,則翻轉t
中的邊緣,並在d
的三角形中形成邊緣。該翻轉完成,直到所有三角形滿足空圓屬性(德勞內條件)。再次以蠻力將需要O(n^2)
時間。然後你可以計算上面提到的雙圖。
(Image Source)
來源
2017-07-27 06:38:51
gue
所以,做你真正需要的幾何精確Voronoi圖或者是像素近似正常,因爲你提到的‘風景’? – gue
的近似絕對是好的。雖然這將是不錯的頂點或邊的數據,這樣我就可以用它來生成一個網格。謝謝GUE! – Komm
的可能的複製[最簡單的Voronoi圖的算法來實現?(https://stackoverflow.com/questions/973094/easiest-algorithm-的-維諾 - 圖對實施) – Bytemain