Создание дерева Пифагора в Python. часть 2 - эксперименты с функциями
Автор: @meskalinerush
Привет, друзья! В прошлом уроке мы научились создавать дерево Пифагора в Python c помощью кода, а также познакомились с основным инструментарием. А сейчас мы поэкспериментируем с функциями и командами, которые позволят преобразить дерево, полюбоваться на свою работы, закрепить навыки работы с кодом и похвастаться всем, что рисовал на python одну из систем Линдмайера.
- Для начала нам нужно открыть код, сохраненный на предыдущем уроке.Это делаем так: после открытия
jupyter-notebook-script.exe
из папкиC:/ProgramData/Anaconda3/Scripts/
мы переходим на открывшуюся вкладку браузера с компилятором и выбираем наш проект:
В новой вкладке открывается код. Теперь мы можем начать работу с ним! Для того, чтобы начать наши трансформации дерева Пифагора разберем верхнюю часть функций, описывающих наше растение:
> ```
> x=750 #это параметры расположения дерева
> y=750
> side=100 #сторона квадрата
> deep=12 #количество итераций
> alfa=math.pi/3
> ```
Теперь попробуем поменять цифры:
количество итераций изменим на 17, а сторону квадрата поменяем на 80
x=750 #это параметры расположения дерева
y=750
side=80 #сторона квадрата
deep=17 #количество итераций
alfa=math.pi/3
Запускаем код и смотрим, что вышло:
по сравнению с оригиналом мы видим, что дерево стало более кудрявым, что можно объяснить увеличением количества итераций с 12 до 17. Также дерево стало меньше, что объясняется уменьшением длины стороны квадарат до 80.
Теперь изменим параметр alfa=math.pi/3
. Он отвечает за угол треугольника, участвующего в построении дерева. Изменим этот параметр на alfa=math.pi/2
Легко понять, что при изменении угла меняется и структура построения. Теперь наше дерево стало называться "Обдуваемым ветром деревом Пифагора". И оно действительно похоже на это - как будто немного согнутое под порывом ветра.
снова меняем параметр на: alfa=math.pi/4
и видим:
Дерево стало наклонено в другую сторону! Не правда ли, очень интересно?! Аналогично будем поступать для следующих параметров.
Код ниже отвечает за соотношение сторон и определяет первичные параметры. Попробуем их поменять:
Было так:
*#* эта функция рекурсивно рисует дерево Пифагора
dx=side*math.sin(fi)
dy=side*math.cos(fi)
x1=x+dx
y1=y-dy
x2=x+dx-dy
y2=y-dy-dx
x3=x-dy
y3=y-dx
x4=x-dy+side*math.cos(alfa)*math.sin(fi-alfa)
y4=y-dx-side*math.cos(alfa)*math.cos(fi-alfa)
Стало так:
#эта функция рекурсивно рисует дерево Пифагора
dx=side*math.sin(fi)
dy=side*math.cos(fi)
x1=x+dx*2
y1=y-dy*2
x2=x+dx-dy
y2=y-dy-dx
x3=x-dy
y3=y-dx
x4=x-dy+side*math.cos(alfa)*math.sin(fi-alfa)
y4=y-dx-side*math.cos(alfa)*math.cos(fi-alfa)
Как видите, я изменил строки:
x1=x+dx
y1=y-dy
на эти:
x1=x+dx*2
y1=y-dy*2
И дерево стало таким:
Наши квадраты изменили свою форму и дерево преобразилось!
Теперь поэкспериментируем с кодом с учетом изменения предыдущих параметров.
Получается дерево бонсай!!
Теперь переходим к количеству деревьев - будем сажать еще одно растение.
Для этого дублируем строку из первоначальных параметров:
А сейчас нужно изменить координаты второго дерева, иначе оно будет лежать поверх первого.
Изменяем вторую строку:
Pyth_tree(x-100, y-100, side, math.pi/2, alfa*3/4, deep, 1)
меняем ее на
Pyth_tree(x-650, y-300, side, math.pi/2, alfa*3/3, deep, 1)
В этой строке мы изменили углы треугольника и его расположение:
Получается очень неплохой сад, к которому мы добавим еще сразу 2 дерева:
под нашими строчками добавим:
Pyth_tree(x+350, y-200, side/2, math.pi/2, alfa*4/5, deep, 1)
Pyth_tree(x+170, y-300, side*1.2, math.pi/2, alfa*1/7, deep, 1)
Выходит, у нас уже 4 строки:
с таким результатом:
Уже совершенно круто, результат мне нравится. Но мы пойдем еще дальше - давайте изменим цвет. Для этого нужно перейти к следующей строке, которая овечает за цвет неба:
canv = Canvas(root, width = 1600, height = 1200, bg = "lightgreen")
меняем ее так:
canv = Canvas(root, width = 1600, height = 1200, bg = "white")
Затем меняем цвет почвы:
canv.create_rectangle(0,1200,1600,1200-y, fill="#ADFF2F")
в данной строке за цвет отвечает значение: #ADFF2F
Его можно поменять на любой понравившийся отсюда (таблица цветов HTML):
http://www.stm.dp.ua/web-design/color-html.php
я взял унылый серый: #698B69
Общая картина сада у нас стала такой:
И в завершении наших фантастических перемен в ландшафте изменим цвет деревьев.
Строка else: colour="#66CDAA"
отвечает за конечные итерации нашего дерева, визуально - за листву.
HTML - цвет # 66CDAA" придал красивый цвет инея нашим деревьям.
Строки:
if count_deep<5:
colour="#"+str(count_deep*20)+"D600"
elif count_deep<9:
colour="#00"+str(count_deep*10)+"00"
отвечают за певые итерации и расцветку градиента. Можно с ними поэкспериментировать таким же образом, подбирая приятную расцветку.
На этом мы, пожалуй, закончим изучение данного иструментария и построение деревьев Пифагора. Надеюсь, что вы узнали достаточно много интересного и вас точно заинтересует создание фракталов не только в генераторах фрактальной графики, но еще и в довольно сложных пакетах c использованием современных языков программирования, наподобие Andromeda.
До новых встреч! Буду рад ответить на все вопросы и замечания!
Пост подготовил @meskalinerush для сообщества Fractal
Вы можете найти нас в:
Telegram: https://t.me/joinchat/GZmeKA5cSfYip429CpiMjA
E-mail: fractalteam@mail.ru
Также читайте нас в Steemit: https://steemit.com/@fractal-team