我有一张地图,显示了人们应该采取的路径。该路径转换为~190点(x,y)位置。当有人真正走这条路时,他们几乎不可能匹配原点。此外,与定义的路径相比,实际点数可以大大多于350个点。
我想看到的是这个人是否遵循了这条道路。意思是他们在给定的距离内。在单点的情况下,假设它们在100 + - 像素范围内。
我尝试在实际点周围创建一个矩形,并查看路径点是否在其中。由于点的数量不同,我想我会创建一系列要检查的点。
总的来说,最终的目标是看看这个人是否在整个时间范围内。
我目前使用的方法遇到的一个问题是,即使我知道它足够接近,但并不总能找到这一点。我很确定它与我正在查看的范围有关。另一个我无法解决的问题是点数不同。
在下图中,原始路径为黑色,实际路径为红色。
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;