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