Я сейчас пытаюсь создать простой движок 2-й физики и сталкиваюсь с некоторыми проблемами, выясняя, как включить импульс в движение космического корабля.
Если я двигаюсь в заданном направлении с определенной скоростью, я могу в настоящее время легко обновить положение своего корабля (Положение + = Направление * Скорость). Однако, если корабль вообще вращается, и я пересчитываю направление (на основании нового угла, на который направлен корабль) и ускоряюсь в этом направлении, как я могу учесть импульс, чтобы изменить «линию», по которой движется корабль? В настоящее время корабль мгновенно меняет направление и продолжает двигаться со своей текущей скоростью в этом новом направлении, когда я нажимаю кнопку тяги. Я хочу, чтобы это было более плавное вращение, чтобы создать впечатление, что сам корабль имеет некоторую массу.
Если на эту тему уже есть хороший пост, я прошу прощения, но в моих поисках ничего не появилось. Дайте мне знать, если потребуется дополнительная информация, но я надеюсь, что кто-то может легко сказать мне, как я могу добавить массовую скорость в свое обновление игрового цикла.
Ответы:
Похоже, у вас есть Положение и Направление как векторы и Скорость как скаляр?
Если это так, просто измените Velocity на вектор, а затем сделайте что-то вроде этого:
Направление - это вектор длины единицы, определяющий направление движения вашего корабля. Сила - это сила тяги, которую вы хотите добавить (ноль, когда ускорение не требуется). ElapsedTime - это время между вашими играми. Обновление звонков для обеспечения плавного движения даже при изменении частоты кадров.
Если вы хотите узнать больше об этом, вы можете посмотреть Euler Integration
источник
Вместо непосредственного управления скоростью , добавьте еще одну переменную: ускорение , которое постепенно плавно изменяет скорость :
Из классической физики ( законы движения Ньютона ):
где:
(Примечание m - единственное скалярное значение; F, a, v и p - все 2D или 3D векторы)
Кроме того, на самом деле есть два направления:
Я ответил на соответствующий вопрос на StackOverflow: 2D Spaceship движения математике . В этом ответе есть пример кода.
источник