Java 放置无重叠的随机圆(且不使用蛮力)?
我刚刚提交了一份Java作业,其中我需要在屏幕上随机画一些圆圈,作为游戏的一部分。我们面临的一个挑战是确保所有圆圈都不重叠。我最终采用了一种奇怪的方法(因为我想:D),它基本上只是使用trig从屏幕中心创建了一个模式,这很有趣。虽然这种方法中的圆从不重叠,但并不理想。。。圆圈的分布在屏幕的中间是相当密集的,在角落中使用的空间非常小 我还创建了一个(被注释掉的)蛮力方法,如果一个提议的圆的x,y坐标与一个已经创建的圆相交,只需重新滚动新的坐标,虽然理论上可以循环到无穷大,但最有可能不会超过十个交点 在与一位朋友讨论了解决方案之后(在谷歌上搜索了很多次之后),我们实际上非常有兴趣看看如何在没有暴力的情况下做到这一点。要求:Java 放置无重叠的随机圆(且不使用蛮力)?,java,Java,我刚刚提交了一份Java作业,其中我需要在屏幕上随机画一些圆圈,作为游戏的一部分。我们面临的一个挑战是确保所有圆圈都不重叠。我最终采用了一种奇怪的方法(因为我想:D),它基本上只是使用trig从屏幕中心创建了一个模式,这很有趣。虽然这种方法中的圆从不重叠,但并不理想。。。圆圈的分布在屏幕的中间是相当密集的,在角落中使用的空间非常小 我还创建了一个(被注释掉的)蛮力方法,如果一个提议的圆的x,y坐标与一个已经创建的圆相交,只需重新滚动新的坐标,虽然理论上可以循环到无穷大,但最有可能不会超过十个交点
- 在640x480窗口上绘制20个半径为10个单位的圆
- 绝对没有重叠的圆圈
- 否则随机分布在屏幕上
如果可能,使用标准库?制作一个覆盖整个屏幕的网格;将网格放在一组中。每个网格部分应为10个单位(圆的大小)
重复十次。这是我一直在寻找的东西。我做的基本上是一样的,但是是HTML5。幸运的是,我只需要在800px×400px的画布上布局100个半径为20px的圆。使用蛮力方法最多可以工作120圈 这是
我想尝试一下Peter使用数组的优雅方法。我还不知道怎么做,但一旦我有了它,我会在这里发布。你必须是一名顾问。此解决方案符合要求,但并非目的:)我也同意此解决方案,但要求每个圆只能根据网格部分在离散位置绘制。此答案不符合第3项要求。我刚刚发布了一个简单的解决方案,它确实符合要求。每个位置都是随机的——你的“像素”只是更大而已。不过,我明白你的意思-本课程的目的可能是教授空间分区技术@戴夫:不,我只是喜欢简化。我认为,更准确的说法是,他们的要求没有达到他们的目的。+1是的……似乎是一个很好的解决方案。我也想过。唯一的问题是列表的大小。该解决方案可能无法用于增加窗口维度。我还没有对此进行测试,但307190~阵列拷贝听起来很昂贵。然而,成为整数可能会使它足够快,甚至更快;我指的是复制的数组的大小,而不是复制的数量。是的,20份拷贝(每个圆一份)并不多。我建议将“落在10像素半径内”改为“落在20像素半径内”。(另外,我将首先生成区域(10…630)x(10…470)中的所有点。此方法将生成重叠圆,假设发现一个圆的圆心不在另一个圆中,但其圆心之间的距离小于半径(本例中为10)即使你的条件有效,它们仍然会重叠。因为我在尝试使用你的解决方案时遇到了类似的问题。