Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Kollission von Bällen


Xion - So 17.02.08 09:31
Titel: Kollission von Bällen
Hi.

Also mal vereinfacht:
Ich habe 2 Bälle, diese bewegen sich in einem leeren Raum. Jetzt will ich herausfinden, wann sie sich treffen (wenn überhaupt). Das ist eigentlich schon alles, danach komm ich dann schon weiter.

Gegeben:

Quelltext
1:
2:
3:
4:
v1: Geschwindigkeit von BallA (normiert)
Pos1: Position von BallA
r1: Radius von BallA
v1Betrag: Länge von v1


Ball2 analog.

So jetzt setze ich folgendermaßen an:


Quelltext
1:
2:
g=Pos1+a*v1*v1Betrag
h=Pos2+b*v2*v2Betrag


da sich die beiden Bälle nach der gleichen Zeit treffen sollen ist a=b


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
gh=(Pos2+a*v2*v2Betrag)-(Pos1+a*v1*v1Betrag)  //Differenzvektor der "allgemeinen Geradenpunkte"
gh=(Pos2-Pos1)+a(v2*v2Betrag-v1*v1Betrag)

|gh|=r1+r2  //Der Differenzvektor muss so lang sein wie beide Radien

|a(v2*v2Betrag-v1*v1Betrag)|=r1+r2
sqrt(a(v2.X*v2Betrag-v1.X*v1Betrag)*a(v2.X*v2Betrag-v1.X*v1Betrag)+Y²+Z²)=r1+r2

a*sqrt((v2.X*v2Betrag-v1.X*v1Betrag)²+Y²+Z²)=r1+r2
a=(r1+r2)/sqrt((v2.X*v2Betrag-v1.X*v1Betrag)²+Y²+Z²)


so, Problem gelöst sollte man meinen. Allerdings ist das Ergebniss völliger Unsinn und außerdem gibt es ja sehr viele Punkte, in denen die Geraden genau diesen Abstand voneinander haben.

Wo ist da nur der Fehler? Scheint fast so, als sei mein Ansatz schon falsch.


delfiphan - So 17.02.08 10:25

Woher kommt Y und Z im Resultat?


Xion - So 17.02.08 10:27

also, der Betrag eines Vektors = sqrt(v.x²+v.y²+v.z²) (Pythagoras)
somit steht Y für (v2.Y*v2Betrag-v1.Y*v1Betrag). (Z analog) Wollte das nur aus übersichtlichkeit nicht noch reinschreiben ;)

Also Y und Z sind immer analog zu dem X-Term davor


Kha - So 17.02.08 12:24

Zitat:

Quelltext
1:
|a(v2*v2Betrag-v1*v1Betrag)|=r1+r2                    

Sollte das nicht

Quelltext
1:
| Pos2-Pos1+a(v2*v2Betrag-v1*v1Betrag) | = r1+r2                    

heißen? Außerdem musst du a² als |a| aus der Wurzel herausziehen.


Xion - So 17.02.08 12:34

user profile iconKhabarakh hat folgendes geschrieben:
Zitat:

Quelltext
1:
|a(v2*v2Betrag-v1*v1Betrag)|=r1+r2                    

Sollte das nicht

Quelltext
1:
| Pos2-Pos1+a(v2*v2Betrag-v1*v1Betrag) | = r1+r2                    

heißen?

hmm, ich dachte nein...bin mir da aber unsicher.