Java:随机生成不相交的圆(卡在 while 循环中)

标签 java

我想在 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/

相关文章:

java - Android Studio 导入似乎不起作用

派生泛型的java删除

java - 关于如何创建 java web 服务并部署到 mac web 服务器的简单教程?

java - 如何让 SimpleComboBox 显示我的默认值

java - 在 Web 应用程序中部署模块

java - 如何为 React Native 启用 multidex?

java - 在 Java 中将 List<> 内容过滤到字典中

java - 如何重新设计 java 应用程序以在新线程中提供另一个变量副本?

java - servlet如何工作?实例化, session ,共享变量和多线程

java - 我可以在 Junit 测试中检测到泄漏的线程吗?