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