我希望在画布上创建随机圆形,但有一个限制条件:这些圆形之间不能相交。目前我已经想出了一种检测圆形是否相交的方法,如果它们相交,就会生成一个新的圆形。以下是我的思路和代码:
for(int i=0;i<amountRBC;i++)
{
xPosRBC[i]=random.nextInt(xSize);
yPosRBC[i]=random.nextInt(ySize);
}
在这里,我为每个红细胞生成一个随机的x和y位置(在xSize乘以ySize的画布内),共有amountRBC个红细胞(仅作演示,假设为5)。这些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倍半径,这意味着它们不应相交。
然而,程序似乎无限期地陷入了这个while循环中,我找不出原因。
[注意]:屏幕上只有少量半径较小的圆。 这意味着不能填充圆时的情况不可能是问题所在。
非常感谢任何帮助!
n
个圆形中的m
个圆形的消息即可。 - M. Prokhorov