libalmath  1.12
almath/types/alposition3d.h
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_
 All Classes Namespaces Functions Variables