Я хочу написать понг на C # и XNA с трением и отскоком. Я попытался реализовать столкновение как , описанное Гарет Рис в предыдущем вопросе .
Вот основной алгоритм, который я использую для понга:
- Разделите сталкивающиеся объекты, чтобы они больше не сталкивались.
- Получить нормаль поверхности для реакции на столкновение.
- Рассчитайте новую скорость - вот моя проблема.
Вот код, который я сейчас использую для ответа на столкновение:
Vector2 normalizedVelocity = Velocity;
normalizedVelocity.Normalize();
Vector2 u = -Velocity * Vector2.Dot(normalizedVelocity, normal);
Vector2 w = Velocity - u;
Velocity = w - u;
Для целей тестирования я предполагаю отсутствие трения и идеальную эластичность. Этот фрагмент кода отлично работает для объекта, движущегося только в одном направлении, например ::
Velocity.X = 100;
Velocity.Y = 0;
или
Velocity.X = 0;
Velocity.Y = 100;
Но когда я тестирую с помощью движущегося по диагонали шара, например ::1010*
Velocity.X = 100;
Velocity.Y = 40;
Результирующая скорость не та, которую я предполагаю.