Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

quaternions, vectors, matrices

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

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 следующим образом:

#include <boost/qvm/vec_traits.hpp>
struct float3 { float a[3]; };
namespace boost
{
    namespace qvm
    {
        template <>
        struct vec_traits<float3>
        {
            static int const dim=3;
            typedef float scalar_type;
            template <int I> static inline scalar_type & write_element( float3 & v ) { return v.a[I]; }
            template <int I> static inline scalar_type read_element( float3 const & v ) { return v.a[I]; }
            static inline scalar_type & write_element_idx( int i, float3 & v ) { return v.a[i]; } //optional
            static inline scalar_type read_element_idx( int i, float3 const & v ) { return v.a[i]; } //optional
        };
    }
}

После аналогичной специализации шаблона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.


Учебная навигация:Кватернионы, векторы, матрицы|C Массивы|Виды||Совместимость 
 
См. также:Повышение QVM

Статья quaternions, vectors, matrices раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:32:31/0.0062170028686523/0