| 123456789101112131415161718192021222324252627282930 |
- #pragma once
- #include "helpler_funtions.h"
- #include "math.h"
- /**
- * @brief 使用四元数构造轴角向量
- *
- * @param Q 四元数
- * @param axisAngle 轴角
- */
- static inline void AxisAngle_ByQuaternion(const float Q[4], float axisAngle[3])
- {
- float q_imag[3] = {Q[1], Q[2], Q[3]};
- float q_imag_mag = sqrtf(q_imag[0] * q_imag[0] + q_imag[1] * q_imag[1] +
- q_imag[2] * q_imag[2]);
- float r;
- if (q_imag_mag > 1e-10)
- {
- r = 2 * atan2f(q_imag_mag, Q[0]) / q_imag_mag;
- }
- else
- {
- r = 2 * sign(Q[0]);
- }
- for (int i = 0; i < 3; ++i)
- {
- axisAngle[i] = r * q_imag[i];
- }
- }
|