15#include <vsg/maths/vec2.h>
31 value{{numbers<value_type>::one(), numbers<value_type>::zero()},
32 {numbers<value_type>::zero(), numbers<value_type>::one()}} {}
34 constexpr explicit t_mat2(value_type v) :
35 value{{v, numbers<value_type>::zero()},
36 {numbers<value_type>::zero(), v}} {}
38 constexpr t_mat2(value_type v0, value_type v1,
39 value_type v2, value_type v3) :
45 constexpr explicit t_mat2(value_type v[4]) :
49 constexpr t_mat2(
const column_type& c0,
50 const column_type& c1) :
56 explicit t_mat2(
const t_mat2<R>& rhs)
62 constexpr std::size_t size()
const {
return 4; }
63 constexpr std::size_t columns()
const {
return 2; }
64 constexpr std::size_t rows()
const {
return 2; }
66 column_type& operator[](std::size_t c) {
return value[c]; }
67 const column_type& operator[](std::size_t c)
const {
return value[c]; }
69 value_type& operator()(std::size_t c, std::size_t r) {
return value[c][r]; }
70 value_type operator()(std::size_t c, std::size_t r)
const {
return value[c][r]; }
73 t_mat2& operator=(
const t_mat2<R>& rhs)
80 void set(value_type v0, value_type v1,
81 value_type v2, value_type v3)
88 void set(
const t_mat2<R>& rhs)
94 T* data() {
return value[0].data(); }
95 const T* data()
const {
return value[0].data(); }
101 VSG_type_name(vsg::mat2);
102 VSG_type_name(vsg::dmat2);
107 return lhs.value[0] == rhs.value[0] &&
108 lhs.value[1] == rhs.value[1];
112 bool operator!=(
const t_mat2<T>& lhs,
const t_mat2<T>& rhs)
114 return lhs.value[0] != rhs.value[0] ||
115 lhs.value[1] != rhs.value[1];
121 if (lhs.value[0] < rhs.value[0])
return true;
122 if (rhs.value[0] < lhs.value[0])
return false;
123 return lhs.value[1] < rhs.value[1];
129 return lhs[0][r] * rhs[c][0] +
130 lhs[1][r] * rhs[c][1];
136 return t_mat2<T>(dot(lhs, rhs, 0, 0), dot(lhs, rhs, 0, 1),
137 dot(lhs, rhs, 1, 0), dot(lhs, rhs, 1, 1));
143 return t_vec2<T>((lhs[0][0] * rhs[0] + lhs[1][0] * rhs[1]),
144 (lhs[0][1] * rhs[0] + lhs[1][1] * rhs[1]));
150 return t_vec2<T>(lhs[0] * rhs[0][0] + lhs[1] * rhs[0][1],
151 lhs[0] * rhs[1][0] + lhs[1] * rhs[1][1]);
t_mat2 template class that represents a 3x3 matrix.
Definition mat2.h:23
t_vec2 template class that represents a 2D vector
Definition vec2.h:39