Java 如何生成;“随机”;点之间有一些最小距离

Java 如何生成;“随机”;点之间有一些最小距离,java,Java,我正在尝试制作一个程序,用点(城市)生成“地图”。只生成随机城市(用图表表示)不是问题,但我需要设置它们之间的最小距离(例如,城市之间的距离为5或更多)。 大约有3000个城市,所以我正在寻找一些有效的解决方案 我想不出如何解决这个问题,所以如果有任何帮助,我将不胜感激。如果大约有3000个城市,将它们放在地图上,然后在前进的过程中检查您的最小距离标准,可能也没什么不合理的。检查时间增加为O(n),地图上的点越多,发生“碰撞”的可能性就越大 你需要多大的“随机性”?如果你把地图分成一个5x5正方

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


我想不出如何解决这个问题,所以如果有任何帮助,我将不胜感激。

如果大约有3000个城市,将它们放在地图上,然后在前进的过程中检查您的最小距离标准,可能也没什么不合理的。检查时间增加为O(n),地图上的点越多,发生“碰撞”的可能性就越大

你需要多大的“随机性”?如果你把地图分成一个5x5正方形的网格,并在方框的中心2.5x2.5处随机放置一个点,你能通过吗?那会很快,而且不会发生碰撞


如果你的程序使用x轴和y轴,你应该参考距离公式。是它的一个链接。这种方法也可能派上用场。
把你的第一个城市想象成圆圈的中心。第二个距离最小的城市应位于圆的圆周上,最小距离为该圆的半径。你有无限的可能性知道第二座城市应该在哪里。但同样,这是假设您使用的是x轴和y轴。

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

使用这种方法时,您需要注意的最大一点是,由于整数除法运算符float to integer conversion运算符的负数行为对于处理器来说很容易,而对于程序员来说却不太有用,因此,如果某些坐标是正的,而某些坐标是负的,则必须注意异常情况。例如,如果
x
int
,则计算
int col=x/10
col
对于-9到+9之间的x值将为零(这意味着包含点(0,0)的框在每个维度中几乎是其应有大小的两倍)。如果坐标可能变为负值,则必须在执行除法之前将其调整为正值