我有一大堆重疊的圓,每個圓都在一個具有特定半徑的隨機位置。尋找一個有效的結構來檢查哪個圓圈包圍一個點
type Circle =
struct
val x: float
val y: float
val radius: float
end
考慮到與類型
type Point =
struct
val x: float
val y: float
end
一個新的起點,我想知道在我一套封閉點新的社交圈。線性搜索是微不足道的。我正在尋找一個能夠容納圓圈的結構,並且對於所呈現的點返回比O(N)更好的封閉圓圈。
理想情況下,結構應該很快插入新的圓圈和去除圓圈。
我想在F#中實現這一點,但任何語言的想法都很好。
爲了您的信息,我希望實現
http://takisword.wordpress.com/2009/08/13/bowyerwatson-algorithm/
,但如果我用掃描各界爲每一個新點的天真的方法這將是一個O(N^2)。
什麼某種改性四叉樹的。那麼你可以做O(log n) – 2013-04-04 08:46:20
是的,但是四叉樹是用於不與幾何對象重疊的點。我不知道如何繼續。 – bradgonesurfing 2013-04-04 08:47:36
你至少可以將事物縮小到與地區重疊的一小部分圓圈。 – 2013-04-04 08:48:27