首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于导航矩阵的算法

用于导航矩阵的算法
EN

Stack Overflow用户
提问于 2021-09-14 01:50:18
回答 1查看 56关注 0票数 0

所以我有一个机器人,它有五个红外传感器(最左边,左边中间,中间,右边中间,最右边),我有一个5*5的方阵,我想让我的机器人导航。

我的机器人可以采取的行动是:-Forward(使用3个内部传感器,即左-中,中,右-中) -turnleft -turnright -turnaround

我知道机器人在网格中的初始位置和它的方向(它面对的方向,即北、南、东、西)。

现在我想要想出一个算法,当我的机器人的初始位置是(0,0),方向是北,然后当我给我的机器人坐标(2,1)时,它应该首先turnRight,然后向左移动两列,然后左转,向上移动一列到达坐标(2,1)。

有没有能做到这一点的算法?我自己想出了一个算法,但它相当长(200+ loc),所以我正在寻找一个有效的算法。

附注:机器人不知道坐标在网格中的位置,它只有传感器来检测行和列以及那里的横截面,并根据这些做出判断。任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2021-09-14 09:49:00

让我总结一下:

你的机器人只能在四个方向上移动(上、下、左、右)。

代码语言:javascript
复制
M = 
+---------+
|        E|
|         |
|         |
|         |
|    S    |
+---------+

Robot start position is S(0,2)
End position is E(4,4)

从S到E具有相同长度的路径很少。

代码语言:javascript
复制
+---------+ +---------+ +---------+ +---------+ 
|        E| |        E| |        E| |        E| 
|        +| |        +| |        +| |      + +| 
|        +| |        +| |      + +| |      +  | 
|        +| |      + +| |      +  | |      +  | 
|    S + +| |    S +  | |    S +  | |    S +  | 
+---------+ +---------+ +---------+ +---------+ . . .

关键是所有的路径都是5(+1)步长。所以你可以很容易的计算出这些值:

代码语言:javascript
复制
S = M[0][2]     (M[i][j], Si = 0, Sj = 2)
E = M[4][4]     (M[i][j], Ei = 4, Ej = 4) 

up_or_down = Ei-Si = 4-0 = 4  // sign is positive (so UP)
if (up_or_down > 0) then UP
                    else DOWN

left_or_right = Ej-Sj = 4-2 = 2  // sign is positive (so RIGHT)
if (left_or_right > 0 then RIGHT
                      else LEFT

你的机器人应该走的最终路径是:

代码语言:javascript
复制
4xUP
2XRIGHT

UP和RIGHT的任何组合都会起作用。

如果机器人可以沿对角线运行,则进行优化

在我们的例子中,它将是:

代码语言:javascript
复制
+---------+
|        E|
|        x|
|        x|
|      x  |
|    S    |
+---------+

总共是3(+1)步。

使用前面的公式,我们得到了4个UP和2个权利。所以我们有:

代码语言:javascript
复制
path = 4*U + 2*R
path = U+U+U+U+R+R

// let's combine U and R as much as possible
path = U + R + U + R + U + U
       \   /   \   /                // combine U+R into DUR (diagonal-up-right)
path =  DUR  +  DUR + U + U         // it gives us 3(+1) step
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69170884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档