Python 绘制不带turtle模块的turtle路径
我试图编写一个程序,在给定字符串时绘制“海龟”的路径。我不能使用海龟模块。我们假设海龟从(0,0)开始,指向y 以下是4个可能的字符: S:向当前方向前进1Python 绘制不带turtle模块的turtle路径,python,matplotlib,Python,Matplotlib,我试图编写一个程序,在给定字符串时绘制“海龟”的路径。我不能使用海龟模块。我们假设海龟从(0,0)开始,指向y 以下是4个可能的字符: S:向当前方向前进1 R:右转90度 L:左转90度 T:如果位移跟踪当前处于活动状态,则禁用位移跟踪,否则启用位移跟踪 例如,路径可以是:sssrsslstst 我认为有两种方法可以解决这个问题。要么海龟总是在旋转的平面上直线移动。任一粒子都可以“识别”其实际指向的位置,然后左右移动 在这两种情况下,我都被卡住了 以下是我所做的“代码”: import mat
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部分应该放什么吗?
提前感谢您的时间和帮助。对于海龟图形,我们需要存储和更新方向和位置。 这里有一个简单的方法:
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
产出:
对于海龟图形,我们需要存储和更新方向和位置。 这里有一个简单的方法:
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]——这取决于您是向右旋转“左”还是向右旋转“右”。祝你好运