Робототехника - рекурсивная функция для фрактала.
В настоящее время я работаю с Myro/Calico с Robotics. Я пытаюсь запустить рекурсивную функцию фрактала. Я использую Python.
Я следил за псевдокодом здесь. фрактальный
До сих пор я пытался реализовать первый шаг без рекурсии. И это хорошо работает
# 1 foot per 2 seconds. x * 2 = feet desired.
def fractal(x):
waitTime = x*2
turnRight(1, 0.825) #90 degree turn
forward(1, x/3) #move length/3 steps
turnLeft(1, 0.55)#60 degree turn
forward(1, x/3) #move length/3 steps
turnRight(1, 1.1) #120 degree turn
forward(1, x/3) #move length/3 steps
turnLeft(1, 0.55) #60 degree turn
forward(1, x/3) #move length/3 steps
Хотя это работает, моя цель состоит в том, чтобы пройти через это рекурсивно, но сделать меньшую кривую на каждой итерации. Я пытался это сделать, но мой робот двигается не так, как хотелось бы.
Вот моя попытка рекурсии
def fractal(x):
waitTime = x*2
if (x == 1):
forward(x/3)
else:
(x-1)/3
turnLeft(1,0.55) #60 degrees
if (x == 1):
forward(x/3)
else:
(x-1)/3
turnRight(1, 1.1) #120 degree turn
if (x == 1):
forward(x/3)
else:
(x-1)/3
turnLeft(1, 0.55)#60 degree turn
if (x == 1):
forward(x/3)
else:
(x-1)/3
Мой робот поворачивается только влево и вправо, но не в полной форме. Тот без рекурсии начал фрактал. Мне просто нужна рекурсия, чтобы пройти весь фрактал.
1 ответ
Решение
Я думаю, это то, что вы хотите сделать
x = number of interations
l = lenth(wait time)
def fractal(x, l):
if (x == 1):
forward(l/3)
else:
fractal((x-1), l/3)
turnLeft(1,0.55) #60 degrees
if (x == 1):
forward(l/3)
else:
fractal((x-1), l/3)
turnRight(1, 1.1) #120 degree turn
if (x == 1):
forward(l/3)
else:
fractal((x-1), l/3)
turnLeft(1, 0.55)#60 degree turn
if (x == 1):
forward(l/3)
else:
fractal((x-1), l/3)