# Ballkollision AirHockey



## Schnellsch (16. Jun 2010)

Hallo Java Freunde,

mein Problem ist, dass ich mich bei den Ballkollisionen nicht auskenne. Ich möchte ein AirHockey programmieren und weis nicht wie man die Ball auf Ball Kollision mit mehreren Grad realisiert. Würde mich über Antworten freuen, danke.

mfG Schnellsch


----------



## agentone (16. Jun 2010)

> mit mehreren Grad


???



> Ball auf Ball Kollision



Ich gehe davon aus, dass das ein 2D-Spiel ist. Folglich kennst du die (x,y)-Koordinaten und die Radien der Bälle (bzw. Kreise). Wenn du jetzt überprüfen willst, ob diese sich überschneiden, berechnest du folgendes:

abstand=wurzel( (ax-bx)² + (ay-by)² )
wenn (abstand<ar+br) dann "kollision" sonst "keine kollision"

ax, ay, ar sind x- und y-Koordinaten und Radius des einen Balls
bx, by, br sind x- und y-Koordinaten und Radius des anderen Balls


----------



## Geeeee (16. Jun 2010)

agentone hat gesagt.:


> ???


I glaub er meint die Abprallwinkel.

```
.
   .    <--
    .     <--
     .     <---> (das kann ich noch :D)
    .
   .
.
```


----------



## Schnellsch (16. Jun 2010)

Wie schaut es mit dem Abprallwinkel aus? Wie berechne ich diesen?


----------



## agentone (16. Jun 2010)

abprallwinkel - Google-Suche
Kollision 2 Kreise


----------



## Schnellsch (17. Jun 2010)

hab schon vergeblich danach gesucht, finde einfach nichts, kann mir wer helfen? Das Problem nochmal: will 2 Kreis von einander abprallen lassen(mit 360 verschiedenen Winkeln)


----------



## Illuvatar (17. Jun 2010)

So, weil ich grad Lust drauf hab... das würdest du aber bestimmt auch bei Google finden:

Die Orte der Bälle beschreibst du mit 2 Vektoren r1 und r2, ihre Geschwindigkeiten mit v1 und v2.
Die Geschwindigkeiten musst du an der Gerade, die genau zwischen den Bällen durchgeht, spiegeln. Das geht so:
- Sei 
	

	
	
		
		

		
			





 und v die Geschwindigkeit, die du spiegeln willst.
- Sei 
	

	
	
		
		

		
		
	


	




 (senkrecht auf x, auch normiert)
- Dann ist die gespiegelte Geschwindigkeit: 
	

	
	
		
		

		
		
	


	




 (viel expliziter gehts jetzt nicht mehr)

- Und dann müsstest du theoretisch die gespiegelten Geschwindigkeiten zur Impuls- und Energieerhaltung noch neu skalieren, wenn du das willst.

Disclaimer: Das ist alles aus dem Kopf und ungetestet 

Edit: Sorry dass ich sowohl die Vektoren als auch die Koordinaten x und y genannt hab - im Nachhinein vllt etwas doof  Die Sachen im Index sind aber immer die Koordinaten


----------

