YaChudo

Slerp

Переглядів: 0. Оновлено 10.10.2026.

В комп'ютерній графіці, SLERP (spherical linear interpolation) — лінійна інтерполяція на сфері, що використовується для анімації обертання з постійною кутовою швидкістю за допомогою кватерніонів.

Геометрична інтерпретація

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

Якщо p0 та p1 початок і кінець дуги, а t параметр, 0 ≤ t ≤ 1.

Обчислимо Ω — кут дуги, отримаємо cos Ω = p0 ∙ p1, n-вимірний скалярний добуток одиничних векторів. Отримаємо формулу

S l e r p ( p 0 , p 1 , t ) = sin ⁡ ( 1 − t ) Ω sin ⁡ Ω p 0 + sin ⁡ t Ω sin ⁡ Ω p 1 . {\displaystyle \mathrm {Slerp} (p_{0},\,p_{1},\,t)={\frac {\sin {(1-t)\Omega }}{\sin \Omega }}p_{0}+{\frac {\sin t\Omega }{\sin \Omega }}p_{1}.}

Вона симетрична відносно кінців дуги Slerp(p0,p1,t) = Slerp(p1,p0,1−t).

Якщо Ω {\displaystyle \Omega }  — дуже маленький кут, настільки, що можуть виникнути помилки при діленні на sin ⁡ Ω {\displaystyle \sin \Omega } , тому можна використовувати звичайну лінійну інтерполяцію (оскільки при маленьких значеннях Ω :   sin ⁡ ( Ω ) ≈ Ω ,   sin ⁡ ( t ∗ Ω ) ≈ t ∗ Ω {\displaystyle \Omega \colon \ \sin(\Omega )\approx \Omega ,\ \sin(t*\Omega )\approx t*\Omega } , і так далі).

Запис за допомогою кватерніонів

Записавши одиничний кватерніон у вигляді q = cos Ω + v sin Ω, де v тривимірний одиничний вектор, отримаємо q t = cos tΩ + v sin tΩ.

записавши q = q1q−1
0
, отримаємо

  S l e r p ( q 0 , q 1 ; t ) {\displaystyle \ \mathrm {Slerp} (q_{0},q_{1};t)} = q 0 1 − t q 1 t {\displaystyle =q_{0}^{1-t}q_{1}^{t}}
= q 0 ( q 0 − 1 q 1 ) t {\displaystyle =q_{0}(q_{0}^{-1}q_{1})^{t}}
= q 1 ( q 1 − 1 q 0 ) 1 − t {\displaystyle =q_{1}(q_{1}^{-1}q_{0})^{1-t}}
= ( q 0 q 1 − 1 ) 1 − t q 1 {\displaystyle =(q_{0}q_{1}^{-1})^{1-t}q_{1}}
= ( q 1 q 0 − 1 ) t q 0 {\displaystyle =(q_{1}q_{0}^{-1})^{t}q_{0}}

Використовується лінійна залежність між кутом повороту і степенем кватерніона.

Посилання

Джерело: стаття у Вікіпедії та історія редагувань (автори).