2D физика: сохранение предыдущей позиции в сравнении со скоростью сохранения

9

Я видел множество двумерных обучающих программ и книг, в которых предыдущее положение объекта сохранялось в состоянии вместо вектора скорости. Затем скорость вычисляется для каждого кадра как разность между позициями.

Каковы преимущества этого метода?

Terzalo
источник
2
Не могли бы вы дать ссылку на эти учебные пособия, для контекста?
Анко
Я разделяю такое же любопытство Анко
dnk drone.vs.drones
В этом руководстве упоминается, что это называется интеграцией Verlet. Я нашел эту статью , в которой объясняются преимущества Верле. В принципе, легче обрабатывать коллизии и сложные ограничения.
Терзало
@Terzalo Смотрите обновленную версию моего ответа, чтобы понять, помогает ли он понять общую логику конкретного случая под рукой
MAnd

Ответы:

1

Не зная точно учебных пособий или книг, которые вы прочитали, вот что я могу вам сказать.

Чтобы быть более точным с точки зрения определения физики: направление вектора вычисляется как разница между текущей позицией и последней позицией. Скорость вектора равна той, которая делится на время, прошедшее при переходе из одного положения в другое. Смотрите: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

Однако, когда истекшее время считается общим «1 кадром», т.е. от последнего кадра до текущего, тогда скорость вектора и направление вектора становятся одинаковыми. В псевдокоде:

direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time

Таким образом, в общем, основная причина сохранения позиции в последнем кадре и получения позиции в текущем кадре заключается в том, что это может быть единственным или самым дешевым способом узнать обновленное направление (и, следовательно, обновленную скорость), т.е. направление движения в текущем кадре.

Предположим, что вы сохраняете направление (или даже скорость) в данном кадре. В следующем кадре единственный способ узнать, изменилось ли направление (или даже скорость), если вы вычислили его снова. Причина в том, что предыдущее направление или предыдущая скорость не позволяют узнать текущее направление или текущую скорость в случае, если движение изменилось с одного кадра на другой.

Теперь, принимая во внимание учебники, которые вы упомянули в комментарии к своему собственному вопросу, это становится еще понятнее. В одном из учебных пособий авторы говорят, что:

Теперь давайте научим нашу частицу двигаться с интеграцией Verlet. Это просто причудливый способ сказать, что мы собираемся выяснить, как быстро движется наша частица, сравнивая ее положение в этом кадре с ее положением в последнем кадре. Почему? Потому что это дает нам неявную скорость - любое изменение текущей позиции частицы будет автоматически обновлять ее скорость

Итак, как вы можете видеть, сохранение позиции последнего кадра позволяет, как я уже говорил выше, обновлять расчет скорости в текущем кадре, когда объект (в учебнике это частица) меняет положение. Если вы сохранили только направление или скорость в последнем кадре, вы не сможете обновить его так же легко, если позиция изменилась с прошлого на текущий кадр. Поэтому, как указано в другом уроке, на который вы ссылаетесь, сохранение предыдущей позиции позволяет автоматически обновлять скорость при изменении позиций.

MAND
источник