X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvector.h;h=4bcb461a4a730b459d671852e2b7a633d962af1c;hb=84fc4387b9a6051819da5c9ed688de1ec372c7f7;hp=c1cee7dea145eade87160833abd5404f7a22f3a7;hpb=9f6ad3fe0b9cb30115a5d38e8af3aebed0d70c08;p=architektonas diff --git a/src/vector.h b/src/vector.h index c1cee7d..4bcb461 100644 --- a/src/vector.h +++ b/src/vector.h @@ -1,50 +1,64 @@ -// -// 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 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 Unit(void); - double Magnitude(void); - double Angle(void); - bool isZero(double epsilon = 1e-6); - - // Class methods - - static double Dot(Vector v1, Vector v2); - - public: - double x, y, z; -}; - -typedef Vector Point; - -#endif // __VECTOR_H__ +// +// vector.h (Last modified: 6/28/2001) +// +// Various structures used for 3 dimensional imaging +// +// by James Hammons +// (C) 2001, 2014 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; +typedef Vector Point; + +class Vector +{ + public: + Vector(double xx = 0, double yy = 0, double zz = 0); + Vector(Vector tail, Vector head); // Create vector from two points + void SetAngleAndLength(double angle, double length); + 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); + bool isZero(double epsilon = 1e-6); + + // Class methods + + static double Dot(Vector v1, Vector v2); + static double Magnitude(Vector v1, Vector v2); + static double Angle(Point p1, Point p2); + static double Parameter(Vector v1, Vector v2, Vector p); + static Vector Normal(Vector v1, Vector v2); + static double AngleBetween(Vector a, Vector b); + + public: + double x, y, z; +}; + +#endif // __VECTOR_H__