1 #ifndef GALAXIS_MATH_HPP
2 #define GALAXIS_MATH_HPP
26 double cy = cos(e.
yaw * 0.5);
27 double sy = sin(e.
yaw * 0.5);
28 double cp = cos(e.
pitch * 0.5);
29 double sp = sin(e.
pitch * 0.5);
30 double cr = cos(e.
roll * 0.5);
31 double sr = sin(e.
roll * 0.5);
34 q.
w = cr * cp * cy + sr * sp * sy;
35 q.
x = sr * cp * cy - cr * sp * sy;
36 q.
y = cr * sp * cy + sr * cp * sy;
37 q.
z = cr * cp * sy - sr * sp * cy;
46 double sinr_cosp = 2 * (q.
w * q.
x + q.
y * q.
z);
47 double cosr_cosp = 1 - 2 * (q.
x * q.
x + q.
y * q.
y);
48 angles.
roll = std::atan2(sinr_cosp, cosr_cosp);
51 double sinp = 2 * (q.
w * q.
y - q.
z * q.
x);
52 if (std::abs(sinp) >= 1)
53 angles.
pitch = std::copysign(M_PI / 2, sinp);
55 angles.
pitch = std::asin(sinp);
58 double siny_cosp = 2 * (q.
w * q.
z + q.
x * q.
y);
59 double cosy_cosp = 1 - 2 * (q.
y * q.
y + q.
z * q.
z);
60 angles.
yaw = std::atan2(siny_cosp, cosy_cosp);