我需要一个最短路径算法来控制现实生活中的机器人。
假设我有矩阵形式的环境地图,其中 1 是障碍物,0 是自由空间。如果我使用传统的最短路径算法,例如 A*,那么这将为我提供曼哈顿距离最短路径。所以离实际的最短路径还差得很远。出现这个问题是因为我想不出一种方法来惩罚运动,使对角线比两条直线更好。我可以做一个启发式,让 A* 首先尝试两点之间的欧几里德最短路径,但实际上并没有使欧几里德最短路径成为更好的路径。
有谁知道获得连续空间最短路径的方法吗?它不一定是实际的最佳路径,但比直线和 90 度角更好。
我有一个想法:从起点画一个圆。增加圆的半径,直到圆上的一个点靠近墙壁或球门。圆边缘上的所有点都被设置为子节点,并受到圆半径的惩罚。圆内所有不开放的点都将被关闭,因为没有理由测试它们。以欧几里德最短路径为启发式,以 A* 方式重复此过程,直到达到目标状态。使机器人从一个点直线移动到下一个点。
这应该会提供更接近我正在寻找的东西。一组具有不同角度的直线。当然,如果有连续的曲线就更好了……
有人可以帮我理解这个串流行为吗?
stringstream temp;
temp << "342 1 ";
int a;
while (temp >> a) {
cout << a << endl;
}
temp << "56" << " ";
temp >> a;
cout << a << endl;
Run Code Online (Sandbox Code Playgroud)
哪个输出:
342
1
1
Run Code Online (Sandbox Code Playgroud)
我希望它输出
342
1
56
Run Code Online (Sandbox Code Playgroud)
这是在视觉工作室2015年编制的.