Fraktale Bäume in Python

| | | | | |

Einführung Ein fraktaler Baum ist ein Baum, der durch rekursiv symmetrische Verzweigung erzeugt werden kann.

Ein Stamm der Länge 1 teilt sich in zwei Äste der Länge r, jeder davon die einen Winkel q mit der Laufrichtung bildet. Diese beiden Zweige sind in zwei Zweige der Länge r * r unterteilt, die jeweils einen Winkel q mit der Richtung ihres übergeordneten Zweigs bilden. Auf diese Weise unendlich viele Äste fortsetzend, ist ein Baum eine Ansammlung von Ästen zusammen mit ihren Begrenzungspunkten, den so genannten Astspitzen.

Genug der Theorie, jetzt versuchen wir die Implementierung in Python. Dafür benötigen wir zwei Python-Bibliotheken Pygame für die GUI oder GUI und math, was eine eingebaute Bibliothek in Python ist und für mathematische Optimierungen verwendet wird.

Um Pygame zu installieren

pip installiere pygame 

Also, wie du vorgehen musst, es wird dringend empfohlen, dass du ein wenig über Pygmäen und Fraktale weißt.

Erstellen Sie zuerst einen Stamm und beginnen Sie dann mit dem Erstellen von Zweigen für jeden Stamm, wobei Sie davon ausgehen, dass die Zweiggröße 0,9 * (Stammlänge) beträgt, und behandeln Sie die Zweige dann erneut als Stamm und wiederholen Sie den Vorgang.

# Python-Bibliotheken importieren

import pygame, math


# Alle importierten Pygame-Module initialisieren
pygame. init ()


# Erstellt eine neue Oberfläche und ein neues Fenster.

surface_height, surface_width = 800 , 600 # Oberflächenvariablen

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


# Fenstertitel

pygame.display.set_caption ( "Fractal_Tree_pythonengineering" )


def draw_tree (Reihenfolge, theta, sz, pos n, Überschrift, Farbe = ( 0 , 0 , 0 ), Tiefe = 0 ):


Der relative Verhältnis des Stammes zum gesamten Baum

trunk_ratio = 0,29


# Lauflänge

trunk = sz * trunk_rati o

delta_x = trunk * math.cos (heading)

delta_y = trunk * math.sin (heading)

(u, v) = posn

newpos = (u + delta_x, v + delta_y)

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


if order > 0 : # Zeichne eine weitere Ebene von Teilbäumen


# Die nächsten sechs Zeilen - einfacher Hack

# die beiden Haupthälften der Rekursion sind unterschiedlich

# Farben. Fummeln Sie hier herum, um die Farben in andere

# Tiefen zu ändern, oder wenn die Tiefe gerade oder ungerade ist usw.

wenn Tiefe = = 0 :

color1 = ( 255 , 0 , 0 )

color2 = ( 0 , 0 , 255 )

else :

color1 = color

color2 = color


# rekursive Aufrufe durchführen, um zwei Teilbäume zu zeichnen

newsz = sz * ( 1 - trunk_ratio)

draw_tree (order - 1 , theta, newsz, newpos, header - Theta, Farbe1, Tiefe + 1 )

draw_tree (order - 1 , theta, newsz, newpos, header + Theta, Farbe2, Tiefe + 1 )



def main ():

theta = 0

while True :


# Ecke aktualisieren

theta + = 0.01

# Dieser kleine Teil lässt uns Dinge zeichnen

# alles auf dem Bildschirm

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

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

pygame.display.flip ()


# Aufruf der main-Funktion
main ()
pygame.quit ()

Exit:

% 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