31 value{{numbers<value_type>::one(), numbers<value_type>::zero(), numbers<value_type>::zero()},
32 {numbers<value_type>::zero(), numbers<value_type>::one(), numbers<value_type>::zero()},
33 {numbers<value_type>::zero(), numbers<value_type>::zero(), numbers<value_type>::one()}} {}
35 constexpr explicit t_mat3(value_type v) :
36 value{{v, numbers<value_type>::zero(), numbers<value_type>::zero()},
37 {numbers<value_type>::zero(), v, numbers<value_type>::zero()},
38 {numbers<value_type>::zero(), numbers<value_type>::zero(), v}} {}
40 constexpr t_mat3(value_type v0, value_type v1, value_type v2,
41 value_type v3, value_type v4, value_type v5,
42 value_type v6, value_type v7, value_type v8) :
49 constexpr explicit t_mat3(value_type v[9]) :
50 value{{v[0], v[1], v[2]},
52 {v[6], v[7], v[8]}} {}
54 constexpr t_mat3(
const column_type& c0,
55 const column_type& c1,
56 const column_type& c2) :
62 explicit t_mat3(
const t_mat3<R>& rhs)
69 constexpr std::size_t size()
const {
return 9; }
70 constexpr std::size_t columns()
const {
return 3; }
71 constexpr std::size_t rows()
const {
return 3; }
73 column_type& operator[](std::size_t c) {
return value[c]; }
74 const column_type& operator[](std::size_t c)
const {
return value[c]; }
76 value_type& operator()(std::size_t c, std::size_t r) {
return value[c][r]; }
77 value_type operator()(std::size_t c, std::size_t r)
const {
return value[c][r]; }
80 t_mat3& operator=(
const t_mat3<R>& rhs)
88 void set(value_type v0, value_type v1, value_type v2,
89 value_type v3, value_type v4, value_type v5,
90 value_type v6, value_type v7, value_type v8)
92 value[0].set(v0, v1, v2);
93 value[1].set(v3, v4, v5);
94 value[2].set(v6, v7, v8);
98 void set(
const t_mat3<R>& rhs)
105 T* data() {
return value[0].data(); }
106 const T* data()
const {
return value[0].data(); }
152 return t_mat3<T>(dot(lhs, rhs, 0, 0), dot(lhs, rhs, 0, 1), dot(lhs, rhs, 0, 2),
153 dot(lhs, rhs, 1, 0), dot(lhs, rhs, 1, 1), dot(lhs, rhs, 1, 2),
154 dot(lhs, rhs, 2, 0), dot(lhs, rhs, 2, 1), dot(lhs, rhs, 2, 2));