Рекурсия · 15 из 19
Кривая дракона
Сложите полоску бумаги пополам, ещё раз пополам — в ту же сторону, и ещё раз, а потом раскройте так, чтобы каждый сгиб стал прямым углом. Получится ломаная, которую физики НАСА в шестидесятых назвали драконом — после двенадцати сгибов она и правда похожа на дракона с завитым хвостом. Рисуют её рекурсией, где у каждой половины свой поворот.
Что сделать
Нарисуйте кривую дракона заданной глубины: две кривые на уровень меньше, длиной в √2 раз короче, с противоположными поворотами.
Что приходит
t— черепашкаdlina— расстояние от начала кривой до её концаglubina— сколько раз «сложена» полоска: 0 — просто отрезок
Что вернуть
Ничего — функция рисует.
Допишите функцию drakon в редакторе справа.
Рисуйте черепашкой t, как turtle дома, — проверка
сравнивает нарисованное; возвращать ничего не нужно.
с графикой когда тесты пройдут, ответ вашей функции нарисуется · все задачи с графикой
Глубина 1, длина 100: направо на 45°, отрезок 70,7, налево на 90°, отрезок 70,7, направо на 45° — «крыша» из двух отрезков; конец — в 100 от начала.
Кривая длиной L, глубины g, со знаком z (z — +1 или −1):
- g = 0: вперёд на L;
- иначе: направо на 45 · z, кривая длиной L / √2 глубины g − 1 со знаком +1, налево на 90 · z, кривая длиной L / √2 глубины g − 1 со знаком −1, направо на 45 · z. drakon(t, dlina, glubina) рисует кривую со знаком +1. √2 — 2 ** 0.5 или math.sqrt(2).
Образцовый тест целиком
from cherepashka import risunok as _risunok_p
_risunok_p(drakon, 100, 1)
<рисунок: 2 линии, 1 цвет; от (0, -50) до (100, 0); отпечаток 21d848d9c2>
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.