]> Shamusworld >> Repos - ttedit/blob - src/vector.h
4504fe4572a8f088407029c0f36342d8d0ae350e
[ttedit] / src / vector.h
1 #if 0
2
3 //
4 // VECTOR.H - vector class definition
5 //
6 // by James L. Hammons
7 // (C) 2003 Underground Software
8 //
9
10 #ifndef __VECTOR_H__
11 #define __VECTOR_H__
12
13 struct vector
14 {
15         double x, y, z;
16
17         vector(double a1=0.0, double b1=0.0, double c1=0.0, double a2=0.0, double b2=0.0, double c2=0.0);
18         vector(const vector &v1, const vector &v2);
19         vector& operator=(const vector &v);
20         bool operator==(const vector &v);
21         void unitize(void);
22         vector operator*(const vector &v);                      // Cross product: "this" x "v"
23         vector operator+(const vector &v);
24         vector operator-(const vector &v);
25         double dot(const vector &v1, const vector &v2);
26         double dot(const vector &v);
27         double distance(const vector &v);                       // Pythagoras extended to 3 dimensions
28         double length(void);
29         void operator*=(const double &d);
30         void operator/=(const double &d);
31         void operator+=(const vector &v);
32         void operator-=(const vector &v);
33         vector operator*(const double &d);                      // Scale vector by amount
34         void zero(const double epsilon = 1.0e-6);
35 };
36
37 #endif  // __VECTOR_H__
38
39 #else
40
41 //
42 // vector.h (Last modified: 6/28/2001)
43 //
44 // Various structures used for 3 dimensional imaging
45 //
46 // by James L. Hammons
47 // (C) 2001 Underground Software
48 //
49
50 #ifndef __VECTOR_H__
51 #define __VECTOR_H__
52
53 // What we'll do here is create the vector type and use typedef to alias Point to it. Yeah, that's it.
54
55 class Vector
56 {
57         public:
58 //              Vector(double xx = 0, double yy = 0, double zz = 0);
59                 Vector(double x1 = 0, double y1 = 0, double z1 = 0, double x2 = 0, double y2 = 0, double z2 = 0);
60                 Vector(Vector head, Vector tail);               // Create vector from two points
61                 Vector operator=(Vector const v);
62                 Vector operator+(Vector const v);
63                 Vector operator-(Vector const v);
64                 Vector operator-(void);                                 // Unary negation
65                 Vector operator*(double const v);               // Vector times constant (double)
66                 Vector operator*(float const v);                // Vector times constant (float)
67                 Vector operator/(double const v);               // Vector divided by constant (double)
68                 Vector operator/(float const v);                // Vector divided by constant (float)
69                 Vector operator*(Vector const v);               // Vector product
70                 double Dot(Vector const v);                             // Dot product
71
72                 Vector& operator*=(double const v);             // Vector times constant self-assignment
73                 Vector& operator/=(double const v);             // Vector divided by constant self-assignment
74                 Vector& operator+=(Vector const v);             // Vector plus Vector self-assignment
75                 Vector& operator+=(double const v);             // Vector plus constant self-assignment
76                 Vector& operator-=(Vector const v);             // Vector minus Vector self-assignment
77                 Vector& operator-=(double const v);             // Vector minus constant self-assignment
78
79                 bool operator==(Vector const v);                // Check for equality
80                 bool operator!=(Vector const v);                // Check for inequality
81
82                 Vector Unit(void);
83                 double Magnitude(void);
84                 double Angle(void);                                             // Angle of this vector WRT positive X-axis
85                 double Angle(Vector v);                                 // Angle between these two vectors
86                 bool isZero(double epsilon = 1e-6);
87
88                 // Class methods
89
90                 static double Dot(Vector v1, Vector v2);
91                 static double Magnitude(Vector v1, Vector v2);
92
93         public:
94                 double x, y, z;
95 };
96
97 typedef Vector Point;
98
99 #endif  // __VECTOR_H__
100
101 #endif
102