QVM: Quaternions, Vectors, Matrices
Quaternions, Vectors, Matrices
Из коробки Boost QVM определяет общий, но простойquat,vecиmatтипов. Например, следующий фрагмент создает объект кватерниона, который вращается вокруг оси X:
#include <boost/qvm/quat.hpp>
#include <boost/qvm/quat_operations.hpp>
....
quat<float> rx=rotx_quat(3.14159f);
Аналогично, матрица, которая переводится данным вектором, может быть создана следующим образом:
#include <boost/qvm/mat.hpp>
#include <boost/qvm/vec.hpp>
#include <boost/qvm/map_vec_mat.hpp>
....
vec<float,3> v={0,0,7};
mat<float,4,4> tr=translation_mat(v);
Обычные операции кватерниона, вектора и матрицы работают на этих типах Boost QVM, однакооперации отделены от любых конкретных типов: Они работают на любом подходящем типе, который был зарегистрирован по специализацииquat_traits,vec_traitsиmat_traitsшаблонов.
Например, определяемый пользователем 3D векторный типfloat3может быть введен в Boost QVM следующим образом:
После аналогичной специализации шаблонаmat_traitsдля определяемого пользователем типа матрицы 3x3float33полный спектр векторных и матричных операций, определяемых заголовками Boost QVM, становится доступным автоматически:
float3 v;
X(v) = 0;
Y(v) = 0;
Z(v) = 7;
float vmag = mag(v);
float33 m = rotx_mat<3>(3.14159f);
float3 vrot = m * v;
Определенные пользователем типы кватернионов также вводятся в Boost QVM, специализируясь на шаблонеquat_traits.