情况:我有一个由跟踪点(2D)定义的轨道。例如,轨迹点代表转弯。在跟踪点之间只有直线。现在我在这个2D空间中给出了一组坐标。我计算从第一个跟踪点到新坐标的距离以及前两个跟踪点的间隔距离。如果到测量坐标的距离比从第一个到第二个轨迹点的距离短,我假设这个点位于这个间隔之间。然后我对它进行线性插值。如果它更大,我会检查下一个间隔。
所以它基本上采用间隔距离并尝试将它们放在那里。我正试图跟踪一个大致沿着这条轨道移动的物体。
这对某人来说听起来很熟悉吗?有人可以提出类似现有算法的建议吗?
编辑:从我到目前为止所说的,我想澄清一个位置与跟踪点没有多少关联。考虑Jonathan做的精细ASCII绘图:
发现X位置在段1和2内(S12)。现在下一个位置是Y,不能认为它足够接近S12。我将转到S23,检查它是否在。
如果它在,我将不会检查S12是否有任何其他值,因为我已经在下一个段中找到了一个。该算法“不回头”。
但是如果它没有从那里找到正确的段,因为它发生在远离第一段的地方,但是无论如何还要远离任何其他段,我将丢弃该值并且下一个位置将再次在S12中寻找。
循环仍然是个问题。考虑我为S23得到Y然后跳过两三个位置(因为它们太远了),我可能会失去赛道。我可以在S34确定一个位置,它已经在S56中了。
也许我可以拿出一些平均速度来判断它应该在哪个部分。
看起来细分市场越大,做出正确决定的机会就越大。
答案 0 :(得分:6)
我所描述的算法令我担心的是它是'贪婪的'并且可以选择'错误的'轨道段(或者至少是一个不是最接近该点的轨道段)。
将ASCII艺术推向极限的时间。考虑以下路径(数字表示跟踪点列表中的序列)和坐标X(以及后来的Y)。
1-------------2
|
| Y
X |
5-----+-----6
| |
| |
4-----3
我们如何解释您的描述?
[C]计算从第一个轨迹点到新坐标的距离以及前两个轨迹点的间隔距离。如果到测量坐标的距离小于从第一个到第二个轨迹点的距离,则[假设]该点位于该间隔之间; [...] [i]它更大,[...]检查下一个间隔。
我认为第一句话的意思是:
棘手的部分是条件句的解释。
我的印象是,如果D1X或D2X小于D12,则假设X在轨道段TP1到TP2上(或最接近)(称之为段S12)。
从图中X的位置来看,D1X和D2X都小于D12是比较清楚的,所以我对你的算法的解释会将X解释为与S12相关,但X显然更接近S23或者S56比S12(但是那些被丢弃甚至没有被考虑)。
我是否误解了您的算法?
稍微考虑一下:我将你的算法解释为是指如果点X位于以TP1为中心的半径D12的圆内或以TP2为中心的半径D12的圆内,则将X与S12。但是,如果我们也考虑Y点,我建议你使用的算法也会将它与S12联系起来。
如果算法被细化为MAX(D1Y, D2Y) < D12
,则不认为Y与S12有关。但是,X可能仍被认为与S12有关,而不是与S23或S56有关。
答案 1 :(得分:1)
这个算法的第一部分让我想起了通过一个离散的空间。表示这样一个空间的一个例子是Z-order空间填充曲线。我已经使用这种技术来表示quadtree,我曾经使用的adaptive mesh refinement代码的数据结构,并且使用了与您描述的算法非常相似的算法来遍历网格并确定粒子之间的距离
相似性可能不会立即显现出来。由于您只关心间隔位置,因此您在此步骤中有效地将间隔上的所有点视为等效。这与选择仅具有离散点的空间相同 - 您有效地将您的点捕捉到网格。