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_ALROTATION_H_ 00013 #define _LIBALMATH_ALMATH_TYPES_ALROTATION_H_ 00014 00015 #include <vector> 00016 00017 namespace AL { 00018 namespace Math { 00019 00022 00030 00031 00032 00033 struct Rotation 00034 { 00038 float r1_c1; 00042 float r1_c2; 00046 float r1_c3; 00050 float r2_c1; 00054 float r2_c2; 00058 float r2_c3; 00062 float r3_c1; 00066 float r3_c2; 00070 float r3_c3; 00071 00074 00087 00088 Rotation(); 00089 00098 00112 00113 00114 00115 00128 00129 Rotation (const std::vector<float>& pFloats); 00130 00135 Rotation& operator*= (const Rotation& pRot2); 00136 00141 Rotation operator* (const Rotation& pRot2) const; 00142 00147 bool operator==(const Rotation& pRot2) const; 00148 00153 bool operator!=(const Rotation& pRot2) const; 00154 00165 bool isNear( 00166 const Rotation& pRot2, 00167 const float& pEpsilon=0.0001f) const; 00168 00175 Rotation transpose() const; 00176 00180 00187 00188 00189 00190 00191 float determinant() const; 00192 00200 static Rotation fromQuaternion( 00201 const float pA, 00202 const float pB, 00203 const float pC, 00204 const float pD); 00205 00206 00214 static Rotation fromAngleDirection( 00215 const float pAngle, 00216 const float pX, 00217 const float pY, 00218 const float pZ); 00219 00223 00229 00230 00231 static Rotation fromRotX(const float pRotX); 00232 00236 00242 00243 00244 static Rotation fromRotY(const float pRotY); 00245 00249 00255 00256 00257 static Rotation fromRotZ(const float pRotZ); 00258 00268 static Rotation from3DRotation( 00269 const float& pWX, 00270 const float& pWY, 00271 const float& pWZ); 00272 00276 00282 00283 std::vector<float> toVector() const; 00284 00285 }; // end struct 00286 00296 Rotation transpose(const Rotation& pRot); 00297 00298 00302 00309 00310 00311 00312 00313 00314 00315 float determinant(const Rotation& pRot); 00316 00317 00329 Rotation rotationFromQuaternion( 00330 const float pA, 00331 const float pB, 00332 const float pC, 00333 const float pD); 00334 00346 Rotation rotationFromAngleDirection( 00347 const float pAngle, 00348 const float pX, 00349 const float pY, 00350 const float pZ); 00351 00360 void applyRotation( 00361 const AL::Math::Rotation& pRot, 00362 float& pX, 00363 float& pY, 00364 float& pZ); 00365 00369 00375 00376 00377 00378 00379 00380 00381 Rotation rotationFromRotX(const float pRotX); 00382 00386 00392 00393 00394 00395 00396 00397 00398 Rotation rotationFromRotY(const float pRotY); 00399 00403 00408 00409 00410 00411 00412 00413 00414 Rotation rotationFromRotZ(const float pRotZ); 00415 00428 Rotation rotationFrom3DRotation( 00429 const float& pWX, 00430 const float& pWY, 00431 const float& pWZ); 00432 00433 } 00434 } 00435 #endif // _LIBALMATH_ALMATH_TYPES_ALROTATION_H_