-//\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
- bool operator==(Vector const v); // Check for equality\r
- bool operator!=(Vector const v); // Check for inequality\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
+ 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__