Кватернионы C + OpenGL
Кватернион-это число вида:
a + bi + cj + dk
Верно? Хорошо, но ... ..
-
Как интерпретировать это число на языке Си?
-
Если, например, я хочу повернуть куб, что умножить на кватернион? Вектор?
2 ответа:
Что касается вашего первого вопроса, я думаю, что вы имеете в виду "как я представляю", а не "интерпретирую".
Самый простой способ-использовать
struct
:Обратите внимание, что обычная практика, как описано выше, также заключается в использовании x, y, z и w для имен компонентов (но ваше именование вполне приемлемо, если вы знаете, какой из них какой). Использование двойных или одиночных поплавков точности для компонентов зависит от ваших потребностей: точность или пространство.typedef struct quaternion_t { double x,y,z,w; } quaternion_t;
Простые операции тогда легко выполнить. реализация:
void conjugate(quaternion_t *q){ q->x = -q->x; q->y = -q->y; q->z = -q->z; } double product(quaternion_t *q1, quaternion_t *q2){ return q1->x * q2->x + q1->y * q2->y + q1->z * q2->z + q1->w * q2->w; } double norm(quaternion_t *q){ double p = product(q,q); return sqrt(p); } // etc
Что касается вашего второго вопроса, я предлагаю вам поискать хороший учебник по этой теме. Между тем, страницы Википедии:
Обеспечьте хорошее введение.
Независимо от того, кодируете ли вы это в C или C++, математика будет точно такой же.
Смотрите здесь некоторые подробности:
Библиотеки кватернионов в C / C++ http://en.wikipedia.org/wiki/Quaternion http://irrlicht.sourceforge.net/docu/classirr_1_1core_1_1quaternion.html https://irrlicht.svn.sourceforge.net/svnroot/irrlicht/trunk/include/quaternion.h