2016-06-09 2 views
1

Итак, мы просто попали в апплет Turtle и увидели этот код в Интернете.Java-черепаха-апплета

private void tree(int s) 
{ 
    if (s < 8) 
     return; 

    forward(s); 
    left(45); 
    tree(s/2); 
    right(90); 
    tree(s/2); 
    left(45); 
    back(s); 
} 

Это то, что результат должен выглядеть, но на мой взгляд, черепаха останавливается, где мой красный круг ...

enter image description here

Может кто-нибудь объяснить, почему черепаха будет дальше И Почему черепаха запускает два поддерева?

Потому что, если я понял код сразу черепаха будет двигаться вперед с шагами, и затем повернуть налево на 45 градусов, но не так ...

ответ

2

черепаха должна в конечном итоге туда, где он начал. Давайте разберем код по строкам:

forward(s); 

Это рисует вертикальный ствол дерева.

left(45); 

Мы поворачиваем влево, чтобы мы указывали на верхний левый угол.

tree(s/2); 

Мы рекурсивный вызов tree с половиной длиной основания, в результате чего новое дерево ответвления от нашего ствола в направлении, которое мы указали (45 градусов влево). Обратите внимание, что дерево будет продолжать рекурсивно разветвляться до тех пор, пока базовая длина не станет меньше 8 единиц (пикселей?). Затем он возвращается к месту, из которого он был разбит, базе ветки.

right(90); 

После того как мы закончим рисовать левой ветви, мы переходим к правой 90 градусов, так что мы теперь указывает на верхний правый угол.

tree(s/2); 

Как и раньше, мы отделяем и начинаем рисовать дерево в этом направлении с половиной базовой длины.

left(45); 

Мы поворачиваем налево на 45 градусов, чтобы переориентировать себя так, чтобы мы указывали прямо вверх.

back(s); 

Черепаха возвращается к основанию дерева.


В целом код разветвляется слева под углом 45 градусов с половиной длины основания, пока ветви не станут слишком короткими; после этого он затем эффективно спирали обратно вовнутрь, рисуя оставшиеся ветви (слева, затем справа).