libalmath
1.12
|
00001 /* 00002 ** Author(s): 00003 ** - Chris Kilner 00004 ** - Cyrille Collette 00005 ** - David Gouaillier 00006 ** 00007 ** Copyright (C) 2011 Aldebaran Robotics 00008 */ 00009 00010 00011 #pragma once 00012 #ifndef _LIBALMATH_ALMATH_TYPES_ALPOSITION3D_H_ 00013 #define _LIBALMATH_ALMATH_TYPES_ALPOSITION3D_H_ 00014 00015 #include <vector> 00016 00017 namespace AL { 00018 namespace Math { 00019 00026 struct Position3D { 00028 float x; 00030 float y; 00032 float z; 00033 00036 00049 00050 Position3D(); 00051 00054 00067 00068 00069 00070 explicit Position3D(float pInit); 00071 00074 00087 00088 00089 00090 00091 Position3D( 00092 float pX, 00093 float pY, 00094 float pZ); 00095 00098 00111 00112 00113 00114 00115 00116 Position3D (const std::vector<float>& pFloats); 00117 00122 Position3D operator+ (const Position3D& pPos2) const; 00123 00128 Position3D operator- (const Position3D& pPos2) const; 00129 00133 Position3D operator+ () const; 00134 00138 Position3D operator- () const; 00139 00144 Position3D& operator+= (const Position3D& pPos2); 00145 00150 Position3D& operator-= (const Position3D& pPos2); 00151 00156 bool operator== (const Position3D& pPos2) const; 00157 00162 bool operator!= (const Position3D& pPos2) const; 00163 00168 Position3D operator* (float pVal) const; 00169 00174 Position3D operator/ (float pVal) const; 00175 00180 Position3D& operator*= (float pVal); 00181 00186 Position3D& operator/= (float pVal); 00187 00198 float distanceSquared(const Position3D& pPos2) const; 00199 00210 float distance(const Position3D& pPos2) const; 00211 00222 bool isNear( 00223 const Position3D& pPos2, 00224 const float& pEpsilon=0.0001f) const; 00225 00234 float norm() const; 00235 00244 Position3D normalize() const; 00245 00256 float dotProduct(const Position3D& pPos2) const; 00257 00270 Position3D crossProduct(const Position3D& pPos2) const; 00271 00275 std::vector<float> toVector() const; 00276 }; 00277 00278 // TODO : Need this ? 00279 Position3D operator* ( 00280 const float pM, 00281 const Position3D& pPos1); 00282 00283 // Does it make sense to define 2.0 / Position3D() ?? 00284 Position3D operator/ ( 00285 const float pM, 00286 const Position3D& pPos1); 00287 00299 float distanceSquared( 00300 const Position3D& pPos1, 00301 const Position3D& pPos2); 00302 00314 float distance( 00315 const Position3D& pPos1, 00316 const Position3D& pPos2); 00317 00328 float norm(const Position3D& pPos); 00329 00340 Position3D normalize(const Position3D& pPos); 00341 00352 float dotProduct( 00353 const Position3D& pPos1, 00354 const Position3D& pPos2); 00355 00368 Position3D crossProduct( 00369 const Position3D& pPos1, 00370 const Position3D& pPos2); 00371 00385 void crossProduct( 00386 const Position3D& pPos1, 00387 const Position3D& pPos2, 00388 Position3D& pRes); 00389 00390 } // end namespace math 00391 } // end namespace al 00392 #endif // _LIBALMATH_ALMATH_TYPES_ALPOSITION3D_H_