libalmath  1.12
almath/types/alrotation.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_ALROTATION_H_
00013 #define _LIBALMATH_ALMATH_TYPES_ALROTATION_H_
00014 
00015 #include <vector>
00016 
00017 namespace AL {
00018   namespace Math {
00019 
00022 
00030 
00031 
00032 
00033     struct Rotation
00034     {
00038       float r1_c1;
00042       float r1_c2;
00046       float r1_c3;
00050       float r2_c1;
00054       float r2_c2;
00058       float r2_c3;
00062       float r3_c1;
00066       float r3_c2;
00070       float r3_c3;
00071 
00074 
00087 
00088       Rotation();
00089 
00098 
00112 
00113 
00114 
00115 
00128 
00129       Rotation (const std::vector<float>& pFloats);
00130 
00135       Rotation& operator*= (const Rotation& pRot2);
00136 
00141       Rotation operator* (const Rotation& pRot2) const;
00142 
00147       bool operator==(const Rotation& pRot2) const;
00148 
00153       bool operator!=(const Rotation& pRot2) const;
00154 
00165       bool isNear(
00166         const Rotation& pRot2,
00167         const float&    pEpsilon=0.0001f) const;
00168 
00175       Rotation transpose() const;
00176 
00180 
00187 
00188 
00189 
00190 
00191       float determinant() const;
00192 
00200       static Rotation fromQuaternion(
00201         const float pA,
00202         const float pB,
00203         const float pC,
00204         const float pD);
00205 
00206 
00214       static Rotation fromAngleDirection(
00215         const float pAngle,
00216         const float pX,
00217         const float pY,
00218         const float pZ);
00219 
00223 
00229 
00230 
00231       static Rotation fromRotX(const float pRotX);
00232 
00236 
00242 
00243 
00244       static Rotation fromRotY(const float pRotY);
00245 
00249 
00255 
00256 
00257       static Rotation fromRotZ(const float pRotZ);
00258 
00268       static Rotation from3DRotation(
00269         const float& pWX,
00270         const float& pWY,
00271         const float& pWZ);
00272 
00276 
00282 
00283       std::vector<float> toVector() const;
00284 
00285     }; // end struct
00286 
00296     Rotation transpose(const Rotation& pRot);
00297 
00298 
00302 
00309 
00310 
00311 
00312 
00313 
00314 
00315     float determinant(const Rotation& pRot);
00316 
00317 
00329     Rotation rotationFromQuaternion(
00330       const float pA,
00331       const float pB,
00332       const float pC,
00333       const float pD);
00334 
00346     Rotation rotationFromAngleDirection(
00347       const float pAngle,
00348       const float pX,
00349       const float pY,
00350       const float pZ);
00351 
00360     void applyRotation(
00361       const AL::Math::Rotation& pRot,
00362       float&                    pX,
00363       float&                    pY,
00364       float&                    pZ);
00365 
00369 
00375 
00376 
00377 
00378 
00379 
00380 
00381     Rotation rotationFromRotX(const float pRotX);
00382 
00386 
00392 
00393 
00394 
00395 
00396 
00397 
00398     Rotation rotationFromRotY(const float pRotY);
00399 
00403 
00408 
00409 
00410 
00411 
00412 
00413 
00414     Rotation rotationFromRotZ(const float pRotZ);
00415 
00428     Rotation rotationFrom3DRotation(
00429       const float& pWX,
00430       const float& pWY,
00431       const float& pWZ);
00432 
00433   }
00434 }
00435 #endif  // _LIBALMATH_ALMATH_TYPES_ALROTATION_H_
 All Classes Namespaces Functions Variables