quaternions - 铯 : How to animate an aircraft from pitch, 滚动,标题?

标签 quaternions cesium euler-angles czml

我有包含位置(纬度、经度、高度)和方向(俯仰、滚动、航向)随时间变化的飞行数据。

我想在 CesiumJS 中代表飞机。

我试图从飞行数据创建 CZML 文件。一切都很适合这个职位。但 CZML 格式仅支持基于四元数的方向 在地球固定轴的引用。
这意味着我必须为每个位置、俯仰、滚动、航向预处理这个四元数,以便编写 CZML。

你认为我应该实现这个四元数计算(不是直接的)?

或者我应该使用另一种解决方案来使用允许我直接使用俯仰、滚转、航向值的铯函数吗?。在这种情况下,我想知道可以使用哪种格式将我的飞行数据传输到 Cesium。

谢谢你的建议

最佳答案

我自己没有尝试过,但是应该可以将飞机航向/俯仰/滚转(在已知飞机位置的局部轴上)转换为地球固定四元数,仅使用 Cesium 附带的数学函数。
这里需要两个转换,一个是四元数的航向-俯仰-滚转,另一个是地球固定的局部轴。

  • 将简单的heading-pitch-roll 转换为Quaternion,这是通过Quaternion.fromHeadingPitchRoll 完成的.这是最简单的部分,并且已经完成。保存此结果以备后用。

  • 现在我们需要本地到地球固定。
  • 使用 Transforms.eastNorthUpToFixedFrame .这将位置考虑在内,但以 Matrix4 的形式为您提供超出您需要的更多信息。
  • 使用 Matrix4.getMatrix3 从 Matrix4 中获取旋转.这剥离了变换偏移量(地对飞机)并产生了一个只包含旋转偏移量(和比例尺,但这应该只是我们在上一步中获得这个矩阵的地方给定的单位比例尺的 Matrix3,所以我们可以放心地认为这只是旋转)。
  • 使用 Quaternion.fromRotationMatrix将您的 Matrix3 转换为四元数。

  • 现在您有 2 个四元数,一个来自第 1 步,另一个来自第 4 步。
  • 使用 Quaternion.multiply 将两个四元数相乘.这里的结果应该是您需要的答案。

  • 我希望我的数学是正确的。祝你好运!

    关于quaternions - 铯 : How to animate an aircraft from pitch, 滚动,标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43389069/

    相关文章:

    Cesium:CZML 的流媒体示例

    c++ - 四元数到达万向节锁

    MATLABsolve() 无法求解特定值的三角矩阵

    3d - 将 Unity 转换转换为 THREE.js 旋转

    gis - 获取 Cesium Map 的中心

    Cesium:主题化信息框

    opengl - 如何根据前向矢量计算俯仰和偏航值

    math - 结合不同轴心点的四元数

    c++ - 如何从 X Y Z 旋转中找到四元数的 vector

    c++ - glm::quat 为什么 x,y,z,w 分量的顺序是混合的