我需要在 2D 空间中生成具有定义的最小和最大可能距离的点的算法思路。
基本上,我想找到一种在充满点的 2D 空间中插入点的好方法,这样点具有随机位置,但距离最近的点也大于 MINIMUM_DISTANCE_NUM 且小于 MAXIMUM_DISTANCE_NUM。
我需要它来玩游戏,所以它应该很快,并且不依赖于随机概率。
最佳答案
将点集存储在 Kd tree 中.随机生成一个新点,然后检查它最近的邻居,这些邻居可以在 Kd 树中快速查找。如果该点被接受(即 MIN_DIST < 最近邻居 < MAX_DIST),则将其添加到树中。
我应该注意,这在点不是太紧密的情况下效果最好,即 MIN * N << L,其中 N 是点的数量,L 是您将它们放入的盒子的尺寸。如果这不是真的,那么大多数新点将被拒绝。但是想一想,在这个极限下,你是在把弹珠装进一个盒子里,在一定密度以上,排列根本不可能很“随机”。
关于algorithm - 生成具有定义的最小和最大距离的随机点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8930796/