Рекурсия · 17 из 21
Дерево Пифагора
Дядя Миша задумал обложку для родословной: не обычное дерево с ветками, а дерево Пифагора. На квадрате-стволе стоят два квадрата поменьше, наклонённые на 45°, — они сходятся верхними углами, а между ними остаётся прямоугольный треугольник, как в чертеже теоремы Пифагора. На каждом из двух — снова по два, и так дальше: поколение за поколением, как в роду.
Что сделать
Нарисуйте черепашкой дерево Пифагора: квадрат, а на его верхней стороне — два дерева поменьше, на поколение моложе.
Что приходит
t— черепашка: стоит в левом нижнем углу будущего квадрата и смотрит вдоль его нижней стороныstorona— сторона квадрата-стволаglubina— сколько поколений квадратов рисовать
Что вернуть
Ничего — функция рисует и возвращает черепашку туда же, откуда начала, и в ту же сторону.
Допишите функцию derevo в редакторе справа.
Рисуйте черепашкой t, как turtle дома, — проверка
сравнивает нарисованное; возвращать ничего не нужно.
с графикой когда тесты пройдут, ответ вашей функции нарисуется · все задачи с графикой
derevo(t, 100, 1) — один квадрат 100 × 100 над нижней стороной. derevo(t, 100, 2) — тот же квадрат, а на его верхней стороне два квадрата со стороной 100 / √2 ≈ 70,7, наклонённые влево и вправо на 45° и сходящиеся углами над серединой.
При glubina = 0 не рисуется ничего.
Иначе — квадрат со стороной storona, построенный налево от направления черепашки (четыре раза вперёд и налево на 90°). Если черепашка смотрит на восток, квадрат стоит над её путём.
На верхней стороне квадрата — два дерева глубины glubina − 1 со стороной storona / √2:
- левое начинается в левом верхнем углу квадрата и смотрит на 45° левее исходного направления;
- правое начинается в вершине между ними — там, где кончается нижняя сторона левого, — и смотрит на 45° правее исходного направления.
Переходы между квадратами — с поднятым пером: рисуются только квадраты. Ветки зовутся с опущенным пером. В конце черепашка стоит там же, смотрит туда же, где была в начале, и перо у неё опущено, — на этом держится вся рекурсия.
Проверка сравнивает нарисованное с рисунком эталона.
Образцовый тест целиком
from cherepashka import risunok as _risunok_p
_risunok_p(derevo, 100, 2)
<рисунок: 10 линий, 1 цвет; от (-50, 0) до (150, 200); отпечаток ab42da3739>
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.