CESIUM:如何从俯仰、滚转、航向为飞机制作动画?

Flo*_* Du 5 quaternions euler-angles cesium czml

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

我想在 CesiumJS 中代表飞机。

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

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

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

谢谢你的建议

ema*_*key 3

我自己还没有尝试过,但应该可以仅使用铯附带的数学函数将飞机航向/俯仰/滚动(在已知飞机位置的局部轴上)转换为地球固定的四元数。

这里需要两种转换,一种是将航向-俯仰-横滚转换为四元数,另一种是将局部轴转换为地球固定轴。

  1. 将简单的 header-pitch-roll 转换为四元数,这是通过Quaternion.fromHeadingPitchRoll完成的。这是最简单的部分,现在已经完成了。保存此结果供以后使用。

现在我们需要本地到地球固定。

  1. 使用Transforms.eastNorthUpToFixedFrame。这考虑了位置,但以 Matrix4 的形式为您提供了超出您需要的内容。

  2. 使用Matrix4.getMatrix3从 Matrix4 获取旋转。这会去掉变换偏移(地球到飞机)并生成一个仅包含旋转偏移(和比例)的 Matrix3,但这应该只是我们在上一步中获得该矩阵的位置给出的恒等比例,因此我们可以放心地认为这仅作为旋转)。

  3. 使用Quaternion.fromRotationMatrix将 Matrix3 转换为四元数。

现在您有 2 个四元数,一个来自步骤 1,另一个来自步骤 4。

  1. 使用Quaternion.multiply将两个四元数相乘。这里的结果应该就是你需要的答案。

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