25 (*this)(0) = std::sqrt(std::max(0.0, 1 + M(0, 0) + M(1, 1) + M(2, 2))) / 2;
26 (*this)(1) = std::sqrt(std::max(0.0, 1 + M(0, 0) - M(1, 1) - M(2, 2))) / 2;
27 (*this)(2) = std::sqrt(std::max(0.0, 1 - M(0, 0) + M(1, 1) - M(2, 2))) / 2;
28 (*this)(3) = std::sqrt(std::max(0.0, 1 - M(0, 0) - M(1, 1) + M(2, 2))) / 2;
29 (*this)(1) = std::abs(M(2, 1) - M(1, 2)) > 0? std::copysign((*
this)(1), M(2, 1) - M(1, 2)): 0.0;
30 (*this)(2) = std::abs(M(0, 2) - M(2, 0)) > 0? std::copysign((*
this)(2), M(0, 2) - M(2, 0)): 0.0;
31 (*this)(3) = std::abs(M(1, 0) - M(0, 1)) > 0? std::copysign((*
this)(3), M(1, 0) - M(0, 1)): 0.0;
141 mat(0, 0) = 1 - 2 * (rot(2) * rot(2) + rot(3) * rot(3));
142 mat(0, 1) = 2 * (-rot(0) * rot(3) + rot(1) * rot(2));
143 mat(0, 2) = 2 * (rot(0) * rot(2) + rot(1) * rot(3));
144 mat(1, 0) = 2 * (rot(0) * rot(3) + rot(1) * rot(2));
145 mat(1, 1) = 1 - 2 * (rot(1) * rot(1) + rot(3) * rot(3));
146 mat(1, 2) = 2 * (-rot(0) * rot(1) + rot(2) * rot(3));
147 mat(2, 0) = 2 * (-rot(0) * rot(2) + rot(1) * rot(3));
148 mat(2, 1) = 2 * (rot(0) * rot(1) + rot(2) * rot(3));
149 mat(2, 2) = 1 - 2 * (rot(1) * rot(1) + rot(2) * rot(2));