Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
fractal
6 лет назад

Создание дерева Пифагора в 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


Дизайн: @dasarts

66
71.918 GOLOS
На Golos с September 2017
Комментарии (5)
Сортировать по:
Сначала старые