35 #ifdef OSG_USE_FLOAT_QUAT
42 enum { num_components = 4 };
46 inline Quat() { _v[0]=0.0; _v[1]=0.0; _v[2]=0.0; _v[3]=1.0; }
74 makeRotate(angle,axis);
78 makeRotate(angle,axis);
85 makeRotate(angle1,axis1,angle2,axis2,angle3,axis3);
92 makeRotate(angle1,axis1,angle2,axis2,angle3,axis3);
97 inline Quat& operator = (
const Quat& v) { _v[0]=v.
_v[0]; _v[1]=v.
_v[1]; _v[2]=v.
_v[2]; _v[3]=v.
_v[3];
return *
this; }
99 inline bool operator == (
const Quat& v)
const {
return _v[0]==v.
_v[0] && _v[1]==v.
_v[1] && _v[2]==v.
_v[2] && _v[3]==v.
_v[3]; }
101 inline bool operator != (
const Quat& v)
const {
return _v[0]!=v.
_v[0] || _v[1]!=v.
_v[1] || _v[2]!=v.
_v[2] || _v[3]!=v.
_v[3]; }
103 inline bool operator < (
const Quat& v)
const
105 if (_v[0]<v.
_v[0])
return true;
106 else if (_v[0]>v.
_v[0])
return false;
107 else if (_v[1]<v.
_v[1])
return true;
108 else if (_v[1]>v.
_v[1])
return false;
109 else if (_v[2]<v.
_v[2])
return true;
110 else if (_v[2]>v.
_v[2])
return false;
111 else return (_v[3]<v.
_v[3]);
120 return Vec4d(_v[0], _v[1], _v[2], _v[3]);
125 return Vec3d(_v[0], _v[1], _v[2]);
162 inline value_type operator [] (
int i)
const {
return _v[i]; }
175 bool zeroRotation()
const {
return _v[0]==0.0 && _v[1]==0.0 && _v[2]==0.0 && _v[3]==1.0; }
188 return Quat(_v[0]*rhs, _v[1]*rhs, _v[2]*rhs, _v[3]*rhs);
204 return Quat( rhs.
_v[3]*_v[0] + rhs.
_v[0]*_v[3] + rhs.
_v[1]*_v[2] - rhs.
_v[2]*_v[1],
205 rhs.
_v[3]*_v[1] - rhs.
_v[0]*_v[2] + rhs.
_v[1]*_v[3] + rhs.
_v[2]*_v[0],
206 rhs.
_v[3]*_v[2] + rhs.
_v[0]*_v[1] - rhs.
_v[1]*_v[0] + rhs.
_v[2]*_v[3],
207 rhs.
_v[3]*_v[3] - rhs.
_v[0]*_v[0] - rhs.
_v[1]*_v[1] - rhs.
_v[2]*_v[2] );
216 _v[3] = rhs.
_v[3]*_v[3] - rhs.
_v[0]*_v[0] - rhs.
_v[1]*_v[1] - rhs.
_v[2]*_v[2];
229 return Quat(_v[0]*div, _v[1]*div, _v[2]*div, _v[3]*div);
246 return ( (*
this) * denom.
inverse() );
252 (*this) = (*this) * denom.
inverse();
257 inline const Quat operator + (
const Quat& rhs)
const
259 return Quat(_v[0]+rhs.
_v[0], _v[1]+rhs.
_v[1],
260 _v[2]+rhs.
_v[2], _v[3]+rhs.
_v[3]);
274 inline const Quat operator - (
const Quat& rhs)
const
276 return Quat(_v[0]-rhs.
_v[0], _v[1]-rhs.
_v[1],
277 _v[2]-rhs.
_v[2], _v[3]-rhs.
_v[3] );
292 inline const Quat operator - ()
const
294 return Quat (-_v[0], -_v[1], -_v[2], -_v[3]);
300 return sqrt( _v[0]*_v[0] + _v[1]*_v[1] + _v[2]*_v[2] + _v[3]*_v[3]);
306 return _v[0]*_v[0] + _v[1]*_v[1] + _v[2]*_v[2] + _v[3]*_v[3];
312 return Quat( -_v[0], -_v[1], -_v[2], _v[3] );
318 return conj() / length2();
376 Vec3f qvec(_v[0], _v[1], _v[2]);
379 uv *= ( 2.0f * _v[3] );
389 Vec3d qvec(_v[0], _v[1], _v[2]);
392 uv *= ( 2.0f * _v[3] );
value_type x() const
Definition Quat:169
void set(const Matrixf &matrix)
Quat(value_type angle, const Vec3d &axis)
Definition Quat:76
void getRotate(value_type &angle, Vec3d &vec) const
value_type & w()
Definition Quat:167
bool zeroRotation() const
Definition Quat:175
Vec4d asVec4() const
Definition Quat:118
value_type y() const
Definition Quat:170
const Quat operator*(const Quat &rhs) const
Binary multiply.
Definition Quat:202
const Quat operator/(const Quat &denom) const
Binary divide.
Definition Quat:244
const Quat inverse() const
Multiplicative inverse method: q^(-1) = q^*/(q.q^*)
Definition Quat:316
Quat(value_type angle, const Vec3f &axis)
Definition Quat:72
void makeRotate(value_type angle, const Vec3d &vec)
Quat(value_type x, value_type y, value_type z, value_type w)
Definition Quat:48
void set(const osg::Vec4d &v)
Definition Quat:144
void getRotate(value_type &angle, Vec3f &vec) const
value_type & y()
Definition Quat:165
value_type length() const
Length of the quaternion = sqrt( vec . vec )
Definition Quat:298
void makeRotate(value_type angle1, const Vec3f &axis1, value_type angle2, const Vec3f &axis2, value_type angle3, const Vec3f &axis3)
void makeRotate(value_type angle, value_type x, value_type y, value_type z)
Quat(const Quat &q)
Definition Quat:95
void makeRotate(const Vec3f &vec1, const Vec3f &vec2)
void getRotate(value_type &angle, value_type &x, value_type &y, value_type &z) const
void makeRotate_original(const Vec3d &vec1, const Vec3d &vec2)
Vec3d asVec3() const
Definition Quat:123
value_type & x()
Definition Quat:164
Quat conj() const
Conjugate.
Definition Quat:310
Quat(const Vec4f &v)
Definition Quat:56
void get(Matrixf &matrix) const
value_type & z()
Definition Quat:166
value_type _v[4]
Definition Quat:44
void makeRotate(value_type angle, const Vec3f &vec)
Quat & operator/=(const Quat &denom)
Unary divide.
Definition Quat:250
Quat & operator*=(const Quat &rhs)
Unary multiply.
Definition Quat:211
Quat(value_type angle1, const Vec3f &axis1, value_type angle2, const Vec3f &axis2, value_type angle3, const Vec3f &axis3)
Definition Quat:81
void set(value_type x, value_type y, value_type z, value_type w)
Definition Quat:128
void makeRotate(const Vec3d &vec1, const Vec3d &vec2)
double value_type
Definition Quat:38
value_type z() const
Definition Quat:171
void set(const Matrixd &matrix)
Quat(value_type angle1, const Vec3d &axis1, value_type angle2, const Vec3d &axis2, value_type angle3, const Vec3d &axis3)
Definition Quat:88
value_type w() const
Definition Quat:172
Quat(const Vec4d &v)
Definition Quat:64
void get(Matrixd &matrix) const
void makeRotate(value_type angle1, const Vec3d &axis1, value_type angle2, const Vec3d &axis2, value_type angle3, const Vec3d &axis3)
value_type length2() const
Length of the quaternion = vec . vec.
Definition Quat:304
void slerp(value_type t, const Quat &from, const Quat &to)
void set(const osg::Vec4f &v)
Definition Quat:136
value_type & x()
Definition Vec4d:90
value_type & y()
Definition Vec4d:91
value_type & z()
Definition Vec4d:92
value_type & w()
Definition Vec4d:93
value_type & y()
Definition Vec4f:88
value_type & x()
Definition Vec4f:87
value_type & z()
Definition Vec4f:89
value_type & w()
Definition Vec4f:90
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
#define OSG_EXPORT
Definition osg/Export:39