Для закончивших ВУЗ данный вопрос не представляет проблемы, а для нас, учащихся ПТУ и техникумов, это тайна за семью замками. Особенно если вы, как и я, постоянно прогуливали высшую математику.
Цитата из википедии: Кватернио́ны (от лат. quaterni, по четыре) — система гиперкомплексных чисел, предложенная Гамильтоном в 1843 году.. Вы что-нибудь поняли? Значит дальше вам читать не надо, до свидания! Заходите еще..
Кватернион — это ось, относительно которой будем вращать объект и угол, на который мы будем вращать объект относительно этой оси. Всего у кватерниона четыре компоненты: X, Y, Z и W. XYZ — нормированная ось поворота, умноженная на синус половины угла, W — косинус половины угла поворота.
Псевдокод получения кватерниона из угла a (в радианах) и оси (x, y, z):
def quatFromAngleAxis(a, x, y, z):
# Длина вектора xyz
l = sqrt(x * x + y * y + z * z)
# Если длина вектора близка к нулю, возвращаем единичный кватернион
if l <= 1e-06:
return (0, 0, 0, 1)
# Нормализуем вектор xyz
x = x / l
y = y / l
z = z / l
# Синус половины угла (a - угол в радианах)
hSin = sin(a / 2)
# Заполняем xyz
qx = x * hSin
qy = y * hSin
qz = z * hSin
# Косинус половины угла
hCos = cos(a / 2)
# Заполняем w
qw = hCos
# Возвращаем наш кватернион
return (qx, qy, qz, qw)
Важно помнить, что кватернион не задает результат, через него выражается действие, которое можно применить к какому-либо объекту в пространстве.
Ещё более простым языком: представьте, что у вас есть некий объект, допустим яблоко, вы протыкаете его спицей и вращаете. Так вот спица — это ось вращения, её направление — наш вектор (x, y, z)
, а угол вращения — это наш угол a
, который означает насколько вы повернули яблоко на спице по часовой стрелке или против.
Если вас приводит в недоумение термин «матрица», рекомендую почитать заметку: Что такое матрица 4×4 в трехмерных играх?
Почему в коде 3 строка x^x и т д, когда либо x^2 либо x*x???
Спасибо, исправил. Умножение конечно же.
угол поворота который задается через косинус половины какого угла
Косинуса угла поворота.
спасибо, добрый человек) Хоть кто-то снизошел до уровня простых смертных.
Пожалуйста, я и сам-то не небожитель и не всегда понимаю то, о чём пишу или говорю :-)
Это единственное адекватное объяснение в интернете и заслуживает быть на википедии самой первой строчкой. Всякие термины и формулы это уже потом.
Спасибо на добром слове.