2017-11-09 9 views
0

Ich habe ein Programm, in dem ich Bälle kreiere, die herumspringen. Wenn zwei Bälle kollidieren, sollten sich beide in zwei kleinere Bälle teilen, die sich in verschiedene Richtungen bewegen. DieseJava. Bälle teilen sich nach einer Kollision und bewegen sich in verschiedene Richtungen.

ist, wie ich Kollision Griff

public boolean intersects (Ball b) { 
     double distance = Math.sqrt(Math.pow((this.x - b.x), 2) + Math.pow((this.y - b.y), 2)); 
     if (this.size/2 + b.size/2 >= distance && !(this.equals(b))) { 
      return true; 
     } else return false; 

Ich suche nach einer Idee, die entscheiden wird dazu beitragen, in denen kleinere Kugeln zu platzieren, so dass sie nicht sofort wieder kollidieren. Ich habe verschiedene Manöver ausprobiert, aber sie enden alle zu nahe beieinander, und alle fangen an, ein Hüpfen zu spalten und es wird ein Chaos. Hier

ist die Klasse-Ball

public Ball(double x, double y, double size, double dx, double dy) { 
    this.x = x; 
    this.y = y; 
    this.size = size; 
    this.dx = dx; 
    this.dy = dy; 

Um die Kugeln zu bewegen ich die folgende

b.x = b.x + b.dx; 
b.y = b.y + b.dy; 

Für den Moment, wenn die Kugeln kollidieren, ich habe zwei Ball-Objekte. Ich kenne die Koordinaten ihrer Zentren: x, y, Geschwindigkeit dx, mit dem sie entlang der x-Achse und die Geschwindigkeit bewegen dy entlang der y-Achse

ich den Code auslassen, die die Sicht behandelt, weil ich im Grunde eine Notwendigkeit Lösung, wie man dx, dy, x und y für 4 Bälle ändert, damit alle von ihnen sich weg bewegen und nicht sofort zusammenstoßen.

Ich brauche keine Code-Lösung, sondern eine allgemeine Idee.

Antwort

0

Ich denke, Sie könnten zwei Probleme haben. Der erste ist, dass Ihre vier "neuen" Kugeln alle am oder nahe dem Kollisionspunkt beginnen und Ihr Kollisionsdetektor könnte sie sofort als kollidierend wahrnehmen. Um dies zu lösen, könnten Sie die "neuen" Kugeln so markieren, dass sie für einen oder zwei Impulse Ihres Kollisionsdetektors nicht miteinander kollidieren können. Ich müsste den Code sehen, um eine bessere Lösung zu finden.

Zweitens möchten Sie wahrscheinlich den Ergebnisvektor der vier "neuen" Kugeln zufällig randomisieren. Setzen Sie einfach dx und dy für jeden zufällig und das sollte gut genug sein.

+0

Ihr zweiter Vorschlag gibt mir tatsächlich eine Idee. Wenn ich den Punkt (Koordinaten) der Kreuzung bekomme, könnte ich 4 Kugeln um diesen Punkt legen und ihre dx und dy darauf basierend setzen. weil ich jetzt dx entsprechend der vorherigen Richtung des aktuellen Balls ändere, aber es berücksichtigt nicht die Position des anderen. – Diana

Verwandte Themen