1 #ifndef _V3_ 2 #define _V3_ 3 4 #define PFloat float 5 #define PI 3.141592653589793 6 7 #include <math.h> 8 class R3Matrix; 9 class Plane; 10 11 12 class XYCord { 13 14 public: 15 long mX, mY; 16 }; 17 18 19 class V3 { 20 21 public: magnitudeSqr()22 inline PFloat magnitudeSqr() const { return mX * mX + mY * mY + mZ * mZ; } magnitude()23 inline PFloat magnitude() const { return sqrt( mX * mX + mY * mY + mZ * mZ); } 24 set(const V3 & inPt)25 inline void set( const V3& inPt ) { *this = inPt; } set(PFloat inX,PFloat inY,PFloat inZ)26 inline void set( PFloat inX, PFloat inY, PFloat inZ ) { mX = inX; mY = inY; mZ = inZ; } 27 scale(PFloat inS,const V3 & inPt)28 inline void scale( PFloat inS, const V3& inPt ) { mX = inS*inPt.mX; mY = inS*inPt.mY; mZ = inS*inPt.mZ; } scale(PFloat inS)29 inline void scale( PFloat inS ) { mX *= inS; mY *= inS; mZ *= inS; } 30 void normalize(); 31 32 dot(const V3 & inV)33 inline PFloat dot( const V3& inV ) const { return mX*inV.mX + mY*inV.mY + mZ*inV.mZ; } 34 35 void transform( const R3Matrix& inMatrix ); 36 void transform( const R3Matrix& inMatrix, const V3& inPt ); 37 38 // Transforms the vector like the above two, but then applies a perspective transformation on the x and y coords 39 void transform( const R3Matrix& inMatrix, float inPersZ ); 40 applyPerspective()41 inline void applyPerspective() { mX /= mZ; mY /= mZ; } 42 43 subtract(const V3 & inA)44 inline void subtract( const V3& inA ) { mX -= inA.mX; mY -= inA.mY; mZ -= inA.mZ; } subtract(const V3 & inA,const V3 & inB)45 inline void subtract( const V3& inA, const V3& inB ) { mX = inA.mX-inB.mX; mY = inA.mY-inB.mY; mZ = inA.mZ-inB.mZ; } 46 47 add(PFloat inX,PFloat inY,PFloat inZ)48 inline void add( PFloat inX, PFloat inY, PFloat inZ ) { mX += inX; mY += inY; mZ += inZ; } add(const V3 & inA,const V3 & inB)49 inline void add( const V3& inA, const V3& inB ) { mX = inA.mX+inB.mX; mY = inA.mY+inB.mY; mZ = inA.mZ+inB.mZ; } add(const V3 & inA)50 inline void add( const V3& inA ) { mX += inA.mX; mY += inA.mY; mZ += inA.mZ; } 51 52 53 void toPlane( const V3& inNormal ); 54 void fromPlane( const V3& inNormal ); 55 56 // Assigns intersection of a plane with a line to this pt 57 bool intersection( const Plane& inPlane, const V3& inLine, const V3& inPt ); 58 59 // Rotates this pt around the line defined by inPt1 and inPt2 60 void rotate( const V3& inPt1, const V3& inPt2, PFloat inAng ); 61 62 void cross( const V3& inA ); 63 void cross( const V3& inA, const V3& inB ); 64 65 PFloat mX, mY, mZ; 66 67 }; 68 69 #endif 70