quaternion.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include "matrix.h"
  3. /// 四元数的简单构造
  4. void Quaternion(float q[4]);
  5. /// 四元数归一化
  6. void Quaternion_Normalize(float Q[4]);
  7. /// 四元数规范化
  8. void Quaternion_Canonicalize(float Q[4]);
  9. /// 使用旋转矩阵构造四元数
  10. void Quaternion_ByDcm(const float dcm[3][3], float Q[4]);
  11. /// 使用欧拉角构造四元数
  12. void Quaternion_ByEuler(float yaw, float pitch, float roll, float Q[4]);
  13. /// 使用旋转矩阵构造四元数
  14. void Quaternion_ByDcm(const float R[3][3], float Q[4]);
  15. /// 使用欧拉角构造四元数
  16. void Quaternion_ByEuler(float yaw, float pitch, float roll, float Q[4]);
  17. /// 使用轴角构造四元数
  18. void Quaternion_ByAxisAngle(const float anxisAngle[3], float Q[4]);
  19. /// 使用向量, 构造由 Vsrc->Vdst 的最短旋转四元数
  20. void Quaternion_ByTwoVectors(const float Vsrc[3], const float Vdst[3], float Q[4]);
  21. /// 四元数乘法
  22. void Quaternion_Multiplication(const float Q1[4], const float Q2[4], float Q[4]);
  23. /// 四元数求逆
  24. void Quaternion_Inversed(const float Q[4], float Q_inv[4]);
  25. /// 将四元数求逆
  26. void Quaternion_Invert(float Q[4]);
  27. /// 通过 frame1 的角速率求四元数 q21 的微分
  28. void Quaternion_Derivative1(const float q21[4], const float angle_rate1[3], float q21_deriv[4]);
  29. /// 通过 frame2 的角速率求四元数 q21 的微分
  30. void Quaternion_Derivative2(const float q21[4], const float angle_rate2[3], float q21_deriv[4]);
  31. /// 四元数通过轴角进行旋转
  32. void Quaternion_RotateByAxisAngle(const float axisAngle[3], float Q[4]);
  33. /// 通过四元数将 frame1 下的 V1 转到 frame2 下的 V2
  34. void Quaternion_Conj(const float Q[4], const float V1[3], float V2[3]);
  35. /// 通过四元数将 frame2 下的 V2 转到 frame1 下的 V1
  36. void Quaternion_ConjInv(const float Q[4], const float V2[3], float V1[3]);
  37. /// 通过四元数求其对应的旋转矩阵的 Z 轴
  38. void Quaternion_GetDcmZ(const float Q[4], float dcm_z[3]);