00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _THREE_VECTOR_H_
00019 #define _THREE_VECTOR_H_
00020
00021 #include <math.h>
00022 #include <iostream>
00023
00024
00025
00026
00027 namespace Vamos_Geometry
00028 {
00029 class Three_Vector
00030 {
00031
00032 public:
00033
00034
00035 double m_vec [3];
00036
00037 Three_Vector ();
00038 Three_Vector (double x, double y, double z);
00039
00040 Three_Vector (double [3]);
00041
00042 inline Three_Vector (const Three_Vector& vec);
00043
00044 Three_Vector& operator = (const Three_Vector& vec);
00045
00046
00047 double& operator [] (int index) { return m_vec [index]; }
00048 const double& operator [] (int index) const { return m_vec [index]; }
00049
00050
00051 void zero ();
00052
00053 inline double abs () const;
00054 inline double magnitude() const {return abs();}
00055
00056 double dot (const Three_Vector& vec) const;
00057
00058 Three_Vector cross (const Three_Vector& vec) const;
00059
00060 Three_Vector project (const Three_Vector& vec) const;
00061 Three_Vector back_project (const Three_Vector& vec) const;
00062
00063
00064
00065 double perp_distance (const Three_Vector& point1,
00066 const Three_Vector& point2) const;
00067
00068
00069 Three_Vector unit () const;
00070
00071 double component (const Three_Vector& vec) const;
00072
00073 double angle (const Three_Vector& vec) const;
00074
00075 Three_Vector rotate (double x, double y, double z) const;
00076
00077
00078
00079 Three_Vector& operator += (const Three_Vector& vec);
00080 Three_Vector& operator -= (const Three_Vector& vec);
00081 Three_Vector& operator *= (double factor);
00082 Three_Vector& operator /= (double factor);
00083
00084 static const Three_Vector X;
00085 static const Three_Vector Y;
00086 static const Three_Vector Z;
00087 };
00088
00089
00090
00091 Three_Vector::Three_Vector (const Three_Vector& vec)
00092 {
00093 m_vec [0] = vec [0];
00094 m_vec [1] = vec [1];
00095 m_vec [2] = vec [2];
00096 }
00097
00098
00099 double
00100 Three_Vector::abs () const
00101 {
00102 return sqrt (m_vec [0] * m_vec [0]
00103 + m_vec [1] * m_vec [1]
00104 + m_vec [2] * m_vec [2]);
00105 }
00106
00107
00108 const Three_Vector operator + (const Three_Vector& vec1,
00109 const Three_Vector& vec2);
00110
00111 const Three_Vector operator - (const Three_Vector& vec1,
00112 const Three_Vector& vec2);
00113
00114 const Three_Vector operator - (const Three_Vector& vec);
00115
00116 const Three_Vector operator * (const Three_Vector& vec1, double factor);
00117 const Three_Vector operator * (double factor, const Three_Vector& vec1);
00118
00119 const Three_Vector operator / (const Three_Vector& vec1, double factor);
00120 const Three_Vector operator / (double factor, const Three_Vector& vec1);
00121
00122 bool operator == (const Three_Vector& vec1, const Three_Vector& vec2);
00123
00124
00125 std::istream& operator >> (std::istream& is, Three_Vector& vec);
00126 std::ostream& operator << (std::ostream& os, const Three_Vector& vec);
00127 }
00128
00129 #endif