Python 绘制不带turtle模块的turtle路径

Python 绘制不带turtle模块的turtle路径,python,matplotlib,Python,Matplotlib,我试图编写一个程序,在给定字符串时绘制“海龟”的路径。我不能使用海龟模块。我们假设海龟从(0,0)开始,指向y 以下是4个可能的字符: S:向当前方向前进1 R:右转90度 L:左转90度 T:如果位移跟踪当前处于活动状态,则禁用位移跟踪,否则启用位移跟踪 例如,路径可以是:sssrsslstst 我认为有两种方法可以解决这个问题。要么海龟总是在旋转的平面上直线移动。任一粒子都可以“识别”其实际指向的位置,然后左右移动 在这两种情况下,我都被卡住了 以下是我所做的“代码”: import mat

我试图编写一个程序,在给定字符串时绘制“海龟”的路径。我不能使用海龟模块。我们假设海龟从(0,0)开始,指向y

以下是4个可能的字符:

S:向当前方向前进1
R:右转90度
L:左转90度
T:如果位移跟踪当前处于活动状态,则禁用位移跟踪,否则启用位移跟踪

例如,路径可以是:sssrsslstst

我认为有两种方法可以解决这个问题。要么海龟总是在旋转的平面上直线移动。任一粒子都可以“识别”其实际指向的位置,然后左右移动

在这两种情况下,我都被卡住了

以下是我所做的“代码”:

import matplotlib.pyplot as plt


pathUser=input('Write a path')           #User enter a path
path=list(pathUser)                      #Convert string to a matrix

x=0
y=0

for p in path:                           #Check  the letters one-by-one

    if p == "S":
        y=y+1                            #Moves straight
        plt.plot(x,y,'k^')       
  
    elif p == "R":
        
    elif p == "L":
        
    elif p == "T":   
            
plt.show()
这是一个好的开始吗?我能做的是旋转点,但不是轴。 有人能帮我弄清楚R和L部分应该放什么吗?
提前感谢您的时间和帮助。

对于海龟图形,我们需要存储和更新方向和位置。 这里有一个简单的方法:

  • 初始化位置和方向
  • 如果S:根据方向改变位置
  • 如果R:将方向更改-90度 如果L:将方向更改+90度
  • 下面是示例代码:

    import matplotlib.pyplot as plt
    
    
    direction = 90
    track     = True
    move_dir  = {  0: [ 1,  0],
                  90: [ 0,  1],
                 180: [-1,  0],
                 270: [ 0, -1]}
    
    x, y = [0, 0]
    prev_x, prev_y = x, y
    path = input('write a path: \n>>>')
    
    
    for p in path:
        if p == 'S':
            prev_x, prev_y = x, y
            x += move_dir[direction][0]
            y += move_dir[direction][1]
            if track:
                plt.plot([prev_x, x], [prev_y, y], color='red', marker='.', markersize=10)
        
        elif p == 'L':
            direction = (direction + 90) % 360
    
        elif p == 'R':
            if direction == 0:
                direction = 270
            else:
                direction = direction - 90
        
        else:
            track = not track
    
    
    plt.grid()
    plt.show()
    
    样本测试用例:

    write a path:
    >>>SSSRSSLSTSSTS
    
    产出:


    对于海龟图形,我们需要存储和更新方向和位置。 这里有一个简单的方法:

  • 初始化位置和方向
  • 如果S:根据方向改变位置
  • 如果R:将方向更改-90度 如果L:将方向更改+90度
  • 下面是示例代码:

    import matplotlib.pyplot as plt
    
    
    direction = 90
    track     = True
    move_dir  = {  0: [ 1,  0],
                  90: [ 0,  1],
                 180: [-1,  0],
                 270: [ 0, -1]}
    
    x, y = [0, 0]
    prev_x, prev_y = x, y
    path = input('write a path: \n>>>')
    
    
    for p in path:
        if p == 'S':
            prev_x, prev_y = x, y
            x += move_dir[direction][0]
            y += move_dir[direction][1]
            if track:
                plt.plot([prev_x, x], [prev_y, y], color='red', marker='.', markersize=10)
        
        elif p == 'L':
            direction = (direction + 90) % 360
    
        elif p == 'R':
            if direction == 0:
                direction = 270
            else:
                direction = direction - 90
        
        else:
            track = not track
    
    
    plt.grid()
    plt.show()
    
    样本测试用例:

    write a path:
    >>>SSSRSSLSTSSTS
    
    产出:


    您能澄清问题所在吗?请看,.S仅在海龟朝北时沿y轴移动,与开始时相同。但转弯后,它将面向西方或东方。例如,您可以通过记住海龟头部的[dx,dy]方向向量来解决此问题。然后S将向量添加到[x,y]。旋转会将向量更改为[-dy,dx]或[dy,-dx]——这取决于您是向右旋转“左”还是向右旋转“右”。祝你好运。你能澄清问题是什么吗?请看,.S仅在海龟朝北时沿y轴移动,与开始时相同。但转弯后,它将面向西方或东方。例如,您可以通过记住海龟头部的[dx,dy]方向向量来解决此问题。然后S将向量添加到[x,y]。旋转会将向量更改为[-dy,dx]或[dy,-dx]——这取决于您是向右旋转“左”还是向右旋转“右”。祝你好运