QVM: Quaternions, Vectors, Matrices
Views
Boost QVM определяет различные шаблоны функций, которые обеспечивают статическое отображение между (возможно, определяемым пользователем) типами кватерниона, вектора и матрицы. Приведенный ниже пример умножает столбец 1 (повышенные индексы QVM всегда основаны на нуле) матрицымна скаляр:
void multiply_column1( float33 & m, float scalar )
{
col<1>(m) *= scalar;
}
Выражениеcol<1>(m)является значением l неопределенного 3D-вектора, который относится к столбцу 1 изм.. Обратите внимание, однако, что это не создает никаких временных объектов; вместо этогооператор *=выше работает непосредственно со ссылкой нам.
Вот еще один пример, умножающий транспонированный вид матрицы на вектор некоторого определяемого пользователем типаfloat3:
float3 v = {0,0,7};
float3 vrot = transposed(rotx_mat<3>(3.14159f)) * v;
В общем, различные функции представления возвращают ссылки неопределенных, некопируемых типов, которые относятся к исходному объекту. Они могут быть назначены или преобразованы в любой совместимый вектор или тип матрицы.
Подробнее см.Просмотр прокси.