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

时间:2011-05-14 14:20:50

标签: java

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

我还创建了一个(注释掉的)蛮力方法,如果建议的圆的x,y坐标与已经创建的圆相交,它只是重新滚动新坐标,这在理论上能够循环到无限,很可能不会超过10交叉点。

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

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

可能,使用标准库吗?

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:2)

制作覆盖整个屏幕的网格;把网格放在一个集合中。每个网格部分应为十个单位(圆圈的大小)。

  1. for-loop 1-20。
  2. 随机从集合中绘制一个网格图块。
  3. 在该网格图块中放置一个圆圈;圆的中心是网格图块的中心。
  4. 从集合中删除该网格图块。
  5. 下一个for-loop。
  6. 您现在有20个随机放置的圆圈,不能重叠。

    现在,其他空间分区系统在这里有用以及如何使用?

答案 2 :(得分:2)

  1. 定义包含有效坐标的集合。
  2. 从该集合中查找随机元素。
  3. 从集合中排除不再有效的所有坐标。
  4. 转到2.

答案 3 :(得分:2)

这是我一直在寻找的东西。我在基本相同,但在HTML5中。幸运的是,我只需要在800px×400px画布上布置100个半径为20px的圆圈。使用蛮力方法最多可以工作120个圈子。

这是my solution

我想尝试使用阵列的Peter优雅方法。我不知道该怎么做,但是一旦我拥有它,我会在这里发布。