我收到了一个实体的信息:
纬度/经度位置 航向(弧度) 速度(以节为单位)
如果假设该实体在恒定高度上沿直线以恒定速度运动,如何计算该实体在任意时间点的纬度/经度位置(或在间隔期内确定其位置)?
(您可以看出,我的数学技能很差)
我收到了一个实体的信息:
纬度/经度位置 航向(弧度) 速度(以节为单位)
如果假设该实体在恒定高度上沿直线以恒定速度运动,如何计算该实体在任意时间点的纬度/经度位置(或在间隔期内确定其位置)?
(您可以看出,我的数学技能很差)
1节 = 1海里/小时 距离 = 你的时间(十进制小时)* 速度;
以下是示例代码(从上述链接复制):
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;
}
部分犯了一个错误,此外距离需要用弧度表示。在你的例子中,你需要添加
double d = (M_PI/(180*60))*distanceNm;。当然,在计算
lat之前必须完成这个步骤,因为它使用了
d`。 - user826955