DNA Calib 1.1
Project brief
Classes | Functions
tdm::projective Namespace Reference

Classes

struct  axis_angle
 

Functions

template<typename T >
mat4< T > rotate (const vec3< T > &axis, T radians, handedness h=handedness::right)
 
template<typename T >
mat4< T > rotate (const mat4< T > &m, const vec3< T > &axis, T radians, handedness h=handedness::right)
 
template<typename T >
mat4< T > rotate (T xRadians, T yRadians, T zRadians, handedness h=handedness::right)
 
template<typename T >
mat4< T > rotate (const mat4< T > &m, T xRadians, T yRadians, T zRadians, handedness h=handedness::right)
 
template<typename T >
mat4< T > rotate (const vec3< T > &radians, handedness h=handedness::right)
 
template<typename T >
mat4< T > rotate (const mat4< T > &m, const vec3< T > &radians, handedness h=handedness::right)
 
template<dim_t L, typename T >
mat< L+1, L+1, T > scale (const vec< L, T > &factors)
 
template<dim_t L, typename T >
mat< L+1, L+1, T > scale (const mat< L+1, L+1, T > &m, const vec< L, T > &factors)
 
template<dim_t L, typename T >
mat< L+1, L+1, T > scale (T factor)
 
template<dim_t L, typename T >
mat< L, L, T > scale (const mat< L, L, T > &m, T factor)
 
template<dim_t L, typename T >
mat< L+1, L+1, T > translate (const vec< L, T > &position)
 
template<dim_t L, typename T >
mat< L+1, L+1, T > translate (const mat< L+1, L+1, T > &m, const vec< L, T > &position)
 
template<typename T >
axis_angle< T > xyz2AxisAngle (T xRadians, T yRadians, T zRadians, handedness h=handedness::right)
 
template<typename T >
axis_angle< T > xyz2AxisAngle (const vec3< T > &radians, handedness h=handedness::right)
 

Function Documentation

◆ rotate() [1/6]

template<typename T >
mat4< T > tdm::projective::rotate ( const mat4< T > &  m,
const vec3< T > &  axis,
radians,
handedness  h = handedness::right 
)
inline
77 {
78 return m * rotate(axis, radians, h);
79}
mat4< T > rotate(const mat4< T > &m, const vec3< T > &radians, handedness h=handedness::right)
Definition: Transforms.h:118
std::enable_if< std::is_floating_point< T >::value, T >::type radians(T degrees)
Definition: Transforms.h:21

◆ rotate() [2/6]

template<typename T >
mat4< T > tdm::projective::rotate ( const mat4< T > &  m,
const vec3< T > &  radians,
handedness  h = handedness::right 
)
inline
118 {
119 return m * rotate(radians[0], radians[1], radians[2], h);
120}

◆ rotate() [3/6]

template<typename T >
mat4< T > tdm::projective::rotate ( const mat4< T > &  m,
xRadians,
yRadians,
zRadians,
handedness  h = handedness::right 
)
inline
108 {
109 return m * rotate(xRadians, yRadians, zRadians, h);
110}

◆ rotate() [4/6]

template<typename T >
mat4< T > tdm::projective::rotate ( const vec3< T > &  axis,
radians,
handedness  h = handedness::right 
)
inline
53 {
54 const T c = std::cos(radians);
55 const T s = std::sin(radians) * static_cast<T>(h);
56 const T one_minus_c = static_cast<T>(1) - c;
57 const vec3<T> n = normalize(axis);
58 return mat4<T>{n[0] * n[0] * one_minus_c + c,
59 n[1] * n[0] * one_minus_c - n[2] * s,
60 n[2] * n[0] * one_minus_c + n[1] * s,
61 static_cast<T>(0),
62 n[0] * n[1] * one_minus_c + n[2] * s,
63 n[1] * n[1] * one_minus_c + c,
64 n[2] * n[1] * one_minus_c - n[0] * s,
65 static_cast<T>(0),
66 n[0] * n[2] * one_minus_c - n[1] * s,
67 n[1] * n[2] * one_minus_c + n[0] * s,
68 n[2] * n[2] * one_minus_c + c,
69 static_cast<T>(0),
70 static_cast<T>(0),
71 static_cast<T>(0),
72 static_cast<T>(0),
73 static_cast<T>(1)};
74}
std::enable_if< std::is_floating_point< T >::value, vec< L, T > >::type normalize(vec< L, T > v)
Definition: Computations.h:51
Definition: Mat.h:17
Definition: Vec.h:10

◆ rotate() [5/6]

template<typename T >
mat4< T > tdm::projective::rotate ( const vec3< T > &  radians,
handedness  h = handedness::right 
)
inline
113 {
114 return rotate(radians[0], radians[1], radians[2], h);
115}

◆ rotate() [6/6]

template<typename T >
mat4< T > tdm::projective::rotate ( xRadians,
yRadians,
zRadians,
handedness  h = handedness::right 
)
inline
82 {
83 const T sx = std::sin(xRadians) * static_cast<T>(h);
84 const T sy = std::sin(yRadians) * static_cast<T>(h);
85 const T sz = std::sin(zRadians) * static_cast<T>(h);
86 const T cx = std::cos(xRadians);
87 const T cy = std::cos(yRadians);
88 const T cz = std::cos(zRadians);
89 auto rx = mat4<T>::identity();
90 rx(1, 1) = cx;
91 rx(1, 2) = sx;
92 rx(2, 1) = -sx;
93 rx(2, 2) = cx;
94 auto ry = mat4<T>::identity();
95 ry(0, 0) = cy;
96 ry(0, 2) = -sy;
97 ry(2, 0) = sy;
98 ry(2, 2) = cy;
99 auto rz = mat4<T>::identity();
100 rz(0, 0) = cz;
101 rz(0, 1) = sz;
102 rz(1, 0) = -sz;
103 rz(1, 1) = cz;
104 return rx * ry * rz;
105}

◆ scale() [1/4]

template<dim_t L, typename T >
mat< L+1, L+1, T > tdm::projective::scale ( const mat< L+1, L+1, T > &  m,
const vec< L, T > &  factors 
)
inline
132 {
133 return m * scale(factors);
134}
mat< L, L, T > scale(const mat< L, L, T > &m, T factor)
Definition: Transforms.h:142

◆ scale() [2/4]

template<dim_t L, typename T >
mat< L, L, T > tdm::projective::scale ( const mat< L, L, T > &  m,
factor 
)
inline
142 {
143 return scale(m, vec<L - 1, T>{factor});
144}

◆ scale() [3/4]

template<dim_t L, typename T >
mat< L+1, L+1, T > tdm::projective::scale ( const vec< L, T > &  factors)
inline
123 {
124 vec<L + 1, T> diagonal{static_cast<T>(1)};
125 factors.apply([&diagonal](const T& value, dim_t i) {
126 diagonal[i] = value;
127 });
128 return mat<L + 1, L + 1, T>::diagonal(diagonal);
129}
std::size_t dim_t
Definition: Types.h:22
vec & apply(F func)
Definition: Vec.h:68

◆ scale() [4/4]

template<dim_t L, typename T >
mat< L+1, L+1, T > tdm::projective::scale ( factor)
inline
137 {
138 return scale(vec<L, T>{factor});
139}

◆ translate() [1/2]

template<dim_t L, typename T >
mat< L+1, L+1, T > tdm::projective::translate ( const mat< L+1, L+1, T > &  m,
const vec< L, T > &  position 
)
inline
156 {
157 return m * translate(position);
158}
mat< L+1, L+1, T > translate(const mat< L+1, L+1, T > &m, const vec< L, T > &position)
Definition: Transforms.h:156

◆ translate() [2/2]

template<dim_t L, typename T >
mat< L+1, L+1, T > tdm::projective::translate ( const vec< L, T > &  position)
inline
147 {
149 position.apply([&m](const T& value, dim_t i) {
150 m(L, i) = value;
151 });
152 return m;
153}

◆ xyz2AxisAngle() [1/2]

template<typename T >
axis_angle< T > tdm::projective::xyz2AxisAngle ( const vec3< T > &  radians,
handedness  h = handedness::right 
)
178 {
179 return xyz2AxisAngle(radians[0], radians[1], radians[2], h);
180}
axis_angle< T > xyz2AxisAngle(const vec3< T > &radians, handedness h=handedness::right)
Definition: Transforms.h:178

◆ xyz2AxisAngle() [2/2]

template<typename T >
axis_angle< T > tdm::projective::xyz2AxisAngle ( xRadians,
yRadians,
zRadians,
handedness  h = handedness::right 
)
167 {
168 const mat4<T> m = rotate(xRadians, yRadians, zRadians, h);
169 const T radians = std::acos((trace(m.template submat<3, 3>(0, 0)) - static_cast<T>(1)) / static_cast<T>(2));
170 const T factor = static_cast<T>(1) / (static_cast<T>(2) * std::sin(radians));
171 const T x = factor * (m(2, 1) - m(1, 2));
172 const T y = factor * (m(0, 2) - m(2, 0));
173 const T z = factor * (m(1, 0) - m(0, 1));
174 return {{x, y, z}, radians};
175}
T trace(const mat< N, N, T > &m)
Definition: Computations.h:151