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