# QVM: Quaternions, Vectors, Matrices

### set_rot(mat)

#include <boost/qvm/mat_operations.hpp>

    namespace qvm
    {
        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols &&
        //  is_vec<B>::value && vec_traits<B>::dim==3
        template <class A>
        void set_rot( A & a, B const & axis, typename vec_traits<B>::scalar_type angle );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_xzy( A & a, Angle x1, Angle z2, Angle y3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_xyz( A & a, Angle x1, Angle y2, Angle z3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_yxz( A & a, Angle y1, Angle x2, Angle z3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_yzx( A & a, Angle y1, Angle z2, Angle x3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_zyx( A & a, Angle z1, Angle y2, Angle x3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_zxy( A & a, Angle z1, Angle x2, Angle y3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_xzx( A & a, Angle x1, Angle z2, Angle x3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_xyx( A & a, Angle x1, Angle y2, Angle x3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_yxy( A & a, Angle y1, Angle x2, Angle y3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_yzy( A & a, Angle y1, Angle z2, Angle y3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_zyz( A & a, Angle z1, Angle y2, Angle z3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_zxz( A & a, Angle z1, Angle x2, Angle z3 );

        //Only enabled if:
        //  is_mat<A>::value && mat_traits<A>::rows>=3 &&
        //  mat_traits<A>::rows==mat_traits<A>::cols
        template <class A,class Angle>
        void set_rot_xzy( A & a, Angle x1, Angle z2, Angle y3 );
    }

#### Effects:

Assigns the return value of the corresponding rot_mat function to a.

See also: boost/qvm/mat_operations.hpp