原文地址: 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 国际 许可协议进行许可。