Генераторы и итераторы · 9 из 18
Папоротник на упаковке
Для нового «Бородинского» Сан Саныч хочет на пакете веточку папоротника — не нарисованную, а «настоящую», как он говорит. Технолог показал ему папоротник Барнсли: точку раз за разом переносят одним из четырёх правил, выбранным наугад, и из точек сам вырастает лист. Выбирать правила будет печатная машина, а точки ей нужны по одной — сколько успеет взять.
Что сделать
Напишите генератор точек папоротника: на каждое выбранное правило — новая точка, по одной за раз.
Что приходит
vybory— номера правил по порядку, от 0 до 3: любой перебираемый поток, хоть бесконечный
Что вернуть
Генератор пар (x, y): точка после первого правила, после второго и так далее; начальная (0.0, 0.0) не выдаётся.
Допишите функцию tochki в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
с графикой когда тесты пройдут, ответ вашей функции нарисуется · все задачи с графикой
list(tochki([0, 1]))
[(0.0, 0.0), (0.0, 1.6)]
Точка начинается в (0.0, 0.0). Для каждого номера из vybory точка (x, y) заменяется новой по правилу с этим номером, и новая точка выдаётся:
- 0 — стебель:
x' = 0.0,y' = 0.16·y; - 1 — лист меньше и выше:
x' = 0.85·x + 0.04·y,y' = −0.04·x + 0.85·y + 1.6; - 2 — левый листок:
x' = 0.2·x − 0.26·y,y' = 0.23·x + 0.22·y + 1.6; - 3 — правый листок:
x' = −0.15·x + 0.28·y,y' = 0.26·x + 0.24·y + 0.44.
В обеих формулах правила — старые x и y.
Функция — генератор: следующий номер берётся из vybory только тогда, когда просят следующую точку. Поток может быть бесконечным.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.