Алгоритм синхронизации — различия между версиями
Korvin (обсуждение | вклад) м (Новая: Бла бла... мысли вслух * В произвольных ортогональных криволинейных координатах в трехмерном простра...) |
Korvin (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | + | Здесь будет рассмотрена математическая составляющая алгоритмов синхронизации физики. Понимающих в этом деле, просьба прокомментировать. | |
− | + | == Построение сплайна == | |
− | <math> | + | |
− | : <math> | + | Для синхронизации была выбрана форма кубических сплайнов, при которой за основу берутся значения функции и ее производной в двух точках. |
− | < | + | |
+ | Свойства сплайна: | ||
+ | :<math>s(t_i) = f(t_i) = , \quad s'(t_i) = f'(t_i)\!</math> | ||
+ | |||
+ | Уравнение сплайна: | ||
+ | :<math>s(t) = a + bt + ct^2 + dt^3\!</math> | ||
+ | |||
+ | |||
+ | Для нахождения коэффициентов <math>a, b, c, d</math> записываем систему уравнений: | ||
+ | :<math>\begin{cases} | ||
+ | a + bt_0 + ct_0^2 + dt_0^3 = f(t_0) \\ | ||
+ | a + bt_1 + ct_1^2 + dt_1^3 = f(t_1) \\ | ||
+ | b + 2ct_0 + 3dt_0^2 = f'(t_0) \\ | ||
+ | b + 2ct_1 + 3dt_1^2 = f'(t_1) | ||
+ | \end{cases} | ||
+ | </math> | ||
+ | |||
+ | |||
+ | Подставляем известные значения в правой части системы (даны по условию): | ||
+ | :<math>\begin{cases} | ||
+ | a + bt_0 + ct_0^2 + dt_0^3 = x_0 \\ | ||
+ | a + bt_1 + ct_1^2 + dt_1^3 = x_1 \\ | ||
+ | b + 2ct_0 + 3dt_0^2 = v_0 \\ | ||
+ | b + 2ct_1 + 3dt_1^2 = v_1 | ||
+ | \end{cases} | ||
+ | </math> | ||
+ | |||
+ | |||
+ | Поскольку сплайн не зависит от конкретных значений <math>t_0</math> и <math>t_1</math> положим <math>t_0 = 0</math>, а <math>t_1 = t</math>. В результате, пара уравнений становится тривиальной: | ||
+ | :<math>\begin{cases} | ||
+ | a = x_0 \\ | ||
+ | a + bt_1 + ct_1^2 + dt_1^3 = x_1 \\ | ||
+ | b = v_0 \\ | ||
+ | b + 2ct_1 + 3dt_1^2 = v_1 | ||
+ | \end{cases} | ||
+ | </math> | ||
+ | |||
+ | |||
+ | Заменяем в оставшихся уравнениях известные теперь коэффициенты и получаем конечную систему: | ||
+ | :<math>\begin{cases} | ||
+ | x_0 + v_0t_1 + ct_1^2 + dt_1^3 = x_1 \\ | ||
+ | v_0 + 2ct_1 + 3dt_1^2 = v_1 | ||
+ | \end{cases} | ||
+ | </math> | ||
+ | |||
+ | |||
+ | После нехитрых манипуляций, получаем выражения для оставшихся коэффициентов: | ||
+ | :<math>\begin{cases} | ||
+ | c = \frac{3x_1 - 3x_0 - 2v_0t - v_1t}{t^2} \\ | ||
+ | d = \frac{v_1t - 2x_1 + 2x_0 + v_ot}{t^3} | ||
+ | \end{cases} | ||
+ | </math> |
Версия 15:55, 22 октября 2008
Здесь будет рассмотрена математическая составляющая алгоритмов синхронизации физики. Понимающих в этом деле, просьба прокомментировать.
Построение сплайна
Для синхронизации была выбрана форма кубических сплайнов, при которой за основу берутся значения функции и ее производной в двух точках.
Свойства сплайна:
- <math>s(t_i) = f(t_i) = , \quad s'(t_i) = f'(t_i)\!</math>
Уравнение сплайна:
- <math>s(t) = a + bt + ct^2 + dt^3\!</math>
Для нахождения коэффициентов <math>a, b, c, d</math> записываем систему уравнений:
- <math>\begin{cases}
a + bt_0 + ct_0^2 + dt_0^3 = f(t_0) \\ a + bt_1 + ct_1^2 + dt_1^3 = f(t_1) \\ b + 2ct_0 + 3dt_0^2 = f'(t_0) \\ b + 2ct_1 + 3dt_1^2 = f'(t_1) \end{cases} </math>
Подставляем известные значения в правой части системы (даны по условию):
- <math>\begin{cases}
a + bt_0 + ct_0^2 + dt_0^3 = x_0 \\ a + bt_1 + ct_1^2 + dt_1^3 = x_1 \\ b + 2ct_0 + 3dt_0^2 = v_0 \\ b + 2ct_1 + 3dt_1^2 = v_1 \end{cases} </math>
Поскольку сплайн не зависит от конкретных значений <math>t_0</math> и <math>t_1</math> положим <math>t_0 = 0</math>, а <math>t_1 = t</math>. В результате, пара уравнений становится тривиальной:
- <math>\begin{cases}
a = x_0 \\ a + bt_1 + ct_1^2 + dt_1^3 = x_1 \\ b = v_0 \\ b + 2ct_1 + 3dt_1^2 = v_1 \end{cases} </math>
Заменяем в оставшихся уравнениях известные теперь коэффициенты и получаем конечную систему:
- <math>\begin{cases}
x_0 + v_0t_1 + ct_1^2 + dt_1^3 = x_1 \\ v_0 + 2ct_1 + 3dt_1^2 = v_1 \end{cases} </math>
После нехитрых манипуляций, получаем выражения для оставшихся коэффициентов:
- <math>\begin{cases}
c = \frac{3x_1 - 3x_0 - 2v_0t - v_1t}{t^2} \\ d = \frac{v_1t - 2x_1 + 2x_0 + v_ot}{t^3} \end{cases} </math>