有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计算未来位置

我得到了有关实体的以下信息:

横向/纵向位置 航向(弧度) 速度(以节为单位)

假设实体在恒定高度以恒定速度沿直线移动,如何计算实体在任意时间点的横向/纵向位置(或以一定间隔计算其位置)

(如你所知,我的数学能力很弱)


共 (2) 个答案

  1. # 1 楼答案

    首先,你不能在一条直线上同时在一个恒定的高度上移动。你的纵横坐标在一个参考椭球体上(很可能是WGS84)。 它们是各种各样的库或DB扩展,它们有一系列函数来精确地解决这类问题。例如,Postgis就是其中之一。他们中的大多数人都是免费的、经过测试的,并且工作。我不建议你自己尝试实现这个(假设地球是一个半径为r的完美球体),因为你必须考虑你正在使用的参考椭球体

  2. # 2 楼答案

    考虑到Hyperboreus提供的答案,这里有一个航空公式集:http://williams.best.vwh.net/avform.htm有计算给定起点、角度和距离的新纬度/经度的公式。你必须自己计算距离。听起来你已经有了计算距离所需的一切,因为速度就是距离/时间,如果你把它乘以你想要使用的时间偏移量,你就得到了距离

    1节=1牛米/小时 距离=yourTimeInDecimalHours*速度

    用于说明这一点的代码示例(从上面引用的链接复制):

    double lat1 = 0, lon1 = 0;                      // NOTE: these are in radians - remember PI/2 radians = 90 degrees
    double d = timeInDecimalHours * speedInKnots;   // so a half hour at 35 knots would be .5 * 35
    double tc = usersTrueCourse;                    // aka user's heading
    double lat=                                     // this will be in radians!!
        Math.asin(
            Math.sin(lat1) 
            * Math.cos(d)
            + Math.cos(lat1)
            * Math.sin(d)
            * Math.cos(tc)
        );
    double lon = 0;
    if (Math.cos(lat) == 0) {
        lon = lon1      // endpoint a pole
    } else {
        lon = (lon1 - Math.asin(Math.sin(tc)*Math.sin(d)/Math.cos(lat)) + Math.PI % (2*Math.PI))-Math.PI;
    }