2D Фізика: зберігання попередньої позиції проти збереження швидкості


9

Я побачив декілька ігрових навчальних посібників та 2d ігор, де попереднє положення об’єкта зберігалось у стані замість вектора швидкості. Потім швидкість обчислюється кожним кадром як різниця позицій.

Які переваги цього методу?


2
Чи можете ви зв’язатись із відповідними навчальними посібниками для контексту?
Анко


У цьому підручнику зазначається, що це називається інтеграцією Верле. Я знайшов цю статтю , в якій пояснюються переваги Верле. В основному, легше впоратися зіткненнями та складними обмеженнями.
Терзало

@Terzalo Дивіться оновлену версію моєї відповіді, щоб побачити, чи допомагає вона зрозуміти загальну логіку, що лежить в конкретному випадку
MAD

Відповіді:


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

Отже, загалом, основна причина зберігання позиції в останньому кадрі та отримання позиції в поточному кадрі полягає в тому, що це може бути або єдиним способом, або найдешевшим способом пізнання оновленого напрямку (а отже, оновленої швидкості), тобто напрямок руху в поточному кадрі.

Припустимо, ви зберігаєте напрямок (або навіть швидкість) у заданому кадрі. У наступному кадрі єдиний спосіб дізнатись, чи змінився напрямок (або навіть швидкість) - якщо ви обчислили його ще раз. Причина полягає в тому, що попередній напрямок або попередня швидкість не дають вам знати поточний напрямок або швидкість струму у випадку, якщо рух змінюється від одного кадру до іншого.

Тепер, беручи до уваги підручники, які ви згадали у коментарі до власного питання, це стає ще зрозумілішим. В одному з навчальних посібників автори розповідають, що:

Тепер давайте навчимо нашу частинку, як рухатися з інтеграцією Верле. Це просто фантазійний спосіб сказати, що ми дізнаємось, наскільки швидко рухається наша частинка, порівнявши її позицію цього кадру з його останньою рамкою. Чому? Оскільки це дає нам неявну швидкість - будь-яка зміна поточного положення частинки автоматично оновить її швидкість

Отже, як ви бачите, зберігання позиції останнього кадру дозволяє, як я вже говорив вище, оновлений обчислення швидкості в поточному кадрі, коли об'єкт (у підручнику це частинка) змінює положення. Якщо ви зберегли лише напрямок або швидкість в останньому кадрі, ви не змогли б так легко оновити його у випадку, якщо позиція змінилася з минулого на поточний кадр. Тому, як також зазначалося в іншому підручнику, до якого ви пов’язані, збереження попередньої позиції дозволяє автоматично оновлювати швидкість при зміні позицій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.