]> Shamusworld >> Repos - architektonas/blobdiff - src/vector.h
Miscellaneous fixes/updates:
[architektonas] / src / vector.h
index 0551ea87cc8555a0309aa0ad1946d5f8d340c39b..67d9aa92f8e0f0d82ebb7bf2fdff4c7febe63277 100644 (file)
@@ -1,54 +1,65 @@
-//\r
-// vector.h (Last modified: 6/28/2001)\r
-//\r
-// Various structures used for 3 dimensional imaging\r
-//\r
-// by James L. Hammons\r
-// (C) 2001 Underground Software\r
-//\r
-\r
-#ifndef __VECTOR_H__\r
-#define __VECTOR_H__\r
-\r
-// What we'll do here is create the vector type and use typedef to alias Point to it. Yeah, that's it.\r
-\r
-class Vector\r
-{\r
-       public:\r
-               Vector(double xx = 0, double yy = 0, double zz = 0);\r
-               Vector(Vector head, Vector tail);               // Create vector from two points\r
-               Vector operator=(Vector const v);\r
-               Vector operator+(Vector const v);\r
-               Vector operator-(Vector const v);\r
-               Vector operator-(void);                                 // Unary negation\r
-               Vector operator*(double const v);               // Vector times constant (double)\r
-               Vector operator*(float const v);                // Vector times constant (float)\r
-               Vector operator/(double const v);               // Vector divided by constant (double)\r
-               Vector operator/(float const v);                // Vector divided by constant (float)\r
-               Vector operator*(Vector const v);               // Vector product\r
-               double Dot(Vector const v);                             // Dot product\r
-\r
-               Vector& operator*=(double const v);             // Vector times constant self-assignment\r
-               Vector& operator/=(double const v);             // Vector divided by constant self-assignment\r
-               Vector& operator+=(Vector const v);             // Vector plus Vector self-assignment\r
-               Vector& operator+=(double const v);             // Vector plus constant self-assignment\r
-               Vector& operator-=(Vector const v);             // Vector minus Vector self-assignment\r
-               Vector& operator-=(double const v);             // Vector minus constant self-assignment\r
-\r
-               Vector Unit(void);\r
-               double Magnitude(void);\r
-               double Angle(void);\r
-               bool isZero(double epsilon = 1e-6);\r
-\r
-               // Class methods\r
-\r
-               static double Dot(Vector v1, Vector v2);\r
-               static double Magnitude(Vector v1, Vector v2);\r
-\r
-       public:\r
-               double x, y, z;\r
-};\r
-\r
-typedef Vector Point;\r
-\r
-#endif // __VECTOR_H__\r
+//
+// vector.h (Last modified: 6/28/2001)
+//
+// Various structures used for 3 dimensional imaging
+//
+// by James Hammons
+// (C) 2001, 2018 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
+               Vector(const Vector &v);
+               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__