放置随机圆圈而不重叠(并且不使用强力)?

Tom*_*Tom 17 java

我刚刚提交了一个Java作业,我需要在屏幕上随机绘制一些圆圈作为游戏的一部分.给我们的挑战之一是确保没有任何圆圈重叠.我最终采用了一种奇怪的方法(因为我想:D)基本上只是使用trig从屏幕中心创建了一个模式,这很有趣.虽然这种方法中的圆圈从不重叠,但它并不理想......圆圈的分布在屏幕中间相当紧凑,角落中使用的空间非常小.

我还创建了一个(注释掉的)蛮力方法,如果拟议的圆的x,y坐标与已经创建的圆相交,则简单地重新滚动新坐标,虽然理论上能够循环到无限,但最有可能不会超过十个交叉点.

在与朋友讨论解决方案后(以及谷歌搜索引擎优化)后,我们真的非常有兴趣看看如何在没有蛮力的情况下完成这项工作.要求:

  • 在640x480窗口上绘制20个半径为十个单位的圆
  • 绝对没有圆圈重叠
  • 否则在屏幕上随机分布

可能,使用标准库?

Pet*_*ego 10

  1. 列出640x480条目并将连续数字从1到307.200(640x480)放入其中.每个条目代表屏幕上的一个像素.
  2. 随机选择1到307.200之间的数字,表示屏幕上的像素.在那里画圆圈.
  3. 计算落在此圆圈的10像素半径范围内的所有像素.从列表中删除表示这些像素的所有条目.

重复十次.

  • 我建议将"在10像素半径范围内"改为"落在20像素半径范围内".(另外,我首先要生成区域(10 ... 630)x(10 ... 470)中的所有点. (3认同)
  • 我可能措辞错误;我的意思是复制的数组大小,而不是副本数。是的,二十份(每个圈一份)并不多。 (2认同)
  • 这种方法将导致重叠的圆,假设发现一个圆的中心点不在另一个圆中,但它们的中心之间的距离小于半径(在这种情况下为 10),即使您的条件有效,它们仍然会重叠。由于我在尝试使用您的解决方案时在 [repository](https://github.com/gawdsnitkkr/Techspardha-2017) 遇到了一些类似的问题。 (2认同)