Java 如何将纬度和经度转换为方向(偏航、俯仰、滚动)

Java 如何将纬度和经度转换为方向(偏航、俯仰、滚动),java,trigonometry,Java,Trigonometry,我在WorldWind中有一个3D飞机模型,一个在OpenGL Java上运行的3D地球模型。我用数据库(包括纬度、经度和高度)中的数据更新此模型的位置。从当前位置和更新位置获取航向信息(偏航、俯仰、横滚)的方法是什么?我计算出来,用经纬度和高度将它们转换为ECEF坐标。然后找到了方向 d(x,y,z) = (Destination(x,y,z) - Origin(x,y,z)) double yaw = -Math.atan2(dx,-dz);

我在WorldWind中有一个3D飞机模型,一个在OpenGL Java上运行的3D地球模型。我用数据库(包括纬度、经度和高度)中的数据更新此模型的位置。从当前位置和更新位置获取航向信息(偏航、俯仰、横滚)的方法是什么?

我计算出来,用经纬度和高度将它们转换为ECEF坐标。然后找到了方向

        d(x,y,z) = (Destination(x,y,z) - Origin(x,y,z))

        double yaw   = -Math.atan2(dx,-dz);
        double pitch = Math.atan2(dy, Math.sqrt((dx * dx) + (dz * dz)));

这是user758114的建议和令人难以置信的解决方案。这是同一个脚本,但在#C中。它与地理定位API一起工作,因此经过测试

ECEF类
{
公共静态(双精度,双精度)GetOrientation(某些地理位置项1,某些地理位置项2)
{
返回方向差异((项目1.纬度-项目2.纬度,
项目1.海拔高度-项目2.海拔高度,
第1项经度-第2项经度);
}
专用静态(双,双)方向差异((双,双,双)方向差异)
{
返回(偏航(定向差分项目2,定向差分项目3),俯仰(定向差分项目1,定向差分项目2,定向差分项目3));
}
专用静态双偏航(双dx,双dz)=>-数学Atan2(dx,-dz);
专用静态双节距(双dx,双dy,双dz)=>数学Atan2(dy,数学Sqrt((dx*dx)+dz*dz));
}

你不能从位置数据中获取方向数据-这两者不相关。你不能从当前位置获取方向并更新位置吗?是的-方向不是方向。请记住,这是一架机头指向其运动方向的飞机。在轻型飞机上飞行几百个小时,我从来没有乘坐过这样的飞机你是怎么计算dx,dy,dz的?这只是两个点的xyz值的差。x2-x1、y2-y1、z2-Z1这个问题被专门标记为Java问题,并使用Java中的库构建。请避免添加其他语言的答案,因为这会增加答案的噪音,并可能导致未来读者的困惑。