2016-04-29 10 views
0

Ich habe ein bisschen ein Stumpf auf, wie man Kollisionen von hier erkennen wir verwenden nur Vektoren von Daten und keine Klassen (Ich weiß Klassen wurden implementiert, aber ich darf nicht verwenden Sie).Algorithmus für mehrere Kreis-Kreis-Kollisionen

Also, wie mache ich das überhaupt? Es gibt einige Beispiele im Internet, aber sie betrachten nur zwei Kreise. Ich habe eine benutzerdefinierte Anzahl von Kreisen (Kugeln). Also muss ich bestimmen, welche die nächste Entfernung sind, und wenn ja wie? Ich bin so verwirrt darüber, wie ich damit anfangen soll.

Bis jetzt kann ich eine bestimmte Anzahl von Kreisen in zufälliger Position auf dem Bildschirm erstellen und sie in die gleiche Richtung bewegen (das ist in Ordnung). Alle Bälle haben den gleichen Radius und die gleiche Geschwindigkeit.

Hier ist der größte Teil des Codes:

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 

Es ist ein Chaos ist, aber ja, ich bin hier verloren ...

Antwort