C# 多边形中均匀分布点的生成算法
我正在寻找一种算法来生成多边形内均匀分布的点 以下是场景: 我有一个多边形,由每个点的角点(x,y)的坐标指定。我有在多边形内部生成的点数 例如,假设我有一个包含5个点的多边形:(1,1);(1, 2) ; (2, 3) ; (3, 2) ; 和(3,1) 我需要在多边形内生成20个距离相等的点 注意:有些多边形可能不支持均匀分布的点,但我希望以一种尽可能一致的方式分布这些点,以覆盖多边形的所有区域。(我的意思是,我不希望一个零件比另一个零件有更多的点数) 有这样做的算法吗?或者是图书馆 我正在开发一个C#应用程序,但任何语言都可以,因为我只需要算法,我可以翻译它C# 多边形中均匀分布点的生成算法,c#,math,polygon,point,C#,Math,Polygon,Point,我正在寻找一种算法来生成多边形内均匀分布的点 以下是场景: 我有一个多边形,由每个点的角点(x,y)的坐标指定。我有在多边形内部生成的点数 例如,假设我有一个包含5个点的多边形:(1,1);(1, 2) ; (2, 3) ; (3, 2) ; 和(3,1) 我需要在多边形内生成20个距离相等的点 注意:有些多边形可能不支持均匀分布的点,但我希望以一种尽可能一致的方式分布这些点,以覆盖多边形的所有区域。(我的意思是,我不希望一个零件比另一个零件有更多的点数) 有这样做的算法吗?或者是图书馆 我正在
非常感谢您的帮助一个简单的方法是:
参考
看看
它可以挑衅地扔给你一根骨头
但是我记得有一种可能性,可以为图中的一些顶点设置一个固定点 你的算法最终会像
看看
希望这有帮助…我使用的简单方法是:
好在它不需要拒绝方案来实现,所以长而薄的多边形不是问题。对于每个样本,成本只需要在每个事件中生成三个随机数。由于削耳非常简单,而且是一项有效的任务,因此即使对于外观难看的多边形或非凸多边形,采样也会非常有效。简单的答案来自一个更简单的问题:如何从均匀分布中生成给定数量的随机分布点,这些点都将适合给定的多边形 简单的答案是:找到多边形的边界框(假设它是[a,b]x[c,d]),然后继续生成实数对,一个来自U(a,b),另一个来自U(b,c),直到有n个坐标对适合多边形。这很容易编程,但是,如果您的多边形非常参差不齐,或者非常薄且倾斜,则会非常浪费和缓慢
要获得更好的答案,请找到最小的旋转矩形边界框,并在变换后的坐标中执行上述操作。更好的答案来自于更好的问题。假设您想要放置一组n个望塔来覆盖一个多边形。您可以将其视为一个优化问题:找到n个点的2n坐标,这将最小化符合您目标的成本函数(或最大化价值函数)。一个可能的成本函数可以计算每个点到最近邻点或多边形边界的距离(以较小者为准),并计算该序列的方差作为“不均匀性”的度量。您可以使用如上所述获得的n个点的随机集作为初始解 我在一些书中见过这样的“望塔问题”。算法、微积分或优化 @优素福:很抱歉耽搁了;一个朋友来了,一个网络中断了
@其他:要有耐心,不要太激动。你可以使用劳埃德算法:
您可以尝试{spatialEco}包() 并应用函数sample.poly() 您可以尝试以下代码:
library(rgeos)
library(spatialEco)
mypoly = readWKT("POLYGON((1 1,5 1,5 5,1 5,1 1))")
plot(mypoly)
points = sample.poly(mypoly, n= 20, type = "regular")
#points2 = sample.poly(mypoly, n= 20, type = "stratified")
#another type which may answer your problem
plot(points, col="red", add=T)
您可能想尝试获取算法,th