2 // vector.h (Last modified: 6/28/2001)
4 // Various structures used for 3 dimensional imaging
7 // (C) 2001, 2018 Underground Software
13 // What we'll do here is create the vector type and use typedef to alias Point
14 // to it. Yeah, that's it.
22 Vector(double xx = 0, double yy = 0, double zz = 0);
23 Vector(Vector tail, Vector head); // Create vector from two points
24 void SetAngleAndLength(double angle, double length);
25 Vector operator=(Vector const v);
26 Vector operator+(Vector const v);
27 Vector operator-(Vector const v);
28 Vector operator-(void); // Unary negation
29 Vector operator*(double const v); // Vector times constant (double)
30 Vector operator*(float const v); // Vector times constant (float)
31 Vector operator/(double const v); // Vector divided by constant (double)
32 Vector operator/(float const v); // Vector divided by constant (float)
33 Vector operator*(Vector const v); // Vector product
34 double Dot(Vector const v); // Dot product
36 Vector& operator*=(double const v); // Vector times constant self-assignment
37 Vector& operator/=(double const v); // Vector divided by constant self-assignment
38 Vector& operator+=(Vector const v); // Vector plus Vector self-assignment
39 Vector& operator+=(double const v); // Vector plus constant self-assignment
40 Vector& operator-=(Vector const v); // Vector minus Vector self-assignment
41 Vector& operator-=(double const v); // Vector minus constant self-assignment
43 bool operator==(Vector const v); // Check for equality
44 bool operator!=(Vector const v); // Check for inequality
47 double Magnitude(void);
49 bool isZero(double epsilon = 1e-6);
53 static double Dot(Vector v1, Vector v2);
54 static double Magnitude(Vector v1, Vector v2);
55 static double Angle(Point p1, Point p2);
56 static double Parameter(Vector v1, Vector v2, Vector p);
57 static Vector Normal(Vector v1, Vector v2);
58 static double AngleBetween(Vector a, Vector b);
64 #endif // __VECTOR_H__