[转] Vector3类

  1 #include <iostream>
  2 
  3 class Vector3
  4 {
  5 public:
  6     float x ;
  7     float y ;
  8     float z ;
  9 
 10     Vector3()
 11     {
 12     }
 13 
 14     Vector3(const Vector3 & a): x(a.x), y(a.y), z(a.z)
 15     {
 16     }
 17 
 18     Vector3(float x, float y, float z): x(x), y(y), z(z)
 19     {
 20     }
 21 
 22     Vector3 & operator= (const Vector3& a)
 23     {
 24         x= a.x ;
 25         y = a.y ;
 26         z = a.z ;
 27 
 28         return *this ;
 29     }
 30 
 31     bool operator == (const Vector3 & a) const
 32     {
 33         return x == a.x && y == a.y && z == a.z ;
 34     }
 35 
 36     bool operator != (const Vector3 & a) const
 37     {
 38         return x != a.x || y != a.y || z != a.z ;
 39     }
 40 
 41     void Zero()
 42     {
 43         x = 0 ;
 44         y = 0 ;
 45         z = 0 ;
 46     }
 47 
 48     Vector3 operator - () const
 49     {
 50         return Vector3(-x, -y, -z) ;
 51     }
 52 
 53     Vector3 operator + (const Vector3 & a) const
 54     {
 55         return Vector3(x + a.x, y + a.y, z + a.z) ;
 56     }
 57 
 58 
 59     Vector3 operator - (const Vector3 & a) const
 60     {
 61         return Vector3(x - a.x, y - a.y, z - a.z) ;
 62     }
 63 
 64     Vector3 operator * (float a) const
 65     {
 66         return Vector3(x * a, y * a, z * a) ;
 67     }
 68 
 69     Vector3 operator / (const float a) const
 70     {
 71         float oneOverA = 1 / a ;
 72         return Vector3(x * oneOverA, y * oneOverA, z * oneOverA) ;
 73     }
 74 
 75     Vector3 operator += (const Vector3 & a)
 76     {
 77         x += a.x ;
 78         y += a.y ;
 79         z+= a.z ;
 80 
 81         return *this ;
 82     }
 83 
 84     Vector3 operator -= (const Vector3 & a)
 85     {
 86         x -= a.x ;
 87         y -= a.y ;
 88         z -= a.z ;
 89 
 90         return *this ;
 91     }
 92 
 93     Vector3 operator *= (float a)
 94     {
 95         x *= a ;
 96         y *= a ;
 97         z *= a ;
 98 
 99         return *this ;
100     }
101 
102     Vector3 operator /= (float a)
103     {
104         float oneOverA = 1 / a ;
105         x *= oneOverA ;
106         y *= oneOverA ;
107         z *= oneOverA ;
108 
109         return *this ;
110     }
111 
112     void Normalize()
113     {
114         float magSq = x * x + y * y + z * z ;
115         if (magSq > 0)
116         {
117             float oneOverMsg = 1 / sqrt(magSq) ;
118             x *= oneOverMsg ;
119             y *= oneOverMsg ;
120             z *= oneOverMsg ;
121         }
122     }
123 
124     float operator * (const Vector3 & a) const
125     {
126         return x * a.x + y * a.y + z * a.z ;
127     }
128 
129     inline float VectorMag(const Vector3 & a)
130     {
131         return sqrt(a.x * a.x + a.y * a.y + a.z * a.z) ;
132     }
133 } ;
134 
135 inline Vector3 CrossProduct(const Vector3 & a, const Vector3 & b)
136 {
137     return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x) ;
138 }
139 
140 inline Vector3 operator * (float k, const Vector3 & v)
141 {
142     return Vector3(k * v.x, k * v.y, k * v.z) ;
143 }
144 
145 inline float Distance(const Vector3 & a, const Vector3 & b)
146 {
147     float dx = a.x - b.x ;
148     float dy = a.y - b.y ;
149     float dz = a.z - b.z ;
150 
151     return sqrt(dx * dx + dy * dy + dz * dz) ;
152 }
153 
154 extern const Vector3 & ZeroVector ;

 

posted @ 2015-07-13 14:03  MATU  阅读(587)  评论(0)    收藏  举报