原文地址: https://geekplux.com/2018/03/16/how-to-picking-uniform-points-in-irregular-polygon.html給定一個不規則的多邊形(多是凹多邊形,多是凸多邊形),在其中要顯示拓撲網絡數據,要求節點不重合、不超出邊界。html
取凸多邊形的外接矩形,在矩形中隨機撒點,若是落在凸多邊形外,再次隨機撒點,直至落在凸多邊形內。
這個方法比較暴力,能夠經過計算指望來控制撒點次數,撒點次數應該符合泊松分佈。git
能夠看做方法一的改進。切成多個三角形以後,問題轉化爲了如何在多個三角形內撒點。github
參考:https://beta.observablehq.com...
切割庫:https://github.com/mapbox/earcut算法
三角形是凸多邊形,如何在三角形內均勻撒點可參考:http://mathworld.wolfram.com/...網絡
算法步驟:dom
這裏有個問題*:每一個三角形被選取的機率相同,但三角形面積不一樣。這就可能出現小面積三角形中的點和大面積三角形中的點個數差很少,從而形成整體上看起來點集中在小面積三角形中的狀況。
因此要保證三角形被選取的機率跟它的面積成正比。佈局
能夠看做是 方法二 的改進。給隨機撒好的點設置相同的電荷力,使其不停迭代到穩定狀態,即造成下圖狀態,達到儘可能「均勻」。spa
參考:https://bl.ocks.org/mbostock/...orm
和前三種方法無關。用四叉樹將二維空間切割成相等大小的正方形,而後用正方形圖心撒點。htm
參考:https://www.phase2technology....
本做品採用知識共享 署名-非商業性使用-禁止演繹 4.0 國際 許可協議進行許可。