一個小問題引發的慘案(計算幾何,Voronoi圖,半平面交)

某天無聊,腦子裏突然蹦出一個小問題:

給定一個矩形平面,有\(n\)個相同功率的通信基站,請在平面上求出信號最弱的位置

或者說,有\(n\)個點,找出一個位置,使其離這些點中最近的點最遠

是不是一個很簡單的小問題呢

引入Voronoi圖,定義法

對於平面上每個位置,都能找到離其距離最近的一個點。反過來看,每個點都對應一個離它距離最近的位置集合。

我們需要求的答案位置,必是\(n\)個集合中離點最遠的位置中最遠的那一個

這個集合長啥樣呢?

對於點\(i\),枚舉點\(j(1\le j\le n,i\ne j)\),平面上到\(i\)比到\(j\)近的部分,是兩點中垂線分割開,靠\(i\)近的一側半平面

那麼平面上到\(i\)比到其它點都近的部分,就是\(n-1\)個半平面與矩形的交,會是一個多邊形,點\(i\)稱爲該多邊形的基點

把所有\(n\)個多邊形求出來,它就有了專業名稱:Voronoi圖,多邊形稱爲泰森多邊形(百度百科

多邊形的集合是整個平面的一個劃分,這樣的定義賦予了泰森多邊形深刻的現實意義:假設設備都連到距離最近的基站上,那麼每個多邊形就是對應基站的服務區域

類似地,在地理學、天文學、結晶化學、城市規劃等方面也有着切實的應用

至此我們也給出了構建Voronoi圖的樸素算法:定義法,求\(n\)個半平面交,複雜度\(O(n^2\log n)\)

半平面交算法可參考蒟蒻的計算幾何細節梳理&模板

引入Delaunay三角網,逐點插入法

Voronoi圖是平面圖,Delaunay三角網與它互爲對偶圖(對於Voronoi圖的每條邊,連接其相鄰兩個泰森多邊形的基點)

這兩者聯繫起來,有着許多奇妙的數學性質,這裏只略提一二,方便後面算法的引入

一般情況下,Voronoi圖的每個頂點與三條邊相連,在Delaunay三角網中,周圍的三個基點連成三角形,頂點是這個三角形的外接圓圓心(中垂線交點)

(暫不討論特殊情況:Voronoi圖的每個頂點與更多邊相連,多個Delaunay三角形外接圓圓心重合)

由此引入Delaunay三角網的重要性質:對於其中任意一個三角形,其外接圓內部不包含任何一個基點(空圓性)

理由是這樣,假如包含某個基點,那麼外接圓圓心到這個基點的距離比那三個基點更小,應該被劃分在這個基點的泰森多邊形內,矛盾

瞭解這個性質,能夠幫助我們理解Voronoi圖的更高效算法,同時也是Delaunay三角剖分的標準算法:逐點插入法

其思想是維護\(n\)個點的Delaunay三角網,然後加入新點,通過局部調整,生成\(n+1\)個點的Delaunay三角網

分治法

掃描線法

問題變種

相關題目

百度之星2008初賽 T4.圓面覆蓋

問題背景

在平面上有一個長爲L,寬爲W的長方形,左下角座標爲(0,0),右上角座標爲(L,W)。給定一些圓,第i個圓的圓心座標爲(xi,yi),半徑爲Ri。

你的任務是求最小的正實數k,使得把每個圓的半徑變爲原來的k倍後(即:第i個圓半徑變爲kRi,圓心位置不變),長方形將被這些圓完全覆蓋。換句話說,長方形內部或邊界上的任意點均至少在一個圓的內部或邊界上。

輸入格式

輸入第一行包含三個整數n, L, W(1<=n<=50,1<=L,W<=1000),即圓的個數、長方形的長和寬。

以下n行,每行三個不超過1000的正整數xi, yi和Ri

輸出格式

僅一行,包含一個實數k,保留小數點後三位。

樣例輸入

1 2 2
1 1 1

樣例輸出

1.414

更新中!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章