“航位推算是根据先前确定的位置估算一个人的当前位置,并根据经过或经过的时间和航向的已知或估算的速度推进该位置的过程。” (Wikipedia)
我当前正在实现一个使用航位推测法优化的简单服务器,该逻辑通过对客户端和服务器进行逻辑假设来最小化所需的更新。
可以说,由用户控制的对象正在转动或不转动。这带来了航位推算(我的看法)的问题。
例如,假设您的时间点A由[位置,速度,转弯:左/右/否]定义。现在,您需要经过t时间后的B点。当不转弯时,很容易推断出新位置。得出的方向也很容易推断。但是,当这两个因素结合在一起时又如何呢?当物体经过t时间量时,速度的方向将沿着曲线变化。
我是否应该选择另一种解决方案(例如让客户端为每个新方向发送更新,而不只是告诉服务器“我现在向左转”)?
顺便说一下,这是在2D空间中。
最佳答案
为了简单起见,假设您的车辆的转弯半径r与速度无关。因此,要根据初始坐标和时间来计算新位置:
计算距离(即速度*时间)
计算你转了多少(那是距离/(2 * pi * r))
将该弧添加到原始位置。
最后步骤需要详细说明。
给定在第2步中计算出的角度a,如果您从(0,0)开始并以正北方向(即pi / 2弧度)向左转,则您的新位置为:(rcos(a)-1,rsin(一个))。
如果您的原始标题不同,则说它是“ b”,然后简单地相应地旋转新位置,即乘以该旋转矩阵:
[ cos b , -sin b ]
[ sin(b), cos(b) ]
最后,添加初始位置就可以了。现在,仅当您更改速度或转向时,才需要发送更新。