37 constexpr Qua() =
default;
41 w{s},
x{v.
x()},
y{v.
y()},
z{v.
z()}
46 w{w_},
x{x_},
y{y_},
z{z_}
52 w{static_cast<
T>(q.
w)},
53 x{static_cast<
T>(q.
x)},
54 y{static_cast<
T>(q.
y)},
55 z{static_cast<
T>(q.
z)}
67 T real_part = norm_u_norm_v +
dot(u, v);
70 if(real_part <
static_cast<T>(1.e-6f) * norm_u_norm_v) {
74 real_part =
static_cast<T>(0);
92 this->
w = c.
x() * c.
y() * c.
z() + s.
x() * s.
y() * s.
z();
93 this->
x = s.
x() * c.
y() * c.
z() - c.
x() * s.
y() * s.
z();
94 this->
y = c.
x() * s.
y() * c.
z() + s.
x() * c.
y() * s.
z();
95 this->
z = c.
x() * c.
y() * s.
z() - s.
x() * s.
y() * c.
z();
125 this->
w =
static_cast<T>(q.
w);
126 this->
x =
static_cast<T>(q.
x);
127 this->
y =
static_cast<T>(q.
y);
128 this->
z =
static_cast<T>(q.
z);
135 this->
w +=
static_cast<T>(q.
w);
136 this->
x +=
static_cast<T>(q.
x);
137 this->
y +=
static_cast<T>(q.
y);
138 this->
z +=
static_cast<T>(q.
z);
145 this->
w -=
static_cast<T>(q.
w);
146 this->
x -=
static_cast<T>(q.
x);
147 this->
y -=
static_cast<T>(q.
y);
148 this->
z -=
static_cast<T>(q.
z);
157 this->
w = p.
w * q.
w - p.
x * q.
x - p.
y * q.
y - p.
z * q.
z;
158 this->
x = p.
w * q.
x + p.
x * q.
w + p.
y * q.
z - p.
z * q.
y;
159 this->
y = p.
w * q.
y + p.
y * q.
w + p.
z * q.
x - p.
x * q.
z;
160 this->
z = p.
w * q.
z + p.
z * q.
w + p.
x * q.
y - p.
y * q.
x;
167 this->
w *=
static_cast<T>(s);
168 this->
x *=
static_cast<T>(s);
169 this->
y *=
static_cast<T>(s);
170 this->
z *=
static_cast<T>(s);
177 this->
w /=
static_cast<T>(s);
178 this->
x /=
static_cast<T>(s);
179 this->
y /=
static_cast<T>(s);
180 this->
z /=
static_cast<T>(s);
227 return v + ((uv * q.
w) + uuv) *
static_cast<T>(2);
269 return o <<
"Quaternion(" << v.
w <<
", " << v.
x <<
", " << v.
y <<
", " << v.
z <<
')';
275 std::stringstream ss;
277 return std::move(ss).str();
282 template<
size_t I,
typename T>
285 template<
size_t I,
typename T>
288 template<
size_t I,
typename T>
291 template<
size_t I,
typename T>
292 constexpr const T&&
get(
const Qua<T>&& v) {
return std::move(v[
I]); }
296struct std::tuple_size<
osc::Qua<T>> {
297 static inline constexpr size_t value = 4;
300template<
size_t I,
typename T>
301struct std::tuple_element<I,
osc::Qua<T>> {
constexpr reference x()
Returns (*this)[0]
Definition vector.h:157
constexpr reference z()
Returns (*this)[2]
Definition vector.h:167
constexpr reference w()
Returns (*this)[3]
Definition vector.h:172
constexpr reference y()
Returns (*this)[1]
Definition vector.h:162
Definition custom_decoration_generator.h:5
std::ostream & operator<<(std::ostream &, const Object &)
GenType cos(GenType v)
Definition trigonometric_functions.h:37
Qua< T > quaternion_cast(const Matrix< T, 3, 3 > &m)
Definition quaternion_functions.h:73
constexpr std::common_type_t< Angle< Rep1, Units1 >, Angle< Rep2, Units2 > > operator+(const Angle< Rep1, Units1 > &lhs, const Angle< Rep2, Units2 > &rhs)
Definition angle.h:100
Matrix< T, 3, 3 > operator/(const Matrix< T, 3, 3 > &m, T scalar)
Definition matrix3x3.h:341
constexpr T dot(T x, T y)
Definition geometric_functions.h:31
constexpr const T & get(const Rgb< T > &v)
Definition rgb.h:88
T abs(T num)
Definition common_functions.h:24
std::string to_string(const Matrix< T, C, R > &m)
Definition matrix.h:32
GenType sin(GenType v)
Definition trigonometric_functions.h:13
T inverse(const Matrix< T, 3, 3 > &m)
Definition matrix_functions.h:158
Vector< T, N > normalize(const Vector< T, N > &v)
Definition geometric_functions.h:76
Matrix< T, 3, 3 > operator*(const Matrix< T, 3, 3 > &m, T scalar)
Definition matrix3x3.h:273
T sqrt(T num)
Definition geometric_functions.h:16
constexpr CoordinateDirection cross(CoordinateDirection x, CoordinateDirection y)
Definition coordinate_direction.h:124
constexpr std::common_type_t< Angle< Rep1, Units1 >, Angle< Rep2, Units2 > > operator-(const Angle< Rep1, Units1 > &lhs, const Angle< Rep2, Units2 > &rhs)
Definition angle.h:115
constexpr reference operator[](size_type pos)
Definition qua.h:117
T * iterator
Definition qua.h:30
constexpr Qua(T w_, T x_, T y_, T z_)
Definition qua.h:45
T value_type
Definition qua.h:23
size_t size_type
Definition qua.h:24
Qua(const Matrix< T, 3, 3 > &m)
Definition qua.h:99
static constexpr Qua< T > wxyz(T w, T x, T y, T z)
Definition qua.h:34
constexpr iterator end()
Definition qua.h:115
constexpr const_iterator begin() const
Definition qua.h:114
constexpr const_pointer data() const
Definition qua.h:112
constexpr const_iterator end() const
Definition qua.h:116
ptrdiff_t difference_type
Definition qua.h:25
constexpr pointer data()
Definition qua.h:111
friend constexpr bool operator==(const Qua &, const Qua &)=default
const T * const_iterator
Definition qua.h:31
constexpr Qua< T > & operator=(const Qua< U > &q)
Definition qua.h:123
const T * const_pointer
Definition qua.h:29
constexpr Qua(const Qua< U > &q)
Definition qua.h:51
constexpr Qua< T > & operator-=(const Qua< U > &q)
Definition qua.h:143
T * pointer
Definition qua.h:28
constexpr Qua< T > & operator*=(const Qua< U > &r)
Definition qua.h:153
constexpr Qua< T > & operator+=(const Qua< U > &q)
Definition qua.h:133
constexpr Qua< T > & operator/=(U s)
Definition qua.h:175
constexpr iterator begin()
Definition qua.h:113
constexpr const_reference operator[](size_type pos) const
Definition qua.h:118
Qua(const Vector< T, 3 > &u, const Vector< T, 3 > &v)
Definition qua.h:64
constexpr Qua(T s, const Vector< T, 3 > &v)
Definition qua.h:40
Qua(const Matrix< T, 4, 4 > &m)
Definition qua.h:105
T & reference
Definition qua.h:26
const T & const_reference
Definition qua.h:27
constexpr Qua< T > & operator*=(U s)
Definition qua.h:165
constexpr size_type size() const
Definition qua.h:110
Qua(const EulerAngles &euler_angles)
Definition qua.h:87
T type
Definition qua.h:302