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_TOOLS_ALTRANSFORMHELPERS_H_ 00013 #define _LIBALMATH_ALMATH_TOOLS_ALTRANSFORMHELPERS_H_ 00014 00015 #include <almath/types/alposition3d.h> 00016 #include <almath/types/alposition6d.h> 00017 #include <almath/types/alrotation.h> 00018 #include <almath/types/alrotation3d.h> 00019 #include <almath/types/alvelocity6d.h> 00020 #include <almath/types/altransform.h> 00021 #include <almath/types/alaxismask.h> 00022 #include <almath/types/alpose2d.h> 00023 00024 namespace AL { 00025 namespace Math { 00026 00027 00031 00040 00041 00042 00043 00044 00045 00046 00047 void transformLogarithmInPlace( 00048 const Transform& pT, 00049 Velocity6D& pVel); 00050 00051 00055 00064 00065 00066 00067 00068 00069 00070 Velocity6D transformLogarithm(const Transform& pT); 00071 00072 00076 00080 00081 00082 00083 00084 00085 00086 Transform velocityExponential(const Velocity6D& pVel); 00087 00088 // TODO: Add to doc or set private. 00089 void velocityExponentialInPlace( 00090 const Velocity6D& pVel, 00091 Transform& pT); 00092 00094 00122 00123 00124 00125 00126 00127 00128 00129 00130 void changeReferenceVelocity6D( 00131 const Transform& pT, 00132 const Velocity6D& pVelIn, 00133 Velocity6D& pVelOut); 00134 00136 00164 00165 00166 00167 00168 00169 00170 00171 00172 void changeReferencePosition6D( 00173 const Transform& pT, 00174 const Position6D& pPosIn, 00175 Position6D& pPosOut); 00176 00177 // TODO: rename argument. 00178 void changeReferencePosition3DInPlace( 00179 const Transform& pT, 00180 Position3D& pPosOut); 00181 00182 // TODO: rename argument. 00183 void changeReferenceTransposePosition3DInPlace( 00184 const Transform& pT, 00185 Position3D& pPosOut); 00186 00188 00207 00208 00209 00210 00211 00212 00213 00214 00215 void changeReferencePosition3D( 00216 const Transform& pT, 00217 const Position3D& pPosIn, 00218 Position3D& pPosOut); 00219 00221 00233 00234 00235 00236 00237 00238 00239 00240 void changeReferenceTransposePosition3D( 00241 const Transform& pT, 00242 const Position3D& pPosIn, 00243 Position3D& pPosOut); 00244 00246 00258 00259 00260 00261 00262 00263 00264 00265 void changeReferenceTransform( 00266 const Transform& pT, 00267 const Transform& pTIn, 00268 Transform& pTOut); 00269 00271 00283 00284 00285 00286 00287 00288 00289 00290 void changeReferenceTransposeTransform( 00291 const Transform& pT, 00292 const Transform& pTIn, 00293 Transform& pTOut); 00294 00295 00297 00325 00326 00327 00328 00329 00330 00331 00332 00333 void changeReferenceTransposeVelocity6D( 00334 const Transform& pT, 00335 const Velocity6D& pVelIn, 00336 Velocity6D& pVelOut); 00337 00339 00367 00368 00369 00370 00371 00372 00373 00374 00375 void changeReferenceTransposePosition6D( 00376 const Transform& pT, 00377 const Position6D& pPosIn, 00378 Position6D& pPosOut); 00379 00390 void transformMeanInPlace( 00391 const Transform& pTIn1, 00392 const Transform& pTIn2, 00393 const float& pVal, 00394 Transform& pTOut); 00395 00407 Transform transformMean( 00408 const Transform& pTIn1, 00409 const Transform& pTIn2, 00410 const float& pVal = 0.5f); 00411 00414 00421 00422 00423 00424 00425 00426 00427 00428 00429 00430 Transform transformFromRotationPosition3D( 00431 const Rotation& pRot, 00432 const float& pX, 00433 const float& pY, 00434 const float& pZ); 00435 00438 00444 00445 00446 00447 00448 00449 00450 00451 Transform transformFromRotationPosition3D( 00452 const Rotation& pRot, 00453 const Position3D& pPos); 00454 00457 00468 00469 00470 00471 00472 void transformFromPosition3DInPlace( 00473 const Position3D& pPosition, 00474 Transform& pTransform); 00475 00479 00490 00491 00492 00493 00494 00495 00496 00497 Transform transformFromPosition3D(const Position3D& pPosition); 00498 00502 00513 00514 00515 00516 00517 void transformFromRotationInPlace( 00518 const Rotation& pRotation, 00519 Transform& pTransform); 00520 00522 00533 00534 00535 00536 00537 00538 00539 Transform transformFromRotation(const Rotation& pRotation); 00540 00547 void rotationFromTransformInPlace( 00548 const Transform& pTransform, 00549 Rotation& pRotation); 00550 00559 Rotation rotationFromTransform(const Transform& pTransform); 00560 00569 Rotation3D rotation3DFromRotation(const Rotation& pRotation); 00570 00577 void position6DFromTransformInPlace( 00578 const Transform& pT, 00579 Position6D& pPos); 00580 00587 Position6D position6DFromTransform(const Transform& pT); 00588 00595 void transformFromPose2DInPlace( 00596 const Pose2D& pPose, 00597 Transform& pT); 00598 00605 Transform transformFromPose2D(const Pose2D& pPose); 00606 00613 void pose2DFromTransformInPlace( 00614 const Transform& pT, 00615 Pose2D& pPos); 00616 00623 Pose2D pose2DFromTransform(const Transform& pT); 00624 00631 Transform transformFromRotation3D(const Rotation3D& pRotation); 00632 00639 Transform transformFromPosition6D(const Position6D& pPosition6D); 00640 00650 void position6DFromTransformDiffInPlace( 00651 const Transform& pCurrent, 00652 const Transform& pTarget, 00653 Position6D& result); 00654 00664 Position6D position6DFromTransformDiff( 00665 const Transform& pCurrent, 00666 const Transform& pTarget); 00667 00671 00685 00686 00687 00688 00689 void position3DFromTransformInPlace( 00690 const Transform& pT, 00691 Position3D& pPos); 00692 00696 00710 00711 00712 00713 00714 Position3D position3DFromTransform(const Transform& pT); 00715 00716 00724 Rotation3D rotation3DFromTransform(const Transform& pT); 00725 00734 void transformFromRotVecInPlace( 00735 const int pAxis, 00736 const float pTheta, 00737 const Position3D& pPos, 00738 Transform& pT); 00739 00748 Transform transformFromRotVec( 00749 const int pAxis, 00750 const float pTheta, 00751 const Position3D& pPos); 00752 00753 00760 void transformFromRotVecInPlace( 00761 const Position3D& pPos, 00762 Transform& pT); 00763 00770 Transform transformFromRotVec(const Position3D& pPos); 00771 00777 00780 Transform transformFromRotVec( 00781 const int& pAxis, 00782 const float& pTheta); 00783 00784 Position3D operator*( 00785 const Transform& pT, 00786 const Position3D& pPos); 00787 00788 Transform& operator+=( 00789 Transform& pT, 00790 const Position3D& pPos); 00791 00798 Transform axisRotationProjection( 00799 const Position3D& pPos, 00800 const Transform& pT); 00801 00809 Rotation axisRotationProjection( 00810 const Position3D& pAxis, 00811 const Rotation& pRot); 00812 00813 00820 void axisRotationProjectionInPlace( 00821 const Position3D& pPos, 00822 Transform& pT); 00823 00830 void axisRotationProjectionInPlace( 00831 const Position3D& pPos, 00832 Rotation& pRot); 00833 00834 00835 void orthogonalSpace( 00836 const Position3D& pPos, 00837 Transform& pTOut); 00838 00839 Transform orthogonalSpace(const Position3D& pPos); 00840 00841 } // namespace Math 00842 } // namespace AL 00843 #endif // _LIBALMATH_ALMATH_TOOLS_ALTRANSFORMHELPERS_H_