Создаем дерево Пифагора средствами Python
Автор: @meskalinerush
Привет, друзья! На прошлом занятии мы рассмотрели структуру дерева Пифагора, как пример систем Линдмайера, и попытались разобраться, что оно собой представляет. А сегодня мы попытаемся его построить самостоятельно с помощью языка программирования Python.
Python – это один из самых популярных языков программирования на сегодняшний день, обладающий широким функционалом. Но у нас нет цели изучать этот язык. Для нас важно построить какой-нибудь фрактал на нем, что мы и будем делать. Знаний языка вам не потребуется, я все расскажу.
Скачиваем Anaconda: https://www.anaconda.com/download/
Устанавливаем. На всякий случай вот описание установки на руссом: http://devpractice.ru/python-lesson-1-install/
После успешной установки идем по следующему пути:
C:/ProgramData/Anaconda3/Scripts/
Запускаем
jupyter-notebook-script.exe
из этой папки. Открывается черное окошко и заполняется текстом:
- Ждем. В браузере открывается новое окно с веб-интерфейсом:
- Не обращаем никакого внимания на все и жмем
New
и далееPython 3
- Созерцаем новое окно с редактором:
- Теперь непосредственно переходим к коду.
Я вам дам готовый код, который вы просто вставите в данное окно, и объясню, как именно он работает.
За знаком #
следуют пояснения и комментарии, которые не учитываются компилятором и пропускаются машиной, так как они предназначены для людей, чтобы делать пометки. В комментариях вы можете писать все, что угодно, даже стихи!
Копируем код с самого начала и до конца:
import math
#Модуль math – один из наиважнейших.
#Этот модуль предоставляет обширный функционал для работы с числами
from tkinter import *
#В данном случае эта запись означает,
#что мы импортируем модуль math из Tkinter
#Tkinter - кроссплатформенная библиотека
#для разработки графического интерфейса на языке Python
x=750 #это параметры расположения дерева
y=750
side=100 #сторона квадрата
deep=12 #количество итераций
alfa=math.pi/3
# объявляем функцию для построения дерева,
# которая принимает на вход заданные выше параметры
def Pyth_tree( x, y, side, fi, alfa, deep, count_deep):
#эта функция рекурсивно рисует дерево Пифагора
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)
if count_deep<5:
colour="#"+str(count_deep*20)+"0000"
elif count_deep<9:
colour="#00"+str(count_deep*10)+"00"
else: colour="#009900"
canv.create_polygon(x, y, x1, y1, x2, y2, x3, y3, fill=colour)
canv.create_polygon(x3, y3, x2, y2, x4, y4, fill=colour)
if deep>1:
Pyth_tree(x4, y4, side*math.sin(alfa), fi-alfa+math.pi/2, alfa, deep-1,count_deep+1)
Pyth_tree(x3, y3, side*math.cos(alfa), fi-alfa, alfa, deep-1,count_deep+1)
#при вызове нижеприведенной команды мы создаем базовое окно приложения
root=Tk();
root.title("Pifagor's tree")
#создание холста
canv = Canvas(root, width = 1600, height = 1200, bg = "lightgreen")
canv.pack()
canv.create_rectangle(0,1200,1600,1200-y, fill="#ADFF2F")
#рисуем 1 дерево
Pyth_tree(x-100, y-100, side, math.pi/2, alfa*3/4, deep, 1)
root.mainloop()
- Для ознакомления с результатом кода нажимаем на запуск:
Вот какое у нас получилось фрактальное деревцо!
Теперь мы сохраним результат.
И в заключение сохраним его в файл в удобное место на компьютере. Он нам понадобится на следующем уроке.
Надеюсь, теперь вам понятно, как примерно работают наши любимые фрактальные программы. Они похожи на нашу, только немного сложнее. :)
Пост подготовил @meskalinerush для сообщества Fractal
Вы можете найти нас в:
Telegram: https://t.me/joinchat/GZmeKA5cSfYip429CpiMjA
E-mail: fractalteam@mail.ru
Также читайте нас в Steemit: https://steemit.com/@fractal-team