1. Línea con Interpolación RGB y Grosor Dinámico
Algoritmo DDA/Bresenham con transición de color y control de grosor

Explicación del Algoritmo

Objetivo: Dibujar una línea entre dos puntos con interpolación de color RGB y grosor dinámico.


Características implementadas:

  • Algoritmo DDA: Calcula incrementos fraccionarios para suavizar la línea
  • Interpolación RGB: Transición lineal entre dos colores cualquiera
  • Grosor dinámico: Expansión de píxeles alrededor de la línea base

Algoritmo DDA:

  • Calculamos dx y dy (diferencias en x e y).
  • Determinamos los pasos según la mayor diferencia.
  • Calculamos incrementos en x e y por paso.
  • Iteramos, dibujando un círculo en cada punto con:
  • Color: Interpolamos el canal B de 0 a 255.
  • Grosor: Interpolamos el radio de 3 a 20 píxeles.

Requerimientos de Demostración

  • Tener Python instalado: Este algotirmo está desarrollado en Python
  • Instalar pygame
  • Instalar pygame_gui

                    
                
Demostración: Línea con interpolación de color RGB y grosor variable
2. Algoritmo de Elipse con Punto Medio

Implementación eficiente usando simetría de cuadrantes

Dalai Boada

Explicación del Algoritmo

Objetivo: Dibuja la elipse con semiejes a y b usando el algoritmo del punto medio


El Algoritmo del Punto Medio para circunferencias es un algoritmo usado para determinar los puntos necesarios para rasterizar una circunferencia.

Y al igual que el algoritmo de Bresenham para líneas, utiliza pura aritmética entera para ser muy eficiente

El objetivo del algoritmo es, para un punto (x,y) ya dibujado, decidir cuál de los dos píxeles posibles es el siguiente a dibujar


Este ejercicio es muy similar a la circunferencia, pero con dos radios distintos

Se aprovecha la simetría de las elipses. Una elipse es simétrica en dos ejes, lo que nos permite calcular solo los puntos para una octava parte del contorno y luego reflejar esos puntos para completar la figura.


Ejemplo Visual del Algoritmo del Punto Medio

Algoritmo

  • Se capturan el radio r y el centro de la circunferencia (xc, yc).
  • Se obtiene el primer punto de la circunferencia centrada en origen (xc, yc) como (0, r).
  • Se calcula el valor inicial del parámetro de decisión como p0=5/4 - r. Para k=0 hasta x>=y incrementa k Si pk < 0 *Siguiente punto de la circunferencia con centro (0,0) es (xk+1, yk). *pk+1=pk+2xk+1+1. Sino *Siguiente punto de la circunferencia con centro (0,0) es (xk+1, yk-1). *pk+1=pk+2xk+1+1-2yk+1. //Donde 2xk+1=2xk+2 y 2yk+1=2yk-2
  • Se determinan los puntos de simetría para los otros siete octantes.
  • Se mueve cada posición del pixel calculada (x,y) a la trayectoria circular centrada en (xc, yc) y trazamos los valores de las coordenadas: x=x+xc y y=y+yc.
  • Fin del para
  • Dada una elipse con centro (xc,yc) y radios a (eje x) y b (eje y):
  • Comienza en (x=0,y=b) en el primer cuadrante.
  • Calcula un valor de decisión inicial.
  • En cada paso, evalúa el signo de un nuevo parámetro de decisión para elegir entre mover el píxel hacia el este (E) o hacia el sureste (SE).
  • Refleja el píxel elegido en los otros tres cuadrantes.

                    
                
Demostración: Generación de elipses con diferentes parámetros

🚀 Descarga y Experimenta

Estos materiales complementan la explicación del ejercicio.

Adquiere el proyecto completo o experimenta con la demo en online.

3. Circunferencias
Determinar si puntos forman una circunferencia (centro y radio)

Explicación del Algoritmo

Su estructura es que define un punto en el plano con coordenadas X y Y.


Sus funciones claves son:

  1. Verifica si 3 puntos a,b y c están alineados, es decir, si son colineales.
  2. Usa el determinante de área del triángulo formado por los 3 puntos.
  3. Si el área es casi cero, los puntos son colineales.
  4. Luego calcula el centro y radio de la circunferencia que pasa por 3 puntos no colineales y usa fórmulas geométricas para encontrar centro y radio.
  5. Verifica si un punto p está sobre la circunferencia definida por centro y radio.
  6. Calcula la distancia entre p, el centro y compara con el radio.

Lógica

En su entrada:

  • Pide al usuario el número de puntos n.
  • Si n<3, no se puede definir una circunferencia.

En su lectura de puntos:

  • Guarda los puntos en un vector<punto>.

Verificación de colinealidad:

  • Comprueba si los primeros 3 puntos son colineales.
  • Si no lo son, no se puede definir una circunferencia.

Cálculo de circunferencia:

  • Calcula el centro y radio usando los primeros 3 puntos.

Verificación de pertenencias:

  • Recorre los puntos restantes y verifica si está sobre la circunferencia.
  • Si alguno no lo está, se indica que no todos pertenecen a la misma circunferencia.

Salida:

  • Muestra si todos los puntos están en la misma circunferencia y si es así, imprime su centro y radio.

                    
                
Demostración: A partir de n>2 coordenadas determina si es una circunferencia
4. Árbol Fractal
Figura fractal usando múltiples circunferencias

Explicación del Algoritmo

Objetivo: Dibujar una figura fractal con forma de flor utilizando circunferencias y elipses concéntricas, generadas recursivamente


Descripción General

El algoritmo usa recursión para crear una flor principal y, en la punta de cada pétalo, generar flores más pequeñas.

Cada nivel mantiene la misma estructura, pero con menor tamaño y un color ligeramente distinto, creando un patrón fractal.


Pasos principales

  • Inicialización del lienzo: Se crea una ventana de Tkinter con un Canvas donde se dibuja la figura y un panel lateral con controles para ajustar el radio, la cantidad de pétalos y la profundidad.
    • Función draw_flower():
    • Dibuja anillos concéntricos en el centro de la flor.
    • Calcula la posición de cada pétalo usando funciones trigonométricas (sin, cos).
    • Dibuja elipses como pétalos dispuestas radialmente.
    • En cada pétalo, se invoca recursivamente draw_flower() con un radio reducido, generando flores hijas.
  • Colores: Se emplea el modelo HSV (matiz, saturación, brillo) para variar los tonos de forma progresiva y convertirlos a formato hexadecimal (#rrggbb).
  • Controles interactivos: Los sliders permiten modificar los valores de radio, profundidad y pétalos, actualizando la figura al presionar “Redibujar”.

Conceptos Clave:

  • Recursión: Cada pétalo genera una flor hija más pequeña.
  • Simetría radial: Los pétalos se distribuyen uniformemente en torno al centro.
  • Escalado progresivo: El tamaño disminuye en cada nivel.
  • Color en HSV: Produce degradados suaves y armónicos.

Requisitos para ejecutar el sistema:

  • Python 3.7 o superior
  • No requiere librerías externas: Solo se usan los módulos estándar tkinter, math y colorsys.

                    
                
Demostración: A partir de n>2 coordenadas determina si es una circunferencia