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

📄 vector-bookver.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};/* 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 *****************/#endif

⌨️ 快捷键说明

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