// Various structures used for 3 dimensional imaging
//
// by James Hammons
-// (C) 2001, 2014 Underground Software
+// (C) 2001, 2018 Underground Software
//
#ifndef __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 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
+ 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
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);
double x, y, z;
};
-typedef Vector Point;
-
#endif // __VECTOR_H__