a buggy concatenative turtle (mobilis terrapin)

Требования в браузеру: поддержка javascript and <canvas> Рекомендуемые браузеры: (Safari,Opera,Firefox)

Если при работе с приложением в браузере Opera не происходит отрисовка пути, "пройденого черепашкой", активируйте ключ


pen переключить перо up/down (поднять/опустить)
mirror переключить left/right - зеркально отобразить (влево/вправо)
reverse переключить forward/back реверсивное движение (вперед/назад)
turn X поворот на X градусов
forward X вперед на X точек (пикселов)
scale X изменить масштаб в X раз
repeat N [ ] повторить [команды] N раз
poly N [ ] повторить с поворотом 360/N градусов N раз
within [ ] [ ] преобразовывает последовательность
within a b == a b a
inverse [ ] инверсия действия
(inverse a == a-1)
under [ ] [ ] преобразовывает последовательность
(under a b == a b a-1)
flip NAME меняет последовательность выполнения команд в группе на обратную
(flip f b a == f a b)
def NAME [ ] назначает имя группе команд
(sorry, no arguments)
repeat 4 [ forward 100 turn 90 ] // повторить 4 [ вперёд 100 поворот 90] // квадрат

poly 8 [ forward 30] // рисуем 8 угольник со стороной 30 точек

poly 6 [ poly 36 [ reverse pen forward 20 ] ]

def spot [ poly 6 [ forward 10 ] ] //
def arm [ under [ forward 70 turn -60 ] ]
poly 12 [ arm spot ]

def coil [ repeat 300 [ turn 5 forward 5 scale .99 ] ]
def branch [ flip under [ ] ]
poly 2 [ branch coil ]

def jog [ forward 30 under [ turn 45 ] [ forward 10 ] ]
def joggle [ under jog reverse reverse ]
poly 6 [ poly 5 joggle ]

def t [ turn 90 ]
def f [ forward 60 ]
def h [ forward 30 ]
def x [ under [ under t f ] h ]

def u [ under t f h ]
def q [ under [ repeat 2 u ] ]
def w [ under [ repeat 1 u ] ]
def e [ under [ repeat 0 u ] ]

poly 4 [ q [
poly 4 [ w [
poly 4 [ e [
x inverse x
] ] ] ] ] ]