親愛的社區成員,優化Delaunay三角剖分算法
我一直在最近在cpp中實現Delaunay三角剖分。儘管我的算法可行,但速度非常慢(100個物體的計算時間約爲16秒)。
算法是基於蠻力的方法。給定一個有限的點的集合:
- 我通過每個點迭代三次,檢查,如果我能
創建從這些點的三角形; - 從這三點來看,我正在創造一個循環,它貫穿了這些要點;
- 我正在遍歷整個點集,第四次檢查創建的圓是否包含與上述三個不同的點。
- 如果在圓內沒有附加點,我假設從這三點創建的三角形是有效的。
就像我剛纔提到的,算法是直接實現在這裏描述的Delaunay三角剖分:https://en.wikipedia.org/wiki/Delaunay_triangulation。它的工作「完美無缺」,但速度很慢。
任何有關邏輯的想法/建議可以加速它(如果可能,不需要完全改變邏輯)?
你必須,如果你想接受的速度改變邏輯。無論你使用什麼技巧,n^4都會非常慢,明智的算法是n log n。 –
您是否可以爲某些範圍的三角形預定義一組圓。然後,看看你的積分是否與其中的一個匹配 – ldgorman
我會給出一個一般性的提示,即很少有人知道:在檢查一個點是否在圈內時,不需要取平方根。 – Jay