gpt4 book ai didi

javascript - 铯土 : Show satellites in ECI coordinate system

转载 作者:行者123 更新时间:2023-11-29 17:44:41 25 4
gpt4 key购买 nike

我正在使用 Cesium Earth 开发卫星跟踪应用程序。

现在,卫星坐标在地球固定系统中并且工作正常。

但是,我还需要在 ECI 坐标系中显示它们,为此我必须让地球旋转。

怎么做?

最佳答案

我首先要提到的是,Cesium 经常使用名称 ICRF 作为 ECI 的同义词或替代词,因此如果您正在搜索文档,您会更幸运地找到 ICRF。

CZML Sandcastle Demo显示了一些绕地球运行的卫星,其路径在惯性系中显示。这是 done in the CZML file通过做两件事:

  • position部分设置值"referenceFrame":"INERTIAL"
  • 所有实际位置 值本身都必须以惯性而非固定坐标系表示。

你可以看出路径是惯性的,因为它是一个椭圆。如果它以固定地球的方式显示,它看起来就像一个螺旋,疯狂地绕着地球旋转。随着时间的推移,轨道椭圆当然应该保持在恒星的惯性系中,而不是固定在地球上任何一个陆地的上方。

However, I need to show them also in ECI coordinate frame and for that I have to make the Earth rotate.

这是两个不同的问题。在铯中,地球的固定坐标系已经相对于 ICRF 坐标系(在内部)旋转。但默认情况下,相机保持地球固定 (ECF)。因此用户看到地球看起来是静止的,而星星和卫星轨道似乎绕着地球旋转。这实际上是一种查看系统的有效方式,就好像相机只是卡在一根连接地球的非常高的杆子上,扫过不同的轨道。

为了让地球随着时间的推移在屏幕上视觉上旋转,您必须更新相机的位置以使其在 ICRF 框架中保持静止,而不是默认的固定框架。

Camera Sandcastle Demo有一个活生生的例子。单击下拉菜单并从列表中选择 View in ICRF。此代码从左侧实时编辑窗口的第 119 行开始:

function icrf(scene, time) {
if (scene.mode !== Cesium.SceneMode.SCENE3D) {
return;
}

var icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);
if (Cesium.defined(icrfToFixed)) {
var camera = viewer.camera;
var offset = Cesium.Cartesian3.clone(camera.position);
var transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);
camera.lookAtTransform(transform, offset);
}
}

viewer.scene.postUpdate.addEventListener(icrf);

这段代码只是随着时间的推移更新相机的位置,这样相机在 ICRF 坐标系中看起来是静止的,有恒星和卫星轨道,而地球本身在旋转。

关于javascript - 铯土 : Show satellites in ECI coordinate system,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com