4

航位推算是根据先前确定的位置估计一个人的当前位置并根据经过时间和航向的已知或估计速度推进该位置的过程。” (维基百科

我目前正在实现一个简单的服务器,该服务器利用航位推算优化,通过对客户端和服务器进行逻辑假设来最小化所需的更新。

用户控制的物体可以说是在转动,也可以说是不转动。这提出了航位推算的问题(我的看法。)

例如,假设您有由 [位置、速度、转向:左/右/否] 定义的时间点A。现在你想要在t时间后点B。不转动时,新位置很容易推断。由此产生的方向也很容易推断。但是当这两个因素结合在一起时呢?当物体翻转t时间时,速度的方向将沿曲线变化。

我是否应该采用另一种解决方案(例如让客户端为每个新方向发送更新,而不仅仅是告诉服务器“我现在向左转”)?

顺便说一下,为了简单起见,这是在 2D 空间中。

4

2 回答 2

2

为简单起见,假设您的车辆的转弯半径 r 与速度无关。因此,在给定初始坐标和时间的情况下计算新位置:

  • 计算距离(即速度 * 时间)
  • 计算你转了多少(即距离/(2*pi*r))
  • 将该弧线添加到原始位置。

最后的步骤需要详细说明。

给定在步骤 2 中计算的角度 a,如果您从 (0,0) 开始,正北航向(即 pi/2 弧度)并向左转,那么您的新位置是: (r cos(a)-1, r罪(一))。

如果您的原始标题不同,假设它是“b”,那么只需相应地旋转新位置,即乘以这个旋转矩阵:

 [ cos b , -sin b ]
 [ sin(b), cos(b) ]

最后,添加初始位置,您就完成了。现在,您只需在更改速度或转向时发送更新。

于 2009-08-11T15:45:59.307 回答
1

好吧,我认为“转弯:左/右/否”不足以确定位置 B - 您还需要知道转弯的弧线。如果您沿着半径为 1 的圆形路径向左转,您将到达与沿半径为 10 的圆形路径转弯时不同的位置,即使您的初始位置、速度和转弯方向都是相同的。

如果让客户端为每个新方向发送更新并将它们视为线性段是一种选择,那将是一个更容易进行的计算。您可以简单地将来自客户端的每个新报告视为一个向量,并将它们相加。计算一堆曲线将变得更加复杂。

于 2009-08-11T15:44:21.570 回答