如何生成平面凸多邊形內部的隨機點?

假設已知平面內凸多邊形各頂點坐標,如何在凸多邊形內部均勻生成隨機數?


拆成若干個三角形,先按面積大小的概率選定三角形,再在三角形內選定隨機點。


補充一下 @葉飛影 的答案,按面積大小採樣是一個離散採樣問題,可使用 Alias method 達到 O(1) 運行時間、O(n) 預計算時間和 O(n) 空間。多年前寫過一篇相關的博文 回應CSDN肖舸《做程序,要「專註」和「客觀」》,實驗比較各離散採樣演算法。


找一個適當大小的矩形把該區域蓋住,在矩形內隨機取點。沒取到該區域的點就再來一次,直到取到為止。

多次取也取不出來的可能性是有的,比如某種凹多邊形的情況比如星形,目標區域占矩形面積不高的情況下。但持續取點,可以取到的概率是趨向於1的。但是如果確實多邊形長得比較奇怪無法取到合適的矩形,這種情況下就用樓上的方法吧。這種方法的優點是編程容易一些。


取凸多邊形的外接矩形,在矩形中隨機取點,如果落在凸多邊形外,再次隨機取點,直至落在凸多邊形內。


ArcGIS里有Create Random Points工具,實現方法是對多邊形進行三角切分,按三角形面積大小為概率隨機取出一個三角形,對三角形的兩條邊各取隨機數作平行線,交點在三角形內則為採樣點,交點在三角形外則對稱映射到三角形內作為採樣點。同 @葉飛影 的答案。


Use normalized barycentric coordinate


各點坐標作為基。


推薦閱讀:

Berry相與纖維叢的問題?
為什麼均值不是對任何隨機變數都存在?
如果哥德巴赫猜想被證明,那麼這個結論可不可能有初等的應用?
電腦特效未來會取代道具、特效化妝產業嗎?

TAG:數學 | 計算機 | 幾何學 | 隨機數 |