00001 /* 00002 File: Quaternion.h 00003 00004 Function: Useful routines for using quaternions in CG 00005 00006 Author: Andrew Willmott 00007 00008 Copyright: (c) 2000, Andrew Willmott 00009 */ 00010 00011 #ifndef __Quaternion__ 00012 #define __Quaternion__ 00013 00014 #include "gcl/Geometry.h" 00015 00016 typedef Vector4 Quaternion; 00017 00018 Quaternion MakeQuat(const Vector &axis, GCLReal theta); 00019 Quaternion MakeQuat(const Vector &point); 00020 Quaternion MakeQuat(const VecTrans &t); 00021 // R is assumed to contain the orthonormal axes of the new (rotated) 00022 // space in its columns. 00023 Quaternion QuatMult(const Quaternion &a, const Quaternion &b); 00024 00025 inline Quaternion QuatInv(const Quaternion &q) 00026 { return(Quaternion(-q[0], -q[1], -q[2], q[3])); } 00027 00028 inline Void MakeFromQuat(const Quaternion &q, VecTrans &t) 00029 { t.MakeRot(q); } 00030 00031 #endif