Python-旋转/移动指令的坐标

Python-旋转/移动指令的坐标,python,myro,Python,Myro,我已经创建了上面提到的Python数组。它包含点(x,y)的元组。我假设我从第一点开始(不是起点)。我想按照给定的顺序来讨论这些问题。我仅有的移动功能是旋转90度(方向),其中左、右方向分别为1或-1。和向前(时间)其中时间是移动的时间。我假设时间=1相当于坐标系中的一个单位。有没有一种聪明的方法可以在不使用大量if/else if/else的情况下轻松地将this转换为动作指令?到目前为止,我所拥有的: coordinates = [(0, 2), (0, 1), (1, 2), (1, 1)

我已经创建了上面提到的Python数组。它包含点(x,y)的元组。我假设我从第一点开始(不是起点)。我想按照给定的顺序来讨论这些问题。我仅有的移动功能是
旋转90度(方向)
,其中左、右方向分别为1或-1。和向前(时间)其中时间是移动的时间。我假设时间=1相当于坐标系中的一个单位。有没有一种聪明的方法可以在不使用大量if/else if/else的情况下轻松地将this转换为动作指令?到目前为止,我所拥有的:

coordinates = [(0, 2), (0, 1), (1, 2), (1, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]

好的,那么你的机器人正朝着某个已知的基本方向,并且在 一些已知的位置,您希望它移动到另一个位置

首先,需要一个元组列表,将方向映射到位移。 我将使用标准单位圆,角度为90的倍数 学位:

因此,朝
0
方向移动意味着x坐标增加 每单位时间增加1,y坐标不变,依此类推。这个 方向是0到3(含)之间的整数

现在代码需要弄清楚如何继续。我会从任何东西开始 机器人当前面对的方向。假设所需的位移为
(-2,1)
dir
0
atod[dir]
(1,0)
。忽略那个 那是零;将
-2
除以
1
,得到
-2
,所以这个方向是 不行,我们必须轮换。哪条路?检查每一个,看哪条路 有帮助。如果这两种方法都不管用,你需要做180,用哪种方法都可以 你喜欢的方向

所以我们做了旋转,现在我们在方向
1
atod[dir]
is
(0,1)
。因此,我们希望通过
1
向前迈进。这样做。现在你必须
再次旋转,再次移动,你就完成了。

好的,所以你的机器人朝着某个已知的基本方向,并且在 一些已知的位置,您希望它移动到另一个位置

首先,需要一个元组列表,将方向映射到位移。 我将使用标准单位圆,角度为90的倍数 学位:

因此,朝
0
方向移动意味着x坐标增加 每单位时间增加1,y坐标不变,依此类推。这个 方向是0到3(含)之间的整数

现在代码需要弄清楚如何继续。我会从任何东西开始 机器人当前面对的方向。假设所需的位移为
(-2,1)
dir
0
atod[dir]
(1,0)
。忽略那个 那是零;将
-2
除以
1
,得到
-2
,所以这个方向是 不行,我们必须轮换。哪条路?检查每一个,看哪条路 有帮助。如果这两种方法都不管用,你需要做180,用哪种方法都可以 你喜欢的方向

所以我们做了旋转,现在我们在方向
1
atod[dir]
is
(0,1)
。因此,我们希望通过
1
向前迈进。这样做。现在你必须
再次旋转,再次移动,就完成了。

您可以沿北/南或东/西轴移动,因为您的旋转限制为90度

您可以观察到,任何运动都有北/南分量和东/西分量

如果你的动作一致,那么你离下一步只有一个90度的转弯:

atod = [(1, 0), (0, 1), (-1, 0), (0, -1)]
。。。等等

如果我们假设你的机器人开始面向北方,那么你的回路应该先转向东/西,然后移动,然后转向北/南

这是一个开始。这可能是您的全局数据和主代码

1. turn east or west
2. move east or west
3. turn north or south
4. move north or south
5. You should be at your target
6. turn east or west
7. move east or west
8. turn north or south
9. move north or south
10. you should be at your (next) target
如果我们假设x是东/西,y是北/南,那么对于move_robot,有类似的东西:

Robot_pos = coordinates[0]
Robot_facing = NORTH

for next_pos in coordinates[1:]:
    move_robot(next_pos)

turn\u robot()
代码中,您必须稍微聪明一点,以优化转弯,以确定开始时是朝正方向还是朝负方向。但是,它应该始终是单个90度旋转。

您可以沿北/南或东/西轴移动,因为您的旋转限制为90度

您可以观察到,任何运动都有北/南分量和东/西分量

如果你的动作一致,那么你离下一步只有一个90度的转弯:

atod = [(1, 0), (0, 1), (-1, 0), (0, -1)]
。。。等等

如果我们假设你的机器人开始面向北方,那么你的回路应该先转向东/西,然后移动,然后转向北/南

这是一个开始。这可能是您的全局数据和主代码

1. turn east or west
2. move east or west
3. turn north or south
4. move north or south
5. You should be at your target
6. turn east or west
7. move east or west
8. turn north or south
9. move north or south
10. you should be at your (next) target
如果我们假设x是东/西,y是北/南,那么对于move_robot,有类似的东西:

Robot_pos = coordinates[0]
Robot_facing = NORTH

for next_pos in coordinates[1:]:
    move_robot(next_pos)

turn\u robot()
代码中,您必须稍微聪明一点,以优化转弯,以确定开始时是朝正方向还是朝负方向。但是,它应该始终是单个90度旋转。

是的,您可以概括该过程。打印出你的变更单。写下每次更改所需的说明。你是怎么推导出来的?将其描述为对已知标题进行给定更改的通用算法(您必须注意标题)。现在,编写一个循环,遍历您的更改列表,并为每个更改生成指令。是的,您可以概括这个过程。打印出你的变更单。写下每次更改所需的说明。你是怎么推导出来的?将其描述为对已知标题进行给定更改的通用算法(您必须注意标题)。现在,编写一个循环,遍历您的更改列表,并为每个更改生成指令。