libalmath
1.14.5
|
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_