Árboles fractales en Python

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

Introducción Un árbol fractal se conoce como un árbol que se puede crear mediante la ramificación recursivamente simétrica.

Un tronco de longitud 1 se divide en dos ramas de longitud r, cada una de que forma un ángulo q con la dirección del barril. Ambas ramas se dividen en dos ramas de longitud r * r, cada una de las cuales forma un ángulo q con la dirección de su rama principal. Continuando así con una infinidad de ramas, un árbol es una colección de ramas junto con sus puntos limitantes, llamados puntas de rama.

Basta de teoría, ahora probemos la implementación en Python. Para esto, necesitamos dos bibliotecas de Python Pygame para la GUI o GUI y math, que es una biblioteca integrada en Python y se usará para ajustes matemáticos.

Para instalar Pygame

pip install pygame 

Entonces, cómo proceder, es muy recomendable que sepas un poco sobre pigmeos y fractales.

Primero cree el tronco y luego comience a crear ramas para cada tronco, asumiendo que el tamaño de la rama es 0.9 * (longitud del tallo) y luego trate las ramas como un tallo nuevamente, repitiendo el proceso.

# Importación de bibliotecas de python

importar pygame, matemáticas


# Inicializar cue todos los módulos de Pygame importados
pygame. init ()


# Crea una nueva superficie y ventana.

altura_superficie, ancho_de_superficie = 800 , 600 # Variables de superficie

superficie_principal = pygame.display.set_mode ((superficie_altura, superficie_ancho))


# Título de la ventana

pygame.display.set_caption ( "Fractal_Tree_pythonengineering" )


def dibujar_árbol (orden, theta, sz, pos n, encabezado, color = < /código> ( 0 , 0 , 0 ), profundidad = < /código> 0 ):


El relativo proporción del tronco a todo el árbol

trunk_ratio = 0,29


# Longitud del barril

tronco = sz * trunk_rati o

delta_x = tronco * math.cos (encabezado)

delta_y = tronco * math.sin (encabezado)

< clase de código = "espacios indefinidos" > (u, v) = posn

newpos = (u + delta_x, v + delta_y)

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


si orden > 0 : # Dibujar otra capa de subárboles


# Siguientes seis líneas - truco simple

# las dos mitades principales de la recursividad son diferentes

# colores. Juega aquí para cambiar los colores a otra

# profundidades, o cuando la profundidad es par o impar, etc.

si profundidad = = < /código> 0 :

< código clase ="simple "> color1 = ( 255 , 0 , 0 < /código> )

color2 = < código clase = "simple"> ( 0 , 0 , 255 )

else :

color1 = color

color2 = color


# hacer llamadas recursivas para dibujar dos subárboles

newsz = sz * ( 1 - trunk_ratio)

draw_tree (order - 1 , theta, newsz, newpos, encabezado - theta, color1, profundidad + 1 )

draw_tree (orden - 1 , theta, newsz, newpos, encabezado + theta, color2, profundidad + 1 )



def principal ():

theta = 0

while True :


# Actualizar esquina

theta + = 0.01

# Esta pequeña parte nos permite dibujar cosas

# todo en pantalla

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

draw_tree ( 9 , theta, surface_height * 0.9 < clase de código = "simple">, (surface_width / / 2 < /código> , ancho_superficie - 50 ), - < /código> math.pi / 2 )

pygame.display.flip()


# Llamando a la función principal
main()
pygame.quit()

Salir:

% MINIF YHTMLc707a572199fb7b4b8a82374bf37b87213%