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%      

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


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