⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vector.h

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 H
字号:
/************************************************************ vector.h - a vector class written in c++                 ** functions for +, -, dotproduct, crossproduct, scaling,   ** length & normalizing, many of these are operators        ** By Tomas Moller                                          ************************************************************/#ifndef VECTOR_H#define VECTOR_H#include <stream.h>#include <string.h>#include <math.h>#define Xi 0			// indices into vector#define Yi 1#define Zi 2class Vector{	protected:		float fx,fy,fz;	public:		Vector() {fx=0.0;fy=0.0;fz=0.0;}		// constructor with no argument		Vector(float x,float y,float z);			// constructor with coords		Vector(Vector& a);						// constructor with vector		void Set(float x,float y,float z);			// assign new values to vector		void SetX(float x);						// set x		void SetY(float y);						// set y		void SetZ(float z);						// set z;		void SetIndex(int index,float value);	// set x,y or z to value depending on index		float X(void);							// return fx		float Y(void);							// return fy		float Z(void);							// return fz		void Add(float x,float y,float z);			// addition to this vector		void Sub(float x,float y,float z);			// subtraction		void Scale(float a);						// scaling of vector		float Length(void);						// length of vector		void Normalize(void);					// normalize vector		void operator=(Vector& a);				// operator: assignment		Vector operator*(float t);				// operator: scaling		Vector operator+(Vector& a);			// operator: addition 		Vector operator-(Vector& a);			// operator: subtraction		Vector operator+(void);					// unary +		Vector operator-(void);					// unary -		void operator+=(Vector& a);				// operator: +=		void operator-=(Vector& a);				// operator: -=		void operator*=(float t);				// operator: *= (scaling)		float operator*(Vector& a);				// operator: dot product		Vector operator%(Vector& a);			// operator: cross product		float operator[](short index);			// if short=0 then X, short=1 then Y, else Z, see constants above		void print(void);						// print coords};/* here follows the inline functions and operators */inline Vector::Vector(float x,float y,float z){ fx=x; fy=y; fz=z; }inline Vector::Vector(Vector& a){ fx=a.fx; fy=a.fy; fz=a.fz; }inline void Vector::Set(float x,float y,float z){ fx=x; fy=y; fz=z; }inline void Vector::SetX(float x){ fx=x;}inline void Vector::SetY(float y){ fy=y; }inline void Vector::SetZ(float z){ fz=z; }inline void Vector::SetIndex(int index,float value){	switch(index)	{		case Xi: fx=value;		case Yi: fy=value;		case Zi: fz=value;	}}inline float Vector::X(void){ return fx; }inline float Vector::Y(void){ return fy; }inline float Vector::Z(void){ return fz; }inline void Vector::Add(float x,float y,float z){ fx+=x; fy+=y; fz+=z; } inline void Vector::Sub(float x,float y,float z){ fx-=x; fy-=y; fz-=z; }inline void Vector::Scale(float a){ fx*=a; fy*=a; fz*=a; }inline float Vector::Length(void){ return sqrt((*this)*(*this));	// square root of Dot(this,this)}inline void Vector::Normalize(void){ 	if(Length()==0.0) cout<<"Error:normalize\n"; 	else Scale(1.0/Length());}/****************** Operators *********************/inline void Vector::operator=(Vector& a)	// assignment{ fx=a.fx; fy=a.fy; fz=a.fz; }inline Vector Vector::operator+(void)		// unary +{ return *this; }inline Vector Vector::operator*(float t)		// scaling{ Vector temp; temp.Set(fx*t,fy*t,fz*t); return temp; }inline Vector Vector::operator+(Vector& a){ Vector sum; sum.Set(fx+a.fx,fy+a.fy,fz+a.fz); return sum; }inline Vector Vector::operator-(Vector& a){ Vector sum; sum.Set(fx-a.fx,fy-a.fy,fz-a.fz); return sum; }inline Vector Vector::operator-(void)			// unary -{ Vector neg; neg.Set(-fx,-fy,-fz); return neg; }inline void Vector::operator+=(Vector& a){ Set(fx+a.fx,fy+a.fy,fz+a.fz); }inline void Vector::operator-=(Vector& a){ Set(fx-a.fx,fy-a.fy,fz-a.fz); }inline void Vector::operator*=(float t)		// scaling{ Set(fx*t,fy*t,fz*t); }inline float Vector::operator*(Vector& a)		// dot product{ return fx*a.fx+fy*a.fy+fz*a.fz; }inline Vector Vector::operator%(Vector& a)		// cross product{	Vector cross;	cross.Set(fy*a.fz-fz*a.fy,fz*a.fx-fx*a.fz,fx*a.fy-fy*a.fx);	return cross;}inline float Vector::operator[](short index){	switch(index)	{		case Xi: return fx;		case Yi: return fy;		case Zi: return fz;	}	return 0.0;					// if invalid index}/*************** End of Operators *****************/inline void Vector::print(void){	cout<<form("x:%.6f y:%.6f z:%.6f\n",fx,fy,fz);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -