# Kreiskollision



## Pikkolini (10. Jan 2010)

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?


----------



## Marco13 (10. Jan 2010)

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


----------



## Milo (11. Jan 2010)

Marco13 hat gesagt.:


> wenn der Abstand der Mittelpunkte kleiner als zwei mal der radius ist ?! :bahnhof:


Streng genommen ist dann bereits mind. einer der beide Kreise... - deformiert ;-)


----------



## Pikkolini (11. Jan 2010)

Marco13 hat gesagt.:


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



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

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:

```
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 (11. Jan 2010)

Es gab da mal diesen Typen namens Pythagoras...


```
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
}
```


----------



## Pikkolini (11. Jan 2010)

javimka hat gesagt.:


> Es gab da mal diesen Typen namens Pythagoras...



 ist auch wieder logisch. Ich glaub ich hab irgendiwe die falsche denkensweise 

Naja hat jetzt aber geklappt danke


----------

