我想在 Canvas 上创建一个有限制的随机圆圈。即,所有圆都不应该相交。到目前为止,我想出了一个检查来查看圆圈是否相交,如果相交,它会生成一个新圆圈。这是我的推理和代码:
for(int i=0;i<amountRBC;i++)
{
xPosRBC[i]=random.nextInt(xSize);
yPosRBC[i]=random.nextInt(ySize);
}
在这里,我为每个 RBC(总共 amountRBC,为了演示目的,假设为 5)生成一个随机的 x 和 y 位置(在 xSize 乘以 ySize 的 Canvas 内)。这些 x 和 y 位置分别存储在数组 xPosRBC[] 和 yPosRBC[] 中。
for(int i=0;i<amountRBC;i++)
{
for(int j=0;j<amountRBC;j++)
{
while(Math.sqrt(Math.pow(Math.abs(xPosRBC[j]-xPosRBC[i]),2)+Math.pow(Math.abs(yPosRBC[j]-yPosRBC[i]), 2))<(2*rbcRadius))
{
xPosRBC[i]=random.nextInt(xSize); //random starting position of bacterium
yPosRBC[i]=random.nextInt(ySize);
j=0;
}
}
}
然后我检查每个点是否小于圆的 2* 半径(使用这个 sqrt((|xpos1-xpos2|)^2+(|ypos1-ypos2|)^2) 公式),如果他们是,一个新的位置被生成并且“检查”循环被重置(j = 0)。对存在的每个圆重复此过程(从 i=0 到 amountRBC)。在我的推理中,这应该以 5 个随机放置的圆圈结束,它们之间的距离至少为 2*radius,这意味着它们不应该相交。 但是,该程序似乎无限期地陷入了这个 while 循环,我似乎无法找出原因。
[注意]:只有少量的圆圈,在大 Canvas 上半径很小。这意味着没有足够的屏幕来填满圆圈的情况不是问题。
如有任何帮助,我们将不胜感激!
最佳答案
我刚刚找到了问题的解决方案。即,在所述 while 循环中,它还将圆的大小与其自身位置进行比较,因此距离将始终为 0。在 while 循环中,我添加了操作符 (&& i!=j) 现在看来工作正常。谢谢大家!
关于Java:随机生成不相交的圆(卡在 while 循环中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44757318/