Пусть позиция сейчас (то есть 0 кадров назад) будет (x0, y0, z0)
Пусть позиция n
кадров назад будет (xn, yn, zn)
.
Пусть позиция 2n
кадров назад будет (xm, ym, zm)
.
Тогда изменение положения между кадрами 2n
и n
равно (xn-xm, yn-ym, zn-zm)
.
Вы можете думать об этом как о средней скорости в течение этих n
кадров.
А изменение положения между n
и теперь равно (x0-xn, y0-yn, z0-zn)
.
Это представляет среднюю скорость в течение следующих n
кадров.
Теперь у вас есть скорость для n
кадровкоторый закончился n
кадров назад, и у вас есть скорость для n
кадров, которые только что закончились.
изменение скорости в течение последних n
кадров должно бытьРазница между этими двумя векторами.Для каждой координаты:
Ax = (x0-xn) - (xn-xm) = x0 -2xn + xm
Ay = (y0-yn) - (yn-ym) = y0 -2yn + ym
Az = (z0-xn) - (zn-zm) = z0 -2zn + zm
Величина ускорения составляет |A| = sqrt( (Ax)^2 + (Ay)^2 + (Az)^2 )
Если выОтносясь только к «большим» изменениям и предпочитая скорость перед точностью, вы можете уйти с A' = (Ax)^2 + (Ay)^2 + (Az)^2
или даже A" = abs(Ax) + abs(Ay) + abs(Az)
Идея состоит в том, что вы хотите, чтобы каждый компонент вносил свой вклад вцелое, независимо от того, является ли оно положительным или отрицательным, поэтому вы «заставляете» его быть положительным, возводя его в квадрат или принимая его абсолютное значение.
Надеюсь, это поможет!