Leer Primero

Como se utiliza este blog?

sábado, 8 de marzo de 2025

Triángulo de Sierpinski en Python utilizando el módulo Python Turtle

Bienvenido a mi blog, hoy hablaremos un poco sobre el triángulo de Sierpiński, el cual es un fractal que se construye a partir de un triángulo equilátero y se obtiene al repetir infinitas veces un algoritmo geométrico. Dicho triángulo lleva el nombre del matemático polaco Wacław Franciszek Sierpiński (Varsovia, 1882-1969), quien creó varios objetos fractales, entre ellos el conocido triángulo de Sierpiński. De manera análoga al conjunto de Cantor, este fractal puede obtenerse mediante una sucesión infinita de extracciones.

Fractal (del latín fractus, "irregular", "fragmentado") es una palabra acuñada por el matemático Benoît Mandelbrot para describir la repetición "infinita" de patrones geométricos a diferentes escalas, los cuales muestran versiones cada vez más pequeñas de sí mismos. Las partes pequeñas de un fractal, explicaba Mandelbrot, son semejantes al todo, es decir, al conjunto completo. Lo más interesante es que el matemático demostró que la mayoría de las formas de la naturaleza son fractales. Estos se han utilizado para explicar fenómenos atmosféricos, analizar las redes vasculares y neuronales del cuerpo humano, calcular la longitud de las costas, explicar el crecimiento de los cerebros de los mamíferos, estudiar los seísmos... Incluso en telecomunicaciones se han diseñado antenas fractales, como las que utilizan los teléfonos celulares actuales, ya que mejoran el rendimiento y permiten reducir la longitud de los hilos de estas, disminuyendo a su vez el espacio que ocupan.

En el contexto de los fractales, la iteración se refiere a la aplicación repetida de una regla o un procedimiento para generar la forma o estructura compleja del fractal. En la creación del triángulo de Sierpiński, una fórmula matemática se aplica repetidamente, produciendo un patrón característico. La cantidad de veces que se aplica la fórmula se conoce como el nivel de iteración. La autosimilitud es una característica de los fractales que hace referencia a su capacidad para mantener un patrón o forma similar a sí mismos en diferentes escalas. En otras palabras, una porción de un fractal se asemeja a su forma completa, sin importar la escala en la que se observe. Esta propiedad se conoce como simetría fractal. La autosimilitud es una de las características que hacen que los fractales sean tan interesantes y únicos en el mundo de las matemáticas.

Para generar el triángulo de Sierpiński, vamos a utilizar Python Turtle, un módulo de Python que permite crear gráficos vectoriales mediante comandos simples. Estos comandos controlan un cursor, conocido como tortuga (turtle), que se mueve por la pantalla y dibuja líneas y figuras geométricas, permitiéndonos crear diseños personalizados. Es comúnmente utilizado en la enseñanza de la programación, ya que es fácil de entender y usar. Con Python Turtle, los estudiantes pueden aprender conceptos básicos de programación, como bucles, condicionales y funciones, mientras crean sus propios gráficos. Para utilizar Python Turtle, primero debemos importar el módulo en nuestro script. Luego, podemos crear una instancia de turtle y emplear los comandos mencionados anteriormente para dibujar en la pantalla. Hoy aprenderemos a dibujar el triángulo de Sierpiński con el módulo Python Turtle.

En el siguiente código Python utilizamos el módulo Turtle para dibujar un triángulo equilátero y el triángulo total se forma mediante iteraciones, acá tenemos el desglose del código comentado:

# -------------------------------------------------------------------------
# (| " TriánguloSierpinski.py                                           "|)
# (| "                                                                  "|)
# (| " Script que genera el fractal del triángulo de sierpinski para    "|)
# (| " mostrar a modo de ejemplo, cómo se realiza el procedimiento.     "|)
# (| "                                                                  "|)
# (| " Este código de ejemplo es de dominio público.                    "|)
# (| "                                                                  "|)
# (| " Developer: jorgechac© - Técnico Laboral en Programación UNAB     "|)
# (| " Visita  https://jorgechac.blogspot.com                           "|)
# (| "                                                                  "|)
# (| " Venta de accesorios Arduino/Raspberry Pi Pico/ESP32   	        "|)
# (| " Whatsapp y Ventas NEQUI +573177295861                            "|)
# (| " Bucaramanga - Colombia                                           "|)
# -------------------------------------------------------------------------
import turtle  # Importa la biblioteca turtle para gráficos
import math    # Importa la biblioteca math para cálculos matemáticos

# Función recursiva para dibujar el triángulo de Sierpinski
def sierpinski(t, order, size):
    if order == 0:           # Caso base: dibuja un triángulo equilátero
        for _ in range(3):
            t.forward(size)  # Dibuja un lado del triángulo
            t.left(120)      # Gira a la izquierda 120 grados
    else:
        # Llamadas recursivas para dibujar triángulos más pequeños
        sierpinski(t, order-1, size/2)  # Triángulo inferior izquierdo
        t.forward(size/2)  # Mueve la tortuga a la derecha
        sierpinski(t, order-1, size/2)  # Triángulo inferior derecho
        t.backward(size/2)  # Regresa a la posición original
        t.left(60)  # Gira a la izquierda
        t.forward(size/2)  # Mueve la tortuga hacia arriba
        t.right(60)  # Corrige la dirección
        sierpinski(t, order-1, size/2)  # Triángulo superior
        t.left(60)  # Regresa la dirección original
        t.backward(size/2)  # Vuelve a la posición de inicio
        t.right(60)  # Corrige la orientación

# Configuración del nivel del fractal y tamaño del triángulo
order = 5  # Nivel de recursión del fractal
size = 500 # Tamaño del triángulo principal

# Configuración de la pantalla de Turtle
screen = turtle.Screen()
screen.bgcolor("white")  # Color de fondo blanco
screen.setup(width=size + 50, height=(size * math.sqrt(3)) / 2 + 100)
# Ajusta el tamaño de la ventana

# Configuración de la tortuga para dibujar
t = turtle.Turtle()
t.speed("fastest")  # Velocidad máxima de dibujo
t.pencolor("green") # Color del lápiz

# Posiciona la tortuga para centrar el triángulo en la pantalla
t.penup()  # Levanta el lápiz para mover sin dibujar
t.goto(-size/2, -size/(2*math.sqrt(3)) - 30)
# Mueve la tortuga a la posición inicial, más abajo
t.pendown()  # Baja el lápiz para empezar a dibujar

# Llama a la función para dibujar el fractal
sierpinski(t, order, size)

# Finaliza el dibujo
turtle.done()


Finalmente después de ejecutar el código, se abrirá una nueva ventana y se comenzará a generar la grafica en Python, así:



Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.



También te puede interesar:


Generación de Formas de Onda en Python utilizando la libreria Matplotlib y Numpy

Dibujo de un arbol de navidad utilizando el módulo Python Turtle

ARBOL DE NAVIDAD EN PYTHON

Dibujando en Python utilizando la libreria Matplotlib y Numpy

Dibujando en Python utilizando el módulo Python Turtle

Dibujo del logotipo de Python utilizando el módulo Python Turtle


jueves, 6 de marzo de 2025

Generación de Formas de Onda en Python utilizando la libreria Matplotlib y Numpy

Bienvenido a mi blog, hoy hablaremos un poco de la generación de formas de onda, la cual es la producción de patrones de señales analógicas o digitales, periódicas o no periódicas. Esta acción, se realiza físicamente mediante dispositivos electrónicos llamados generadores de formas de onda. Un generador de forma de onda, produce formas de onda precisas, incluyendo sinusoidales, cuadradas, triangulares y de rampa, así como formas de onda arbitrarias definidas por el usuario utilizando secuencias de datos o transmitiendo continuamente desde un host o instrumento "peer-to-peer" dentro de sistemas de pruebas de señal mixta.

La generación de formas de onda por software se puede realizar con programas especializados que permiten crear, editar y administrar dichas formas de onda, el día de hoy veremos la generación básica de algunas formas de onda en Python, para ello haremos uso de Matplotlib, la cuál es una librería completa para crear visualizaciones estáticas, animadas e interactivas en Python, y de igual forma también usaremos la librería NumPy, que nos trae el poder computacional de lenguajes como C y Fortran a Python, un lenguaje mucho más fácil de aprender y usar. Vamos a ello directamente y veamos el código en Python con sus respectivos comentarios explicativos:

# -------------------------------------------------------------------------
# (| " FormasdeOnda.py                                                  "|)
# (| "                                                                  "|)
# (| " Script que genera las formas de onda más conocidas para mostrar, "|)
# (| " a modo de ejemplo, cómo se realiza el procedimiento.             "|)
# (| "                                                                  "|)
# (| " Este código de ejemplo es de dominio público.                    "|)
# (| "                                                                  "|)
# (| " Developer: jorgechac© - Técnico Laboral en Programación UNAB     "|)
# (| " Visita  https://jorgechac.blogspot.com                           "|)
# (| "                                                                  "|)
# (| " Venta de accesorios Arduino/Raspberry Pi Pico/ESP32   	        "|)
# (| " Whatsapp y Ventas NEQUI +573177295861                            "|)
# (| " Bucaramanga - Colombia                                           "|)
# -------------------------------------------------------------------------
import numpy as np # Importamos la biblioteca NumPy para proporciona un
                   # objeto de matriz N-dimensional y funciones
                   # matemáticas de alto rendimiento para operar en esas
                   # matrices.
import matplotlib.pyplot as plt  # Importamos Matplotlib para graficar
                                 # y visualizar

# Definición de parámetros
T = 1  # Duración de la señal en segundos
fs = 1000  # Frecuencia de muestreo en Hz (muestras por segundo)
t = np.linspace(0, T, int(T * fs), endpoint=False)  # Vector de tiempo

# Onda Senoidal
f_sine = 5  # Frecuencia de la onda senoidal en Hz
sine_wave = np.sin(2 * np.pi * f_sine * t) # Generación de la señal senoidal

# Onda Cuadrada
f_square = 2  # Frecuencia de la onda cuadrada en Hz
duty_cycle = 0.01  # Ciclo de trabajo (porcentaje del período en alto)
square_wave = np.where(np.mod(np.floor(2 * duty_cycle * fs * t), 2) == 0, 1, -1)
# Generación de la señal cuadrada

# Onda Triangular
f_triangle = 1  # Frecuencia de la onda triangular en Hz
triangle_wave = 2 * np.abs((10 * f_triangle * t) % 2 - 1) - 1
# Generación de la señal triangular

# Onda Diente de Sierra
f_sawtooth = 10  # Frecuencia de la onda diente de sierra en Hz
sawtooth_wave = 2 * (f_sawtooth * t - np.floor(f_sawtooth * t + 0.5))
# Generación de la señal diente de sierra

# Gráfica de las ondas
fig, axs = plt.subplots(4, 1, sharex=True, figsize=(8, 8))
# Crea una figura con 4 subgráficos

axs[0].plot(t, sine_wave)  # Grafica la onda senoidal
axs[0].set_title('Onda Senoidal')  # Título del primer gráfico

axs[1].plot(t, square_wave)  # Grafica la onda cuadrada
axs[1].set_title('Onda Cuadrada')  # Título del segundo gráfico

axs[2].plot(t, triangle_wave)  # Grafica la onda triangular
axs[2].set_title('Onda Triangular')  # Título del tercer gráfico

axs[3].plot(t, sawtooth_wave)  # Grafica la onda diente de sierra
axs[3].set_title('Onda Diente de Sierra')  # Título del cuarto gráfico

plt.xlabel('Tiempo (seg)')  # Etiqueta del eje X para todas las gráficas
plt.show()  # Muestra la gráfica

Finalmente después de ejecutar el código, se abrirá una nueva ventana y se comenzará a generar la grafica en Python con matplotlib, así:


Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.



También te puede interesar:


Dibujo de un arbol de navidad utilizando el módulo Python Turtle

ARBOL DE NAVIDAD EN PYTHON

Dibujando en Python utilizando la libreria Matplotlib y Numpy

Dibujando en Python utilizando el módulo Python Turtle

Dibujo del logotipo de Python utilizando el módulo Python Turtle