如何生成“随机”点,它们之间的距离最小

时间:2013-10-30 20:10:10

标签: java

我正在尝试制作用点(城市)生成“地图”的程序。仅生成随机城市(由图表表示)不是问题,但我需要设置它们之间的一些最小距离(例如,城市之间的距离是5或更多)。 这是大约3 000个城市,所以我正在寻找一些有效的解决方案。

我无法设计如何解决它,所以我将不胜感激任何帮助。

3 个答案:

答案 0 :(得分:1)

如果将地图划分为10x10的正方形网格,那么在给定点的五个单位内的任何点都必须位于由(x +/- 5,y +/- 5)定义的四个正方形之一内。 10x10正方形可能包含多达8个点,但是每个新点可以检查四个正方形,每个最多8个点可能比检查数千个其他点更快。

使用这种方法需要注意的最重要的事情是,因为整数除法运算符浮点到整数转换运算符的负数行为被选择为易于处理器而不是对程序员有用,如果某些坐标为正,有些坐标为负,则必须注意异常。例如,如果xint而另一个计算int col = x/10;,则{-1}}对于从-9到+9的x值(对于包含点的框)( 0,0)在每个维度上将几乎是它们应该的两倍大)。如果坐标可能为负,则必须在执行除法之前将它们调整为正值。

答案 1 :(得分:0)

如果它是大约3,000个城市,那么 可能不合理地将它们放入您的地图中,然后在您进行检查时检查您的最小距离标准。检查时间上升为O(n),地图上的点数越多,就越有可能发生“碰撞”。

你需要“随机”吗?如果你将你的地图划分为5x5正方形的网格,并且在框的中心2.5x2.5中随机地放置一个点,你可以顺便过关吗?那会很快,你不会发生任何碰撞。

可能值得仔细研究一下你所需要的城市位置的随机性。

答案 2 :(得分:0)

如果您的程序使用x轴和y轴,则应参考距离公式。 Here是指向它的链接。 Circle Equation也可以派上用场。 把你的第一个城市想象成圆圈的中心。具有最小距离的第二个城市应该位于圆的圆周上,最小距离是该圆的半径。你有第二个城市应有的无限可能性。但同样,假设您使用的是x轴和y轴。