Drzewa fraktalne w Pythonie

| | | | | | | | | | | | | | | | | | | |

Wprowadzenie Drzewo fraktalne jest znane jako drzewo, które można utworzyć przez rekurencyjnie symetryczne rozgałęzienia.

Pnia o długości 1 dzieli się na dwie gałęzie o długości r, z których każda ma który tworzy kąt q z kierunkiem lufy. Obie te gałęzie są podzielone na dwie gałęzie o długości r * r, z których każda tworzy kąt q z kierunkiem swojej gałęzi macierzystej. Kontynuując w ten sposób nieskończoną liczbę gałęzi, drzewo jest zbiorem gałęzi wraz z ich punktami granicznymi, zwanymi końcówkami gałęzi.

Dość teorii, teraz wypróbujmy implementację w Pythonie. W tym celu potrzebujemy dwóch bibliotek Pythona Pygame dla GUI lub GUI oraz math, która jest wbudowaną biblioteką w Pythonie i będzie używana do poprawek matematycznych.

Aby zainstalować Pygame

pip zainstaluj pygame 

Więc jak postępować, wysoce zalecane jest, aby wiedzieć trochę o pigmejach i fraktalach.

Najpierw utwórz pień, a następnie zacznij tworzyć gałęzie dla każdego pnia, zakładając, że rozmiar gałęzi wynosi 0,9 * (długość łodygi), a następnie ponownie traktując gałęzie jako łodygę, powtarzając proces.

# Importowanie bibliotek Pythona

import pygame, math


# Zainicjuj cue wszystkie zaimportowane moduły Pygame
pygame. init()


# Utwórz nową powierzchnię i okno.

surface_height, surface_width = 800 , 600 # zmiennych powierzchni

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


# Tytuł okna

pygame.display.set_caption ( "Fractal_Tree_pythonengineering" )


def draw_tree (kolejność, theta, sz, pos n, nagłówek, kolor = ( 0 , 0 , 0 ), głębokość = 0 ):


Względne stosunek pnia do całego drzewa

trunk_ratio = 0,29


# Długość beczki

trunk = sz * trunk_rati o

delta_x = trunk * math.cos (nagłówek)

delta_y = trunk * math.sin (nagłówek)

(u, v) = posn

newpos = (u + delta_x, v + delta_y)

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


if zamówienie > 0 : # Narysuj kolejną warstwę poddrzew


# Kolejne sześć linii - prosty hack

# dwie główne połowy rekurencji są różne

# kolorów. Graj tutaj, aby zmienić kolory na inne

# głębokości lub gdy głębokość jest parzysta lub nieparzysta itp.

if głębokość = = 0 :

color1 = ( 255 , 0 , 0 )

color2 = ( 0 , 0 , 255 )

else :

color1 = color

color2 = color


# wykonaj rekurencyjne wywołania, aby narysować dwa poddrzewa

newsz = sz * ( 1 - trunk_ratio)

draw_tree (kolejność - 1 , theta, newsz, newpos, nagłówek - theta, color1, depth + 1 )

draw_tree (kolejność - 1 , theta, newsz, newpos, nagłówkiem + teta, color2, głębokość + 1 )



def main ():

theta = 0

while Prawda :


# Aktualizacja rogu

theta + = 0,01

# Ta mała część pozwala nam rysować

# wszystko na ekranie

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

draw_tree ( 9 , theta, surface_height * 0,9 , (surface_width / / 2 , powierzchnia_width - 50 ), - math.pi / 2 )

pygame.display.flip ()


# Wywołanie funkcji głównej
main ()
pygame.quit ()

Wyjście:

% MINIF YHTMLc707a572199fb7b4b8a82374bf37b87213%