多圈圆碰撞算法

时间:2016-04-29 04:54:52

标签: algorithm matlab collision-detection

我对如何检测这里的碰撞有一点了解我们只使用数据向量而没有类(我知道类已经实现但我不允许使用它们)。

那么,我怎么做呢?互联网上有一些例子,但他们只看两个圈子。我有一个用户定义的圆圈(球)。那么我需要确定哪些距离最近,如果是,如何?我对如何从此开始感到困惑。

到目前为止,我可以在屏幕上的随机位置创建一定数量的圆圈,并使它们朝同一方向移动(这很好)。所有球的半径相同,速度相同。

以下是代码的主要部分:

N_balls = input('Enter the amount of balls: ');
radius = input('Enter radius for all balls: ');

for i = 1:N_balls

   x_init(i) = randi([27, 550]);
   y_init(i) = randi([27, 400]);

end

for i = 1:N_balls

    ball(i) = drawBall(x_init(i), y_init(i), radius, 'r');

end

% Initialize a loop control variable
exit_loop = false;

x = [];
y = [];

velocity_x = 1;
velocity_y = 1;

distance = [];

% While is not commanded to exit the loop
while exit_loop == false

for i = 1:N_balls

    [x(i), y(i)] = getCenter(ball(i));

    xMove(ball(i), velocity_x);
    yMove(ball(i), velocity_y);

    redraw;
end

for i = 2:N_balls

    distance(i-1) = sqrt( ((x(i-1) - x(i)) * (x(i-1) - x(i))) + (        (y(i-1) - y(i)) * (y(i-1) - y(i)) ) );

end

[dist, ball_num] = min(distance);
end

这是一团糟,但是,我在这里迷路了......

1 个答案:

答案 0 :(得分:0)

如果您需要确定最近的一对:well-known problem of computational geometry

如果您需要查找距离低于某个限制的所有对,那么您需要一些空间分区数据结构,例如kd-tree