Kreiskollision

Pikkolini

Mitglied
Also ich möchte ein kleines Spiel programmieren in dem man einen Kreis bewegt und einen anderen Kreis, welcher sich von selbst bewegt "fangen" muss. Soweit läuft alles, nur komm ich nicht weiter, wie man Java klar machen soll, dass ich den anderen Ball berührt habe. Wenn man ein imaginäres Viereck drüberlegt würde das ja etwas seltsam aussehen, da die Kreise sich dann in manchen Fällen die Kreise schon berühren würden, obwohl rein grafisch das nicht der Fall ist.
Hat irgendjemand einen Ansatz, wie man dieses Problem lösen könnte?
 

Pikkolini

Mitglied
Die kollidieren wenn der Abstand der Mittelpunkte kleiner als zwei mal der radius ist ?! :bahnhof:

Danke, das hätte ich selber draufkommen können :oops:

Nun habe ich versucht das Problem zu lösen, indem ich den X und den Y-Abstand der beiden Mittelpunkte zusammenrechne und wenn die Summe zusammen kleiner als die beiden Radien ist, kommt eine Meldung. Wenn der Ball exakt von der Seite kommt ist das kein Problem. Problematisch wird es aber wenn er von diagonal kommt, dann kann es wie auf dem Bild im Anhang aussehen ohne das eine Meldung kommt. Hier der Codeausschnitt:
Java:
summe1 = Test.getX_pos1() - Test.getX_pos2();
if (summe1 < 0) {
       summe1 = Test.getX_pos2() - Test.getX_pos1();
}
summe2 = Test.getY_pos1() - Test.getY_pos2();
if (summe2 < 0) {
       summe2 = Test.getY_pos2() - Test.getY_pos1();
}
summe = summe1 + summe2;
if (summe <= Test.getRadius1() + Test.getRadius2()) {
        System.out.println("HIT");
}

Gibt es irgendeine bessere Methode um das Problem zu lösen?
 

javimka

Top Contributor
Es gab da mal diesen Typen namens Pythagoras...

Java:
int dx = kreis1.getX()-kreis2.getX();
int dy = kreis1.getY()-kreis2.getY();
int r = kreis1.getRadius()+kreis2.getRadius();
if ( dx*dx + dy*dy < r*r ) {
  // Kontakt
}
 

Neue Themen


Oben