libalmath  1.14.5
almath/types/altransform.h
00001 /*
00002  * Copyright (c) 2012 Aldebaran Robotics. All rights reserved.
00003  * Use of this source code is governed by a BSD-style license that can be
00004  * found in the COPYING file.
00005  */
00006 
00007 
00008 #pragma once
00009 #ifndef _LIBALMATH_ALMATH_TYPES_ALTRANSFORM_H_
00010 #define _LIBALMATH_ALMATH_TYPES_ALTRANSFORM_H_
00011 
00012 #include <vector>
00013 
00014 namespace AL {
00015   namespace Math {
00022     struct  Transform {
00023 
00025       float r1_c1, r1_c2, r1_c3, r1_c4;
00026       float r2_c1, r2_c2, r2_c3, r2_c4;
00027       float r3_c1, r3_c2, r3_c3, r3_c4;
00030 
00031 
00032 
00047 
00048       Transform();
00049 
00056 
00071       explicit Transform(const std::vector<float>& pFloats);
00072 
00076 
00091 
00092 
00093 
00094 
00095       Transform(
00096         const float& pPosX,
00097         const float& pPosY,
00098         const float& pPosZ);
00099 
00104       Transform& operator*= (const Transform& pT2);
00105 
00110       Transform operator* (const Transform& pT2) const;
00111 
00116       bool operator==(const Transform& pT2) const;
00117 
00122       bool operator!=(const Transform& pT2) const;
00123 
00134       bool isNear(
00135         const Transform& pT2,
00136         const float&     pEpsilon=0.0001f) const;
00137 
00150       bool isTransform(
00151           const float& pEpsilon=0.0001f) const;
00152 
00161       float norm() const;
00162 
00166 
00171 
00172 
00173 
00174 
00175       float determinant() const;
00176 
00180 
00184 
00185 
00190 
00191 
00192 
00193 
00194 
00195       Transform inverse() const;
00196 
00200 
00206 
00207 
00208       static Transform fromRotX(const float pRotX);
00209 
00213 
00221 
00222 
00223       static Transform fromRotY(const float pRotY);
00224 
00228 
00236 
00237 
00238       static Transform fromRotZ(const float pRotZ);
00239 
00240 
00250       static Transform from3DRotation(
00251         const float& pWX,
00252         const float& pWY,
00253         const float& pWZ);
00254 
00255 
00259 
00267 
00268 
00269 
00270 
00271       static Transform fromPosition(
00272         const float pX,
00273         const float pY,
00274         const float pZ);
00275 
00296       static Transform fromPosition(
00297         const float& pX,
00298         const float& pY,
00299         const float& pZ,
00300         const float& pWX,
00301         const float& pWY,
00302         const float& pWZ);
00303 
00312       Transform diff(const Transform& pT2) const;
00313 
00314 
00325       float distanceSquared(const Transform& pT2) const;
00326 
00327 
00338       float distance(const Transform& pT2) const;
00339 
00343 
00350 
00351       std::vector<float> toVector() const;
00352 
00353     }; // end struct
00354 
00362     void transformPreMultiply(
00363       const Transform& pT,
00364       Transform&       pTOut);
00365 
00376     float norm(const Transform& pT);
00377 
00378 
00382 
00389 
00390 
00391 
00392 
00393 
00394     void transformToFloatVector(
00395       const Transform&    pT,
00396       std::vector<float>& pTOut);
00397 
00401 
00409 
00410 
00411 
00412 
00413 
00414 
00415 
00416     std::vector<float> transformToFloatVector(
00417       const Transform& pT);
00418 
00419 
00423 
00427 
00428 
00429 
00430 
00431 
00432 
00433     float determinant(const Transform& pT);
00434 
00438 
00442 
00443 
00444 
00445 
00446 
00447 
00448     float determinant(const std::vector<float>& pFloats);
00449 
00453 
00458 
00459 
00464 
00465 
00466 
00467 
00468 
00469     void transformInverse(
00470       const Transform& pT,
00471       Transform&       pTOut);
00472 
00476 
00481 
00482 
00487 
00488 
00489 
00490 
00491 
00492 
00493 
00494     Transform transformInverse(const Transform& pT);
00495 
00496 
00500 
00507 
00508 
00509 
00510 
00511 
00512 
00513 
00514     Transform transformFromRotX(const float pRotX);
00515 
00519 
00526 
00527 
00528 
00529 
00530 
00531 
00532 
00533     Transform transformFromRotY(const float pRotY);
00534 
00538 
00545 
00546 
00547 
00548 
00549 
00550 
00551 
00552     Transform transformFromRotZ(const float pRotZ);
00553 
00554 
00567     Transform transformFrom3DRotation(
00568       const float& pWX,
00569       const float& pWY,
00570       const float& pWZ);
00571 
00575 
00582 
00583 
00584 
00585 
00586 
00587 
00588 
00589 
00590 
00591     Transform transformFromPosition(
00592       const float& pX,
00593       const float& pY,
00594       const float& pZ);
00595 
00618     Transform transformFromPosition(
00619       const float& pX,
00620       const float& pY,
00621       const float& pZ,
00622       const float& pWX,
00623       const float& pWY,
00624       const float& pWZ);
00625 
00626 
00633     void transformInvertInPlace(Transform& pT);
00634 
00635 
00639 
00644 
00645 
00650 
00651 
00652 
00653 
00654     Transform pinv(const Transform& pT);
00655 
00656 
00669     Transform transformDiff(
00670       const Transform& pT1,
00671       const Transform& pT2);
00672 
00685     float transformDistanceSquared(
00686       const Transform& pT1,
00687       const Transform& pT2);
00688 
00689 
00702     float transformDistance(
00703       const Transform& pT1,
00704       const Transform& pT2);
00705 
00706   } // end namespace Math
00707 } // end namespace AL
00708 #endif  // _LIBALMATH_ALMATH_TYPES_ALTRANSFORM_H_
 All Classes Namespaces Functions Variables