www.pudn.com > 20050921094855818.zip > vector.h


// 
// This module contains a bunch of well understood functions 
// I apologise if the conventions used here are slightly 
// different than what you are used to. 
//  
  
#ifndef GENERIC_VECTOR_H 
#define GENERIC_VECTOR_H 
 
#include  
#include  
 
 
class Vector { 
  public: 
	float x,y,z; 
	Vector(float _x=0.0,float _y=0.0,float _z=0.0){x=_x;y=_y;z=_z;}; 
	operator float *() { return &x;}; 
}; 
 
float magnitude(Vector v); 
Vector normalize(Vector v); 
 
Vector operator+(Vector v1,Vector v2); 
Vector operator-(Vector v); 
Vector operator-(Vector v1,Vector v2); 
Vector operator*(Vector v1,float s)   ; 
Vector operator*(float s,Vector v1)   ; 
Vector operator/(Vector v1,float s)   ; 
float   operator^(Vector v1,Vector v2);  // DOT product 
Vector operator*(Vector v1,Vector v2);   // CROSS product 
Vector planelineintersection(Vector n,float d,Vector p1,Vector p2); 
 
class matrix{ 
 public: 
	Vector x,y,z; 
	matrix(){x=Vector(1.0f,0.0f,0.0f); 
	         y=Vector(0.0f,1.0f,0.0f); 
	         z=Vector(0.0f,0.0f,1.0f);}; 
	matrix(Vector _x,Vector _y,Vector _z){x=_x;y=_y;z=_z;}; 
}; 
matrix transpose(matrix m); 
Vector operator*(matrix m,Vector v); 
matrix operator*(matrix m1,matrix m2); 
 
class Quaternion{ 
 public: 
	 float r,x,y,z; 
	 Quaternion(){x=y=z=0.0f;r=1.0f;}; 
	 Quaternion(Vector v,float t){v=normalize(v);r=(float)cos(t/2.0);v=v*(float)sin(t/2.0);x=v.x;y=v.y;z=v.z;}; 
	 Quaternion(float _r,float _x,float _y,float _z){r=_r;x=_x;y=_y;z=_z;}; 
	 float angle(){return (float)(acos(r)*2.0);} 
	 Vector axis(){Vector a(x,y,z); return a*(float)(1/sin(angle()/2.0));} 
	 Vector xdir(){return Vector(1-2*(y*y+z*z),  2*(x*y+r*z),  2*(x*z-r*y));} 
	 Vector ydir(){return Vector(  2*(x*y-r*z),1-2*(x*x+z*z),  2*(y*z+r*x));} 
	 Vector zdir(){return Vector(  2*(x*z+r*y),  2*(y*z-r*x),1-2*(x*x+y*y));} 
	 matrix  getmatrix(){return matrix(xdir(),ydir(),zdir());} 
	 //operator matrix(){return getmatrix();} 
}; 
Quaternion operator-(Quaternion q); 
Quaternion operator*(Quaternion a,Quaternion b); 
Vector    operator*(Quaternion q,Vector v); 
Vector    operator*(Vector v,Quaternion q); 
Quaternion slerp(Quaternion a,Quaternion b,float interp); 
 
#endif