libalmath  1.12
almath/types/altransform.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_ALTRANSFORM_H_
00013 #define _LIBALMATH_ALMATH_TYPES_ALTRANSFORM_H_
00014 
00015 #include <vector>
00016 
00017 namespace AL {
00018   namespace Math {
00025     struct  Transform {
00026 
00028       float r1_c1, r1_c2, r1_c3, r1_c4;
00029       float r2_c1, r2_c2, r2_c3, r2_c4;
00030       float r3_c1, r3_c2, r3_c3, r3_c4;
00033 
00034 
00035 
00050 
00051       Transform();
00052 
00059 
00074       explicit Transform(const std::vector<float>& pFloats);
00075 
00079 
00094 
00095 
00096 
00097 
00098       Transform(
00099         const float& pPosX,
00100         const float& pPosY,
00101         const float& pPosZ);
00102 
00107       Transform& operator*= (const Transform& pT2);
00108 
00113       Transform operator* (const Transform& pT2) const;
00114 
00119       bool operator==(const Transform& pT2) const;
00120 
00125       bool operator!=(const Transform& pT2) const;
00126 
00137       bool isNear(
00138         const Transform& pT2,
00139         const float&     pEpsilon=0.0001f) const;
00140 
00153       bool isTransform(
00154           const float& pEpsilon=0.0001f) const;
00155 
00164       float norm() const;
00165 
00169 
00174 
00175 
00176 
00177 
00178       float determinant() const;
00179 
00183 
00187 
00188 
00193 
00194 
00195 
00196 
00197 
00198       Transform inverse() const;
00199 
00203 
00209 
00210 
00211       static Transform fromRotX(const float pRotX);
00212 
00216 
00224 
00225 
00226       static Transform fromRotY(const float pRotY);
00227 
00231 
00239 
00240 
00241       static Transform fromRotZ(const float pRotZ);
00242 
00243 
00253       static Transform from3DRotation(
00254         const float& pWX,
00255         const float& pWY,
00256         const float& pWZ);
00257 
00258 
00262 
00270 
00271 
00272 
00273 
00274       static Transform fromPosition(
00275         const float pX,
00276         const float pY,
00277         const float pZ);
00278 
00299       static Transform fromPosition(
00300         const float& pX,
00301         const float& pY,
00302         const float& pZ,
00303         const float& pWX,
00304         const float& pWY,
00305         const float& pWZ);
00306 
00315       Transform diff(const Transform& pT2) const;
00316 
00317 
00328       float distanceSquared(const Transform& pT2) const;
00329 
00330 
00341       float distance(const Transform& pT2) const;
00342 
00346 
00353 
00354       std::vector<float> toVector() const;
00355 
00356     }; // end struct
00357 
00365     void transformPreMultiply(
00366       const Transform& pT,
00367       Transform&       pTOut);
00368 
00379     float norm(const Transform& pT);
00380 
00381 
00385 
00392 
00393 
00394 
00395 
00396 
00397     void transformToFloatVector(
00398       const Transform&    pT,
00399       std::vector<float>& pTOut);
00400 
00404 
00412 
00413 
00414 
00415 
00416 
00417 
00418 
00419     std::vector<float> transformToFloatVector(
00420       const Transform& pT);
00421 
00422 
00426 
00430 
00431 
00432 
00433 
00434 
00435 
00436     float determinant(const Transform& pT);
00437 
00441 
00445 
00446 
00447 
00448 
00449 
00450 
00451     float determinant(const std::vector<float>& pFloats);
00452 
00456 
00461 
00462 
00467 
00468 
00469 
00470 
00471 
00472     void transformInverse(
00473       const Transform& pT,
00474       Transform&       pTOut);
00475 
00479 
00484 
00485 
00490 
00491 
00492 
00493 
00494 
00495 
00496 
00497     Transform transformInverse(const Transform& pT);
00498 
00499 
00503 
00510 
00511 
00512 
00513 
00514 
00515 
00516 
00517     Transform transformFromRotX(const float pRotX);
00518 
00522 
00529 
00530 
00531 
00532 
00533 
00534 
00535 
00536     Transform transformFromRotY(const float pRotY);
00537 
00541 
00548 
00549 
00550 
00551 
00552 
00553 
00554 
00555     Transform transformFromRotZ(const float pRotZ);
00556 
00557 
00570     Transform transformFrom3DRotation(
00571       const float& pWX,
00572       const float& pWY,
00573       const float& pWZ);
00574 
00578 
00585 
00586 
00587 
00588 
00589 
00590 
00591 
00592 
00593 
00594     Transform transformFromPosition(
00595       const float& pX,
00596       const float& pY,
00597       const float& pZ);
00598 
00621     Transform transformFromPosition(
00622       const float& pX,
00623       const float& pY,
00624       const float& pZ,
00625       const float& pWX,
00626       const float& pWY,
00627       const float& pWZ);
00628 
00629 
00636     void transformInvertInPlace(Transform& pT);
00637 
00638 
00642 
00647 
00648 
00653 
00654 
00655 
00656 
00657     Transform pinv(const Transform& pT);
00658 
00659 
00672     Transform transformDiff(
00673       const Transform& pT1,
00674       const Transform& pT2);
00675 
00688     float transformDistanceSquared(
00689       const Transform& pT1,
00690       const Transform& pT2);
00691 
00692 
00705     float transformDistance(
00706       const Transform& pT1,
00707       const Transform& pT2);
00708 
00709   } // end namespace Math
00710 } // end namespace AL
00711 #endif  // _LIBALMATH_ALMATH_TYPES_ALTRANSFORM_H_
 All Classes Namespaces Functions Variables