如何随机放置2D小行星,使它们不相互重叠?

时间:2012-03-30 19:30:59

标签: c# java vector 2d

生成彼此不重叠的2D小行星(自上而下)有什么好方法?如果您能提供类似于C#或JAVA的任何语言的代码,我将非常感激。

3 个答案:

答案 0 :(得分:7)

我相信你所寻找的是2D Collision Detection。这是关于它的good article和工作示例代码。

编辑:根据您所描述的内容,如果您将每个小行星表示为Rectangle,那么您只需检查交叉点:

  1. 生成一个表示为矩形的小行星。
  2. 检查现有小行星列表,看看它是否为Intersects
  3. 如果相交,请转到1,否则将其添加到列表中。
  4. 显然这并不完美,因为可能会有角落重叠,但这会产生你想要的相当快的方式(取决于你想要放置多少小行星< / em>的)。

    编辑2:如果您只想要检查矩形重叠的代码,可以找到它here

答案 1 :(得分:0)

取决于您需要和想要制定解决方案的复杂程度。如果你想放置大量的物体,那么如果没有空间(原谅双关语)留给另一颗小行星,那么每次迭代和命中测试都会让你进入一个无限循环。

另一种方法是存储小行星可以容纳的所有可能位置的数据结构。这就像一个位置列表,将作为完整列表开始。例如,如果您有一个简单的3 x 3网格,则开始列表将包含9个位置。然后,您从列表中选择一个随机项并使用它,然后将其删除,以及现在已被该新小行星无效的任何其他位置。这样你可以告诉你什么时候没有空间。

也许是矫枉过正,但我​​认为这是一个有趣的问题 - 祝你好运!

答案 2 :(得分:-1)

简单的解决方案:

for i = 1 to 10
{
   X = rand();
   Y = rand();
   drawCircle(X,Y, radius);
}

复杂的解决方案:
你必须给我们更多的继续。