如何查找路径是否接近路径

时间:2018-03-01 21:08:55

标签: algorithm

我有一张地图,显示了人们应该采取的路径。该路径转换为~190点(x,y)位置。当有人真正走这条路时,他们几乎不可能匹配原点。此外,与定义的路径相比,实际点数可以大大多于350个点。

我想看到的是这个人是否遵循了这条道路。意思是他们在给定的距离内。在单点的情况下,假设它们在100 + - 像素范围内。

我尝试在实际点周围创建一个矩形,并查看路径点是否在其中。由于点的数量不同,我想我会创建一系列要检查的点。

总的来说,最终的目标是看看这个人是否在整个时间范围内。

我目前使用的方法遇到的一个问题是,即使我知道它足够接近,但并不总能找到这一点。我很确定它与我正在查看的范围有关。另一个我无法解决的问题是点数不同。

在下图中,原始路径为黑色,实际路径为红色。

enter image description here

const int expandBy = 120;
const int inflateBy = expandBy / 2;
const int range = 5;            

for (int i = 0; i < actualPoints.Length; i++)
{
    bool found = false;

    var pt = actualPoints[i];
    var actualRect = new CCRect(pt.X - inflateBy, pt.Y - inflateBy, expandBy, expandBy);

    var upperRange = range * 2;
    var lowerRange = i - range;

    if (lowerRange < 0)
        lowerRange = 0;

    var points = path.Skip(lowerRange).Take(upperRange);
    foreach (var pts1 in points)
    {
        if (!actualRect.ContainsPoint(pts1))
        {
            drawNode.DrawRect(actualRect, CCColor4B.Green);                        
        }
        else
        {
            found = true;
            break;
        }
    }

    if (!found)
        return false;
}

return true;

0 个答案:

没有答案