Python | Trazado de fractal espiral de Fibonacci usando Turtle

¿Qué es la Geometría Fractal?  
La geometría fractal es una forma especial de representación gráfica de funciones matemáticas o conjunto de números generados por una función matemática. Es un conjunto de matemáticas recursivo, detallado e infinitamente auto-similar. Estas representaciones geométricas exhiben “Simetría Desplegable” . La simetría de despliegue es la propiedad de las estructuras geométricas para retener un patrón auto-similar a una escala infinitesimalmente pequeña. 
Sabemos que la serie de Fibonacci sigue una relación recursiva f(n) = f(n-1) + f(n-2) , donde n es el enésimo término de la serie. De nuevo f(0) = 0, f(1) = 1
Enfoque para trazar el Fractal de Fibonacci
Cada número de la serie representa la longitud de los lados de un cuadrado. El cuadrado de lado 0 no existe. Así que comenzamos desde el cuadrado de lado 1. El siguiente cuadrado también tiene lado 1. 
 

  • Primero construimos los dos cuadrados de dimensión 1 uno al lado del otro como se muestra en la imagen de abajo.
  • Luego, tomando la longitud conjunta de los dos cuadrados, construimos un tercer cuadrado debajo de los dos cuadrados de dimensión 1. Ahora el cuadrado es de dimensión 2
  • De nuevo tomando los 2 cuadrados de dimensión 1, 2 respectivamente construimos el cuarto cuadrado de dimensión 3
  • Aunque continuamos este proceso por un pequeño número de iteraciones, este proceso continúa hasta el infinito.

Después de completar el dibujo de los cuadrados, comenzamos con el cuadrado más pequeño que está más adentro. Luego dibujamos cuadrantes continuos dentro de los cuadrados con el lado de cada cuadrado como el radio.
A continuación se muestra la implementación: 
 

Python3

# Python program for Plotting Fibonacci
# spiral fractal using Turtle
import turtle
import math
 
def fiboPlot(n):
    a = 0
    b = 1
    square_a = a
    square_b = b
 
    # Setting the colour of the plotting pen to blue
    x.pencolor("blue")
 
    # Drawing the first square
    x.forward(b * factor)
    x.left(90)
    x.forward(b * factor)
    x.left(90)
    x.forward(b * factor)
    x.left(90)
    x.forward(b * factor)
 
    # Proceeding in the Fibonacci Series
    temp = square_b
    square_b = square_b + square_a
    square_a = temp
     
    # Drawing the rest of the squares
    for i in range(1, n):
        x.backward(square_a * factor)
        x.right(90)
        x.forward(square_b * factor)
        x.left(90)
        x.forward(square_b * factor)
        x.left(90)
        x.forward(square_b * factor)
 
        # Proceeding in the Fibonacci Series
        temp = square_b
        square_b = square_b + square_a
        square_a = temp
 
    # Bringing the pen to starting point of the spiral plot
    x.penup()
    x.setposition(factor, 0)
    x.seth(0)
    x.pendown()
 
    # Setting the colour of the plotting pen to red
    x.pencolor("red")
 
    # Fibonacci Spiral Plot
    x.left(90)
    for i in range(n):
        print(b)
        fdwd = math.pi * b * factor / 2
        fdwd /= 90
        for j in range(90):
            x.forward(fdwd)
            x.left(1)
        temp = a
        a = b
        b = temp + b
 
 
# Here 'factor' signifies the multiplicative
# factor which expands or shrinks the scale
# of the plot by a certain factor.
factor = 1
 
# Taking Input for the number of
# Iterations our Algorithm will run
n = int(input('Enter the number of iterations (must be > 1): '))
 
# Plotting the Fibonacci Spiral Fractal
# and printing the corresponding Fibonacci Number
if n > 0:
    print("Fibonacci series for", n, "elements :")
    x = turtle.Turtle()
    x.speed(100)
    fiboPlot(n)
    turtle.done()
else:
    print("Number of iterations must be > 0")

Producción: 
 

Publicación traducida automáticamente

Artículo escrito por SAPI y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *