“航位推算是根据先前确定的位置估算一个当前位置并根据经过时间和路线的已知或估计速度推进该位置的过程。” (Wikipedia)
我目前正在实施一个使用航位推算优化的简单服务器,它可以最大限度地减少客户端和服务器上的逻辑假设所需的更新。
用户控制的对象可以说是转动或不转动。这提出了航位推测的问题(我看待它的方式。)
例如,假设您在[位置,速度,转弯:左/右/否]定义的时间点 A 。现在,您需要在 t 之后的时间点 B 。不转动时,新位置很容易推断。由此产生的方向也很容易推断。但是这两个因素何时合并呢?当物体翻转 t 时,速度方向将沿曲线变化。
我是否应该采用其他解决方案(例如让客户端为每个新方向发送更新,而不是仅仅告诉服务器“我现在左转”)
顺便提一下,这是在2D空间中。为了简单起见。
答案 0 :(得分:2)
为简单起见,我们假设您的车辆的转弯半径为r,与速度无关。因此,在给定初始坐标和时间的情况下计算新位置:
最后的步骤需要详细说明。
给定在步骤2中计算的角度a,如果你从(0,0)开始,带有正北方向(即pi / 2弧度)并向左转,那么你的新位置是:(r cos( a)-1,r sin(a))。
如果你的原始标题不同,说它是“b”,那么只需相应地旋转新位置,即乘以这个旋转矩阵:
[ cos b , -sin b ]
[ sin(b), cos(b) ]
最后,添加初始位置,您就完成了。现在,只需更改速度或转向,即可发送更新。
答案 1 :(得分:1)
嗯,我认为“转弯:左/右/否”不足以确定位置B - 你还需要知道转弯的弧度。如果沿着半径为1的圆形路径向左转,则最终会在与沿半径为10的圆形路径转弯时不同的位置,即使您的初始位置,速度和转向都是相同。
如果让客户端为每个新方向发送更新并将它们视为线性段是一个选项,那么这将是一个更容易计算。您可以简单地将客户端中的每个新报告视为向量,并对它们求和。计算一堆曲线会更复杂。