X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvector.h;h=6c46dffa842fc7f956ff8c37a0f446a343a70866;hb=2b16243b0aa693d18ce49a071cdae73cadc37c4f;hp=a7e36ee062ffd59e3bb2a10094fea3c3d1687a07;hpb=6d13a5166688e470590692eb91c3915ab332fe36;p=ttedit diff --git a/src/vector.h b/src/vector.h index a7e36ee..6c46dff 100755 --- a/src/vector.h +++ b/src/vector.h @@ -1,35 +1,101 @@ -// -// VECTOR.H - vector class definition -// -// by James L. Hammons -// (C) 2003 Underground Software -// - -#ifndef __VECTOR_H__ -#define __VECTOR_H__ - -struct vector -{ - double x, y, z; - - vector(double a1=0.0, double b1=0.0, double c1=0.0, double a2=0.0, double b2=0.0, double c2=0.0); - vector(const vector &v1, const vector &v2); - vector& operator=(const vector &v); - bool operator==(const vector &v); - void unitize(void); - vector operator*(const vector &v); // Cross product: "this" x "v" - vector operator+(const vector &v); - vector operator-(const vector &v); - double dot(const vector &v1, const vector &v2); - double dot(const vector &v); - double distance(const vector &v); // Pythagoras extended to 3 dimensions - double length(void); - void operator*=(const double &d); - void operator/=(const double &d); - void operator+=(const vector &v); - void operator-=(const vector &v); - vector operator*(const double &d); // Scale vector by amount - void zero(const double epsilon); -}; - -#endif // __VECTOR_H__ +#if 0 + +// +// VECTOR.H - vector class definition +// +// by James L. Hammons +// (C) 2003 Underground Software +// + +#ifndef __VECTOR_H__ +#define __VECTOR_H__ + +struct vector +{ + double x, y, z; + + vector(double a1=0.0, double b1=0.0, double c1=0.0, double a2=0.0, double b2=0.0, double c2=0.0); + vector(const vector &v1, const vector &v2); + vector& operator=(const vector &v); + bool operator==(const vector &v); + void unitize(void); + vector operator*(const vector &v); // Cross product: "this" x "v" + vector operator+(const vector &v); + vector operator-(const vector &v); + double dot(const vector &v1, const vector &v2); + double dot(const vector &v); + double distance(const vector &v); // Pythagoras extended to 3 dimensions + double length(void); + void operator*=(const double &d); + void operator/=(const double &d); + void operator+=(const vector &v); + void operator-=(const vector &v); + vector operator*(const double &d); // Scale vector by amount + void zero(const double epsilon = 1.0e-6); +}; + +#endif // __VECTOR_H__ + +#else + +// +// vector.h (Last modified: 6/28/2001) +// +// Various structures used for 3 dimensional imaging +// +// by James L. Hammons +// (C) 2001 Underground Software +// + +#ifndef __VECTOR_H__ +#define __VECTOR_H__ + +// What we'll do here is create the vector type and use typedef to alias Point to it. Yeah, that's it. + +class Vector +{ + public: +// Vector(double xx = 0, double yy = 0, double zz = 0); + Vector(double x1 = 0, double y1 = 0, double z1 = 0, double x2 = 0, double y2 = 0, double z2 = 0); + Vector(Vector head, Vector tail); // Create vector from two points + Vector operator=(Vector const v); + Vector operator+(Vector const v); + Vector operator-(Vector const v); + Vector operator-(void); // Unary negation + Vector operator*(double const v); // Vector times constant (double) + Vector operator*(float const v); // Vector times constant (float) + Vector operator/(double const v); // Vector divided by constant (double) + Vector operator/(float const v); // Vector divided by constant (float) + Vector operator*(Vector const v); // Vector product + double Dot(Vector const v); // Dot product + + Vector& operator*=(double const v); // Vector times constant self-assignment + Vector& operator/=(double const v); // Vector divided by constant self-assignment + Vector& operator+=(Vector const v); // Vector plus Vector self-assignment + Vector& operator+=(double const v); // Vector plus constant self-assignment + Vector& operator-=(Vector const v); // Vector minus Vector self-assignment + Vector& operator-=(double const v); // Vector minus constant self-assignment + + bool operator==(Vector const v); // Check for equality + bool operator!=(Vector const v); // Check for inequality + + Vector Unit(void); + double Magnitude(void); + double Angle(void); // Angle of this vector WRT positive X-axis + double Angle(Vector v); // Angle between these two vectors + bool isZero(double epsilon = 1e-6); + + // Class methods + + static double Dot(Vector v1, Vector v2); + static double Magnitude(Vector v1, Vector v2); + + public: + double x, y, z; +}; + +typedef Vector Point; + +#endif // __VECTOR_H__ + +#endif \ No newline at end of file