Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
inline Quaternion conjugate(Quaternion::Arg q)
{
return scale(q, Vector4(-1, -1, -1, 1));
}
inline Quaternion inverse(Quaternion::Arg q)
{
return conjugate(normalize(q));
}
inline Quaternion normalize(Quaternion::Arg q, float epsilon = NV_EPSILON)
{
float l = length(q);
nvDebugCheck(!isZero(l, epsilon));
Quaternion n = scale(q, 1.0f / l);
nvDebugCheck(isNormalized(n));
return n;
}
Вы приводили функцию, создающую кватернион поворота — длина этого кватерниона всегда равна 1. Обратный кватернион для него можно найти без нормализации.
Спасибо за статью. Неожиданно для себя, возможно я не прав, заметил особенность: поворот вектора кватернионом дает поворот по часовой стрелке, в то время как для комплексных чисел поворот при умножении на мнимую единицу происходит против часовой стрелки. Раньше как то не обращал внимания. Правильно ли я увидел?
Заметки о вращении вектора кватернионом