Все это называется сферической линейной интерполяцией (spherical linear interpolation, если скоращенно, slerp) и определяется следующим образом:
slerp(q1,q2,t) = (q1*sin((1-t)*a) + q2*sin(t*a)) / sin(a),
где t - локальное время (см.п.7.6), a - угол между векторами q1, q2;
0
cos(a) = (q1,q2)/(|q1|*|q2|) = (q1,q2).
То есть q1, q2 здесь уже рассматриваем как 4D-вектора. Приведенную формулу нетрудно вывести (для лучшего понимания): нам нужна такая точка q, которая лежит на единичной сфере, лежит в одной плоскости с q1 и q2 и центром (то есть нулем), причем угол между векторами q и q1 меняется линейно и, таким образом, равен t*a. Раз точка лежит в одной плоскости с 0, q1, q2, то вектор q равен линейной комбинации векторов q1, q2:
q = k1*q1 + k2*q2,
где k1, k2 - какие-то (пока неизвестные) коэффициенты. q лежит на сфере, значит, длина q равна 1, отсюда имеем:
|q| = (q,q) = 1,
(k1*q1+k2*q2, k1*q1+k2*q2) = 1,
k1*k1*(q1,q1) + k2*k2*(q2,q2) + 2*k1*k2*(q1,q2) = 1,
k1*k1 + k2*k2 + 2*k1*k2*(q1,q2) = 1.
Угол между q и q1 равен t*a, отсюда:
cos(q,q1) = cos(t*a),
(q,q1) = cos(t*a),
k1*(q1,q1) + k2*(q1,q2) = cos(t*a),
k1 + k2*(q1,q2) = cos(t*a).
Получили систему уравнений для k1, k2:
k1 + k2*(q1,q2) = cos(t*a),
k1*k1 + k2*k2 + 2*k1*k2*(q1,q2) = 1,
или
k1 + k2*cos(a) = cos(t*a),
k1*k1 + k2*k2 + 2*k1*k2*cos(a) = 1.
Отсюда k1 = (cos(t*a) - k2*cos(a)), и получаем квадратное уравнение:
cos(t*a)^2 - 2*k2*cos(a)*cos(t*a) + k2^2*cos(a)^2 + k2^2 +
2*k2*cos(a)*cos(t*a) - 2*k2^2*cos(a)^2 = 1,
cos(t*a)^2 + k2^2*(1 - cos(a)^2) = 1,
k2^2 * sin(a)^2 = sin(t*a)^2,
k2 = sin(t*a) / sin(a),
k1 = cos(t*a) - sin(t*a)*cos(a) / sin(a) =
= (cos(t*a)*sin(a) - sin(t*a)*cos(a)) / sin(a) =
= sin(a - t*a) / sin(a) = sin((1 - t)*a) / sin(a).
Если a - очень маленький угол, настолько, что могут возникнуть ошибки при делении на sin(a), можно использовать обычную линейную интерполяцию (так как при маленьких значениях a sin(a) ~= a, sin(t*a) ~= t*a, и так далее).
Итак, мы умеем задавать повороты кватернионами, мы умеем их интерполировать линейно по множеству их возможных значений, то есть, поверхности сферы.