Hallo liebe Community!
Ich beschäftige mich derzeit mit Stößen zwischen 2 Billiardkugeln, und möchte dies implementieren als Test. Nun habe ich einen Code Aussschnitt gefunden, welcher die neuen Richtungsvektoren beider Kugeln berechnet, jedoch komme ich einfach nicht dahinter wie man auf diese Formel kommt. Vllt. hat jemmand von euch Erfahrungen damit.
//Abstandsvektor berechnen
//Der Abstandsvektor (dx,dy) ist der Vektor vom Mittelpunkt der Kugel 1
//zum Mittelpunkt der Kugel 2
Vector3 range = physic1.Position - physic2.Position;
// Länge von Range aber ohne Wurzel!
double rangeLength = range.Length() * range.Length();
//Skalarprodukt aus Richtungsvektor Kugel 1 und Abstandsvektor berechnen
double v1d = physic1.Speed.X * range.X + physic1.Speed.Y * range.Y + physic1.Speed.Z * range.Z;
//Skalarprodukt aus Richtungsvektor Kugel 2 und Abstandsvektor berechnen
double v2d = physic2.Speed.X * range.X + physic2.Speed.Y * range.Y + physic2.Speed.Z * range.Z;
//Für beide Kugeln nach der Formel die neue Richtung berechnen
physic1.Speed = new Vector3((float)(physic1.Speed.X - range.X * (v1d - v2d) / rangeLength),
(float)(physic1.Speed.Y - range.Y * (v1d - v2d) / rangeLength),
(float)(physic1.Speed.Z - range.Z * (v1d - v2d) / rangeLength));
physic2.Speed = new Vector3((float)(physic2.Speed.X - range.X * (v2d - v1d) / rangeLength),
(float)(physic2.Speed.Y - range.Y * (v2d - v1d) / rangeLength),
(float)(physic2.Speed.Z - range.Z * (v2d - v1d) / rangeLength));
Vielen Dank
MFG Wolf
Wer zuerst kommt malt zuerst, wer danach kommt malt drüber! 😁
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Perfekt! Ich danke dir für deine Hilfe!
MFG Wolf
Wer zuerst kommt malt zuerst, wer danach kommt malt drüber! 😁