我对我正在进行的咨询项目的最后一刻要求非常紧张。
基本上这就是我想要实现的目标:
我有一个绘制一系列随机大小圆圈的表面视图。每个圆的半径可以为50-100。
随机生成x,y值以及随机半径
每个圆都被创建为表示该圆(x,y坐标和半径)的对象,并将其添加到列表中。
一旦创建完毕,就会被绘制出来。
问题是我想确保这些圈子都不重叠。
我有点挣扎。这似乎不应该那么困难,但不幸的是,这对我来说。
到目前为止,这是我的代码(我知道它并不紧密......善待):
x = 100 + (int) (Math.random() * (mCanvasWidth - 200));
y = 100 + (int) (Math.random() * (mCanvasHeight - 200));
radius = 50 + (int) (Math.random() * 99);
color[0] = (float) (Math.random() * 360);
color[1] = 1;
color[2] = 1;
String radVal = String.valueOf(radius);
circle circ = new circle(x, y, radius, Color.HSVToColor(128, color), radVal);
boolean addit = true;
for (dot d : Dots) {
int leftSide = d.get_x() - radius;
int rightSide = d.get_x() + radius;
int xBoundary = x + radius;
int yBoundary = y + radius;
int exist_xLeft = d.get_x() - d.get_radius();
int exist_xRight = d.get_x() + d.get_radius();
int exist_yTop = d.get_y() - d.get_radius();
int exist_yBottom = d.get_y() + d.get_radius();
if ((xBoundary > exist_xLeft) && (xBoundary < exist_xRight))
{
if (yBoundary > (exist_yTop) && (yBoundary < exist_yBottom)) {
addit = false;
break;
}
}
}
if (addit)
circles.add(mdot);
if (circles.size() >= 5)
running = false;
然后它迭代圆圈列表并将它们绘制到画布上。
有关我在碰撞检测中失败的建议吗?
答案 0 :(得分:0)
您可以检测2个圆圈是否像这样发生碰撞:
假设:
中心点cx1,cy1&amp; cx2,cy2
并给出半径r1&amp; r2,
然后您可以确定2个圆圈是否发生碰撞:
areColliding=((cx2-cx1)*(cx2-cx1)+(cy2-cy1)*(cy2-cy1))<((r1+r2)*(r1+r2));