1 #include <unsupported/Eigen/EulerAngles>
2 #include <iostream>
3
4 using namespace Eigen;
5
main()6 int main()
7 {
8 // A common Euler system by many armies around the world,
9 // where the first one is the azimuth(the angle from the north -
10 // the same angle that is show in compass)
11 // and the second one is elevation(the angle from the horizon)
12 // and the third one is roll(the angle between the horizontal body
13 // direction and the plane ground surface)
14 // Keep remembering we're using radian angles here!
15 typedef EulerSystem<-EULER_Z, EULER_Y, EULER_X> MyArmySystem;
16 typedef EulerAngles<double, MyArmySystem> MyArmyAngles;
17
18 MyArmyAngles vehicleAngles(
19 3.14/*PI*/ / 2, /* heading to east, notice that this angle is counter-clockwise */
20 -0.3, /* going down from a mountain */
21 0.1); /* slightly rolled to the right */
22
23 // Some Euler angles representation that our plane use.
24 EulerAnglesZYZd planeAngles(0.78474, 0.5271, -0.513794);
25
26 MyArmyAngles planeAnglesInMyArmyAngles = MyArmyAngles::FromRotation<true, false, false>(planeAngles);
27
28 std::cout << "vehicle angles(MyArmy): " << vehicleAngles << std::endl;
29 std::cout << "plane angles(ZYZ): " << planeAngles << std::endl;
30 std::cout << "plane angles(MyArmy): " << planeAnglesInMyArmyAngles << std::endl;
31
32 // Now lets rotate the plane a little bit
33 std::cout << "==========================================================\n";
34 std::cout << "rotating plane now!\n";
35 std::cout << "==========================================================\n";
36
37 Quaterniond planeRotated = AngleAxisd(-0.342, Vector3d::UnitY()) * planeAngles;
38
39 planeAngles = planeRotated;
40 planeAnglesInMyArmyAngles = MyArmyAngles::FromRotation<true, false, false>(planeRotated);
41
42 std::cout << "new plane angles(ZYZ): " << planeAngles << std::endl;
43 std::cout << "new plane angles(MyArmy): " << planeAnglesInMyArmyAngles << std::endl;
44
45 return 0;
46 }
47