生成彼此不重叠的2D小行星(自上而下)有什么好方法?如果您能提供类似于C#或JAVA的任何语言的代码,我将非常感激。
答案 0 :(得分:7)
我相信你所寻找的是2D Collision Detection
。这是关于它的good article和工作示例代码。
编辑:根据您所描述的内容,如果您将每个小行星表示为Rectangle,那么您只需检查交叉点:
显然这并不完美,因为可能会有角落重叠,但这会产生你想要的相当快的方式(取决于你想要放置多少小行星< / em>的)。
编辑2:如果您只想要检查矩形重叠的代码,可以找到它here。
答案 1 :(得分:0)
取决于您需要和想要制定解决方案的复杂程度。如果你想放置大量的物体,那么如果没有空间(原谅双关语)留给另一颗小行星,那么每次迭代和命中测试都会让你进入一个无限循环。
另一种方法是存储小行星可以容纳的所有可能位置的数据结构。这就像一个位置列表,将作为完整列表开始。例如,如果您有一个简单的3 x 3网格,则开始列表将包含9个位置。然后,您从列表中选择一个随机项并使用它,然后将其删除,以及现在已被该新小行星无效的任何其他位置。这样你可以告诉你什么时候没有空间。
也许是矫枉过正,但我认为这是一个有趣的问题 - 祝你好运!
答案 2 :(得分:-1)
简单的解决方案:
for i = 1 to 10
{
X = rand();
Y = rand();
drawCircle(X,Y, radius);
}
复杂的解决方案:
你必须给我们更多的继续。