Робототехника - рекурсивная функция для фрактала.

В настоящее время я работаю с 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)
Другие вопросы по тегам