]> Shamusworld >> Repos - architektonas/blob - src/vector.h
e59b0e86eed7d1a6f8f111643742feda3bd85a4b
[architektonas] / src / vector.h
1 //
2 // vector.h (Last modified: 6/28/2001)
3 //
4 // Various structures used for 3 dimensional imaging
5 //
6 // by James Hammons
7 // (C) 2001, 2014 Underground Software
8 //
9
10 #ifndef __VECTOR_H__
11 #define __VECTOR_H__
12
13 // What we'll do here is create the vector type and use typedef to alias Point
14 // to it. Yeah, that's it.
15
16 class Vector;
17 typedef Vector Point;
18
19 class Vector
20 {
21         public:
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
35
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
42
43                 bool operator==(Vector const v);                // Check for equality
44                 bool operator!=(Vector const v);                // Check for inequality
45
46                 Vector Unit(void);
47                 double Magnitude(void);
48                 double Angle(void);
49                 bool isZero(double epsilon = 1e-6);
50
51                 // Class methods
52
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);
59
60         public:
61                 double x, y, z;
62 };
63
64 #endif  // __VECTOR_H__