- Timestamp:
- Mar 13, 2013 9:57:03 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/nanovis/vrmath/include/vrmath/Quaternion.h
r3470 r3492 1 1 /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ 2 /** 3 * Quaternion code by BLACKAXE / kolor aka Laurent Schmalen 4 * Use for commercial is strictly prohibited 2 /* 3 * Copyright (c) 2004-2013 HUBzero Foundation, LLC 5 4 * 6 * I (Insoo Woo) have changed names according to my naming rules5 * Author: Insoo Woo <iwoo@purdue.edu> 7 6 */ 8 7 #ifndef VRQUATERNION_H 9 8 #define VRQUATERNION_H 10 9 11 class vrRotation; 10 namespace vrmath { 12 11 13 class vrQuaternion 12 class Rotation; 13 14 class Quaternion 14 15 { 15 16 public: 16 vrQuaternion();17 Quaternion(); 17 18 18 explicit vrQuaternion(const vrRotation& rot);19 explicit Quaternion(const Rotation& rot); 19 20 20 vrQuaternion(float x, float y = 0, float z = 0, float w = 0);21 Quaternion(double x, double y, double z, double w); 21 22 22 void set( float x1, float y1, float z1, floatw1);23 void set(double x1, double y1, double z1, double w1); 23 24 24 const vrQuaternion& set(const vrRotation& rot);25 const Quaternion& set(const Rotation& rot); 25 26 26 vrQuaternion conjugate() const27 Quaternion conjugate() const 27 28 { 28 vrQuaternion result;29 Quaternion result; 29 30 result.w = w; 30 31 result.x = -x; … … 34 35 } 35 36 36 vrQuaternion reciprocal() const37 Quaternion reciprocal() const 37 38 { 38 39 double denom = w*w + x*x + y*y + z*z; 39 vrQuaternion result = conjugate();40 Quaternion result = conjugate(); 40 41 result.x /= denom; 41 42 result.y /= denom; … … 45 46 } 46 47 47 void slerp(const vrRotation &a,const vrRotation &b, const floatt);48 void slerp(const Rotation &a,const Rotation &b, double t); 48 49 49 void slerp(const vrQuaternion &a,const vrQuaternion &b, const floatt);50 void slerp(const Quaternion &a,const Quaternion &b, double t); 50 51 51 const vrQuaternion& normalize();52 Quaternion& normalize(); 52 53 53 vrQuaternion operator*(const vrQuaternion& q2) const54 Quaternion operator*(const Quaternion& q2) const 54 55 { 55 vrQuaternion result;56 Quaternion result; 56 57 result.w = (w * q2.w) - (x * q2.x) - (y * q2.y) - (z * q2.z); 57 58 result.x = (w * q2.x) + (x * q2.w) + (y * q2.z) - (z * q2.y); … … 61 62 } 62 63 63 friend bool operator==(const vrQuaternion& q1, const vrQuaternion& q2);64 friend bool operator==(const Quaternion& q1, const Quaternion& q2); 64 65 65 floatx, y, z, w;66 double x, y, z, w; 66 67 }; 67 68 68 inline bool operator==(const vrQuaternion& q1, const vrQuaternion& q2)69 inline bool operator==(const Quaternion& q1, const Quaternion& q2) 69 70 { 70 71 return ((q1.x == q2.x) && (q1.y == q2.y) && (q1.z == q2.z) && (q1.w == q2.w)); 71 72 } 72 73 73 inline void vrQuaternion::slerp(const vrRotation &a,const vrRotation &b, const floatt)74 inline void Quaternion::slerp(const Rotation &a,const Rotation &b, double t) 74 75 { 75 slerp( vrQuaternion(a), vrQuaternion(b), t);76 slerp(Quaternion(a), Quaternion(b), t); 76 77 } 77 78 78 inline void vrQuaternion::set(float x1, float y1, float z1, floatw1)79 inline void Quaternion::set(double x1, double y1, double z1, double w1) 79 80 { 80 81 x = x1; … … 84 85 } 85 86 87 } 88 86 89 #endif
Note: See TracChangeset
for help on using the changeset viewer.