35 class TQuaternion :
public QuaternionBase<T> {
39 return QuaternionBase<T>::rotation(Magnum::Math::Rad<T>(
angle), normalizedAxis);
44 return QuaternionBase<T>::fromMatrix((
const Magnum::Math::Matrix<3, T>&)matrix);
47 constexpr TQuaternion() noexcept: QuaternionBase<T>() {}
49 constexpr TQuaternion(T
scalar)
noexcept: TQuaternion<T>(TVector3<T>(0),
scalar) {}
50 constexpr explicit TQuaternion(
const TVector3<T>&
vector)
noexcept: QuaternionBase<T>(
vector) {}
51 template<
class U>
constexpr explicit TQuaternion(
const TQuaternion<U>& other)
noexcept: QuaternionBase<T>(other) {}
53 template<
class U = T> TQuaternion(
const QuaternionBase<U>& other)
noexcept: QuaternionBase<T>(other) {}
54 template<
class U = T> TQuaternion(
const QuaternionBase<U>* other)
noexcept: QuaternionBase<T>(*other) {}
55 template<
class U = T>
operator QuaternionBase<U>*() {
return static_cast<QuaternionBase<U>*
>(
this); }
56 template<
class U = T>
operator const QuaternionBase<U>*() {
return static_cast<const QuaternionBase<U>*
>(
this); }
57 template<
class U = T>
operator QuaternionBase<U>() {
return static_cast<QuaternionBase<U>
>(*this); }
58 template<
class U = T>
operator const QuaternionBase<U>()
const {
return static_cast<const QuaternionBase<U>
>(*this); }
61 T*
data() {
return QuaternionBase<T>::data(); }
64 constexpr const T*
data()
const {
return QuaternionBase<T>::data(); }
65 bool operator==(
const TQuaternion<T>& other)
const {
return QuaternionBase<T>::operator==(other); }
66 bool operator!=(
const TQuaternion<T>& other)
const {
return QuaternionBase<T>::operator!=(other); }
69 bool isNormalized()
const {
return QuaternionBase<T>::isNormalized(); }
76 T&
scalar() {
return QuaternionBase<T>::scalar(); }
83 constexpr T
scalar()
const {
return QuaternionBase<T>::scalar(); }
86 T
angle()
const {
return T(QuaternionBase<T>::angle()); }
99 auto v = QuaternionBase<T>::toEuler();
102 TQuaternion<T> operator-()
const {
return QuaternionBase<T>::operator-(); }
103 TQuaternion<T>& operator+=(
const TQuaternion<T>& other) {
return (TQuaternion<T>&)QuaternionBase<T>::operator+=(other); }
104 TQuaternion<T> operator+(
const TQuaternion<T>& other)
const {
return QuaternionBase<T>::operator+(other); }
105 TQuaternion<T>& operator-=(
const TQuaternion<T>& other) {
return (TQuaternion<T>&)QuaternionBase<T>::operator-=(other); }
106 TQuaternion<T> operator-(
const TQuaternion<T>& other)
const {
return QuaternionBase<T>::operator-(other); }
107 TQuaternion<T>& operator*=(T
scalar) {
return (TQuaternion<T>&)QuaternionBase<T>::operator*=(
scalar); }
108 TQuaternion<T> operator*(T
scalar)
const {
return QuaternionBase<T>::operator*(
scalar); }
109 TQuaternion<T>& operator/=(T
scalar) {
return (TQuaternion<T>&)QuaternionBase<T>::operator/=(
scalar); }
110 TQuaternion<T> operator/(T
scalar)
const {
return QuaternionBase<T>::operator/(
scalar); }
111 TQuaternion<T> operator*(
const QuaternionBase<T>& other)
const {
return QuaternionBase<T>::operator*(other); }
114 T
dot()
const {
return QuaternionBase<T>::dot(); }
117 T
length()
const {
return QuaternionBase<T>::length(); }
120 TQuaternion<T>
normalized()
const {
return QuaternionBase<T>::normalized(); }
123 TQuaternion<T>
conjugated()
const {
return QuaternionBase<T>::conjugated(); }
126 TQuaternion<T>
inverted()
const {
return QuaternionBase<T>::inverted(); }
137 operator std::vector<T>&()
const {
138 std::vector<T>& v =
vector();
139 std::vector<T> *result =
new std::vector<T>(v.begin(), v.end());
140 result->push_back(
scalar());
144 constexpr explicit TQuaternion(
const std::vector<T>&
vector, T
scalar)
noexcept: QuaternionBase<T>(TVector3<T>(
vector),
scalar) {}
147 std::vector<T>& asVector() {
148 std::vector<T> *result =
new std::vector<T>(*
this);