Algorithm 生成具有定义的最小和最大距离的随机点

Algorithm 生成具有定义的最小和最大距离的随机点,algorithm,Algorithm,我需要在2D空间中生成点的算法思想,定义点之间的最小和最大可能距离 基本上,我想找到一种很好的方法,在充满点的二维空间中插入一个点,这样该点具有随机位置,但距离最近点的距离也大于最小距离,小于最大距离 我在比赛中需要它,所以它应该很快,而且不依赖随机概率。你说的是多少分?如果点数有上限,则可以生成(预计算)点数组并将其存储在数组中。获取该数组并将其存储在文件中 在地图加载之前,您将完成所有的硬计算处理(这样您就可以使用任何随机点生成算法),然后您将有一个很好的快速获取点的方法 这样,您可以生成大

我需要在2D空间中生成点的算法思想,定义点之间的最小和最大可能距离

基本上,我想找到一种很好的方法,在充满点的二维空间中插入一个点,这样该点具有随机位置,但距离最近点的距离也大于最小距离,小于最大距离


我在比赛中需要它,所以它应该很快,而且不依赖随机概率。

你说的是多少分?如果点数有上限,则可以生成(预计算)点数组并将其存储在数组中。获取该数组并将其存储在文件中

在地图加载之前,您将完成所有的硬计算处理(这样您就可以使用任何随机点生成算法),然后您将有一个很好的快速获取点的方法

这样,您可以生成大量不同的贴图,然后随机选择其中一个贴图来生成点


只有当你有一个上限,并且你可以在游戏加载之前预先计算点数时,这才有效。

你可以使用一个2D规则的点数网格(P0,P1,P2,P3,…,p(m*n),当m是这个网格的宽度,n是高度时)

每个点都与1)一个布尔值相关联,表示是否使用了该网格点;2)从该网格位置“移动”以避免太多规则性。(或者,您可以将点+偏移坐标放置在栅格中)

然后,当你需要一个新的点时,只需从你的网格中随机选取一个未使用的点,将该点声明为“已使用”,并在游戏中使用点+移位


根据n、m、2D空间的宽度/高度以及要使用的点的数量,这可能很好。

将点集存储在图形中。随机生成一个新点,然后检查它的最近邻,可以在Kd树中快速查找。如果接受该点(即最小距离<最近邻居<最大距离),则将其添加到树中


我应该注意的是,这将在点不太紧的情况下工作得最好,即MIN*N一个很好的选择是使用泊松圆盘采样。该算法非常有效(
O(n)
)并且“生成紧密排列的点,但彼此之间的距离不超过指定的最小距离,从而形成更自然的图案”


是否添加更多信息?它们必须添加到随机位置,还是可以预渲染,以便可以按升序添加?是否有固定数量的点需要插入,或者在这些限制条件下没有更多可能的位置时应该停止?很高兴我能提供帮助。我想添加1)您可以通过将所有网格点以随机顺序逐个放置在另一个数组中(使用标志不要放置两次相同的点)来预先计算随机点,以便在需要时只取n+1点。(更快)和2)您可以将此标记为anwer:-)。