Фрактальные деревья в Python

| | | | | |

Введение Фрактальное дерево известно как дерево, которое может быть создано путем рекурсивно-симметричного ветвления.

Ствол длины 1 разделяется на две ветви длины r, каждая из которых который образует угол q с направлением ствола. Обе эти ветви делятся на две ветви длины r*r, каждая из которых составляет угол q с направлением своей родительской ветви. Продолжая таким образом бесконечное число ветвей, дерево представляет собой набор ветвей вместе с их ограничивающими точками, называемыми вершинами ветвей.

Достаточно теории, теперь давайте попробуем реализовать на Python. Для этого нам нужны две библиотеки Python Pygame для графического интерфейса или графического интерфейса и math, которая является встроенной библиотекой Python и будет использоваться для математических настроек.

Чтобы установить Pygame

pip install pygame 

Итак, как действовать, настоятельно рекомендуется немного узнать о пигмеях и фракталах.

Сначала создайте ствол, а затем начните создавать ответвления для каждого ствола, предполагая, что размер ответвления равен 0,9 * (длина ствола), а затем снова рассматривайте ответвления как ствол, повторяя процесс.

# Импорт библиотек Python

import pygame, math


# Инициализировать все импортированные модули Pygame
pygame. init ()


# Создать новую поверхность и окно.

surface_height, surface_width = 800 , 600 # Поверхностные переменные

main_surface = pygame.display.set_mode ((surface_height, surface_width))


# Заголовок окна

pygame.display.set_caption ( "Fractal_Tree_pythonengineering" )


def draw_tree (order, theta, sz, pos n, заголовок, цвет = ( 0 , 0 <со de class = "plain">, 0 ), depth = 0 ):


Относительный отношение ствола ко всему дереву

trunk_ratio = 0,29


# Длина ствола

trunk = sz * trunk_rati o

delta_x = trunk * math.cos (заголовок)

delta_y = trunk * math.sin (заголовок)

(u, v) = posn

newpos = (u + delta_x, v + delta_y)

pygame.draw.line (main_surface, color, posn, newpos)


if порядок > 0 : # Нарисуйте еще один слой поддеревьев


# Следующие шесть строк - простой хак

# две основные части рекурсии различаются

# цветами. Поиграйте здесь, чтобы изменить цвета на другую

# глубину или когда глубина четная или нечетная и т. д.

if depth = = 0 :

color1 = ( 255 , 0 , 0 )

color2 = ( 0 , 0 , 255 )

else :

color1 = color

color2 = color


# делаем рекурсивные вызовы для рисования двух поддеревьев

newsz = sz * ( 1 - trunk_ratio)

draw_tree (order - 1 , theta, newsz, newpos, заголовок - theta, color1, depth + 1 )

draw_tree (порядок - 1 , theta, newsz, newpos, заголовок + theta, color2, depth + 1 )



def main():

theta = 0

while True :


# Обновление угла

theta + = 0.01

# Эта небольшая часть позволяет нам рисовать

# все на экране

main_surface.fill (( 255 , 255 , 0 ))

draw_tree ( 9 , theta, surface_height * 0,9 , (surface_width / / 2 <класс кода ="plain ">, ширина_поверхности - 50 ), - math.pi / 2 )

pygame.display.flip ()


# Вызов основной функции
main()
pygame.quit()

Выход:

% MINIF YHTMLc707a572199fb7b4b8a82374bf37b87213%      

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method