Portfolio de Simulación - 3.º Multimedia

Una recopilación amena de ejercicios y practicas de la asignatura

Ejercicio 1: Simulación de una Montaña Rusa

En este ejercicio, se ha desarrollado una simulación en Processing en la que una partícula sigue una serie de tramos generados automáticamente, representando el recorrido de una montaña rusa. La partícula avanza a través de los tramos con una velocidad específica hasta completar el recorrido, momento en el cual la simulación se reinicia para generar un nuevo circuito aleatorio.

Fundamentos Matemáticos

1. Generación de Puntos

La carretera está formada por \( n_{\text{tramos}} \) puntos, distribuidos equidistantemente en el eje \( x \), mientras que su coordenada \( y \) se genera de manera aleatoria dentro de los límites de la pantalla.

La posición de cada punto \( P_i \) se define por:

\[ x_i = \frac{i}{n_{\text{tramos}} - 1} \cdot W, \quad y_i = \text{random}(0, H) \]

donde:

  • \( x_i \): posición en el eje horizontal.
  • \( y_i \): posición en el eje vertical.
  • \( W \): ancho total del área de simulación.
  • \( H \): altura máxima permitida para la carretera.

2. Cálculo de Velocidades

Cada tramo tiene una dirección determinada por la diferencia entre el punto inicial y el punto final del tramo:

\[ \vec{d_i} = P_{i+1} - P_i \]

Para convertir este vector en un vector unitario, se normaliza dividiéndolo entre su magnitud:

\[ \hat{d_i} = \frac{\vec{d_i}}{\|\vec{d_i}\|} \]

donde:

  • \( \vec{d_i} \) es el vector dirección del tramo.
  • \( \hat{d_i} \) es el vector unitario que indica la dirección normalizada.

La velocidad de la partícula en cada tramo es proporcional a este vector unitario, escalada por una magnitud aleatoria:

\[ \vec{v_i} = \hat{d_i} \cdot v_{\text{módulo}} \]

donde \( v_{\text{módulo}} \) es un valor aleatorio en un rango determinado para simular diferentes velocidades en distintos tramos.

3. Movimiento de la Partícula

La posición de la partícula en el tiempo \( t \) se actualiza en cada iteración de la simulación usando la ecuación:

\[ P(t) = P_{\text{actual}} + \vec{v} \cdot \Delta t \]

donde:

  • \( P(t) \) es la nueva posición en el instante \( t \).
  • \( P_{\text{actual}} \) es la posición de la partícula antes de actualizarse.
  • \( \vec{v} \) es la velocidad de la partícula en el tramo actual.
  • \( \Delta t \) es el paso de tiempo de la simulación.

Para asegurarnos de que la partícula pase por cada punto y no lo sobrepase debido a la velocidad, se verifica si la distancia al siguiente punto es menor que la distancia que avanzará en el siguiente paso:

\[ \| P_{\text{actual}} - P_{i+1} \| \leq \|\vec{v_i} \cdot \Delta t \| \]

4. Reinicio de la Simulación

Cuando la partícula alcanza el último tramo de la montaña rusa, la simulación se reinicia para generar una nueva estructura aleatoria.

Visualización

Ejercicio 2: Simulación de la Caída de un Paracaidista

En este ejercicio, se ha modelado la caída de un paracaidista utilizando métodos numéricos para resolver la ecuación diferencial de su movimiento. Se comparan diferentes métodos de integración para analizar la precisión y estabilidad de cada uno.

Datos del Problema

Parámetro Valor
Aceleración gravitatoria (\( g \)) 9.80 m/s²
Masa del paracaidista (\( m \)) 60.00 kg
Coeficiente de arrastre (\( c \)) 80.00 kg/s
Paso de tiempo (\( dt \)) 0.10 s
Condición inicial (\( v_0 \)) 0.00 m/s

Modelo Matemático

La ecuación diferencial que describe la velocidad del paracaidista bajo la acción de la gravedad y la resistencia del aire es:

\[ \frac{dv}{dt} = g - \frac{c}{m} v \]

donde:

  • \( v \) es la velocidad del paracaidista.
  • \( g \) es la aceleración gravitatoria.
  • \( c \) es el coeficiente de arrastre del aire.
  • \( m \) es la masa del paracaidista.

Métodos Numéricos Aplicados

Se han utilizado tres métodos numéricos para aproximar la solución de la ecuación diferencial:

1. Método de Euler Explícito

El método de Euler explícito estima la velocidad en el siguiente paso como:

\[ v_{n+1} = v_n + \Delta t \cdot \left( g - \frac{c}{m} v_n \right) \]

2. Método Semi-implícito

Este método mejora la estabilidad de Euler explícito al actualizar primero la aceleración y luego la velocidad:

\[ v_{n+1} = v_n + \Delta t \cdot \left( g - \frac{c}{m} v_{n+1} \right) \]

3. Método de Heun (RK2)

Este método mejora la precisión utilizando un predictor y un corrector:

\[ v_{\text{pred}} = v_n + \Delta t \cdot \left( g - \frac{c}{m} v_n \right) \]

\[ v_{n+1} = v_n + \frac{\Delta t}{2} \cdot \left[ \left( g - \frac{c}{m} v_n \right) + \left( g - \frac{c}{m} v_{\text{pred}} \right) \right] \]

Resultados y Comparación

Se han comparado las soluciones numéricas con la solución real del problema, obteniendo los siguientes resultados:

  • Euler Explícito: Método simple, pero con errores acumulativos significativos.
  • Semi-implícito: Mayor estabilidad que Euler, pero sigue teniendo desviaciones.
  • Heun (RK2): Mayor precisión, ya que corrige la estimación en cada paso.

Visualización

Gráfica de la simulación del paracaidista

La gráfica muestra la evolución de la velocidad del paracaidista a lo largo del tiempo, comparando los diferentes métodos numéricos con la solución real.

Ejercicio 3: Integración Numérica de una Ecuación Diferencial

En este ejercicio se ha resuelto numéricamente la ecuación diferencial mediante diferentes métodos, comparando sus resultados con la solución exacta.

Datos del Problema

Parámetro Valor
Ecuación diferencial \(\frac{dy}{dx} = -2x^3 + 12x^2 - 20x + 8.5\)
Rango de integración \(x = 0\) a \(x = 4\)
Paso de integración (\(dt\)) 0.50
Condición inicial \( y(0) = 1 \)
Solución exacta \( y = -0.5x^4 + 4x^3 - 10x^2 + 8.5x + 1 \)

Modelo Matemático

La ecuación diferencial que describe el sistema es:

\[ \frac{dy}{dx} = -2x^3 + 12x^2 - 20x + 8.5 \]

La solución exacta de esta ecuación, que utilizaremos para calcular el error en los métodos numéricos, es:

\[ y = -0.5x^4 + 4x^3 - 10x^2 + 8.5x + 1 \]

Métodos Numéricos Aplicados

Se han implementado tres métodos numéricos para resolver la ecuación diferencial:

1. Método de Euler Explícito

Se basa en la fórmula:

\[ y_{n+1} = y_n + \Delta t \cdot f(x_n, y_n) \]

donde \( f(x, y) \) es la ecuación diferencial evaluada en \( x_n, y_n \).

2. Método Semi-implícito

Este método introduce una corrección en el cálculo de \( y_{n+1} \), mejorando la estabilidad del método de Euler:

\[ y_{n+1} = y_n + \Delta t \cdot f(x_{n+1}, y_{n+1}) \]

3. Método de Heun (RK2)

También conocido como método del punto medio, mejora la precisión utilizando una aproximación intermedia:

\[ y_{\text{pred}} = y_n + \Delta t \cdot f(x_n, y_n) \]

\[ y_{n+1} = y_n + \frac{\Delta t}{2} \left[ f(x_n, y_n) + f(x_{n+1}, y_{\text{pred}}) \right] \]

Resultados y Comparación

Se han comparado los valores obtenidos con los diferentes métodos numéricos respecto a la solución exacta, evaluando también el error cometido en cada aproximación.

  • Euler Explícito: Método simple pero con errores acumulativos notables.
  • Semi-implícito: Mayor estabilidad, aunque sigue presentando desviaciones.
  • Heun (RK2): Mayor precisión gracias a la corrección en cada paso.

Visualización

Gráfica de integración numérica

La gráfica muestra la evolución de la solución numérica en comparación con la solución exacta, permitiendo visualizar el error cometido en cada método.

Ejercicio 4: Movimiento Circular con Cinemática Angular

En este ejercicio se ha simulado el movimiento de una bola alrededor de un punto fijo a una distancia \( r \), completando una vuelta por segundo. Para ello, se han aplicado los conceptos de cinemática angular.

Datos del Problema

Parámetro Valor
Radio del movimiento (\( r \)) 100 píxeles
Periodo (\( T \)) 1 segundo
Frecuencia (\( f \)) \( \frac{1}{T} = 1 \) Hz
Velocidad angular (\( w \)) \( w = 2\pi f = \frac{2\pi}{T} \)

Modelo Matemático

La velocidad angular \( w \) se define como:

\[ w = \frac{\Delta \theta}{\Delta t} = \frac{2\pi}{T} \]

La posición de la bola en cada instante de tiempo se obtiene con las ecuaciones paramétricas:

\[ x(t) = r \cdot \cos(w \cdot t) \]

\[ y(t) = r \cdot \sin(w \cdot t) \]

donde:

  • \( x, y \) son las coordenadas de la bola en cada instante.
  • \( r \) es la distancia fija al centro de rotación.
  • \( w \) es la velocidad angular.
  • \( t \) es el tiempo transcurrido desde el inicio del movimiento.

Implementación en Processing

Se ha implementado este modelo en Processing, asegurando que la animación sea fluida y precisa. Se utiliza la función `frameRate(60)` para garantizar que la actualización del tiempo sea precisa, manteniendo una vuelta por segundo.

Visualización

La imagen muestra el movimiento circular de la bola, siguiendo las ecuaciones paramétricas. Se observa cómo la trayectoria es una circunferencia perfecta con un desplazamiento uniforme en el tiempo.

Ejercicio 5: Movimiento Armónico Simple y Combinación de Frecuencias

En este ejercicio se ha simulado el movimiento de una partícula siguiendo una combinación de oscilaciones armónicas, donde la posición en el eje \( y \) depende de la suma de dos funciones seno con frecuencias cercanas.

Datos del Problema

Parámetro Valor
Frecuencia 1 (\( f_1 \)) 3 Hz
Frecuencia 2 (\( f_2 \)) 3.5 Hz
Amplitud (\( A \)) 50 píxeles
Velocidad en \( x \) (\( v \)) 2 píxeles por fotograma

Modelo Matemático

La partícula se mueve con velocidad constante en el eje \( x \), mientras que su posición en \( y \) sigue la ecuación:

\[ y(x) = 0.5 \sin(3x) + 0.5 \sin(3.5x) \]

donde:

  • \( x \) es la posición horizontal de la partícula.
  • \( y(x) \) es la posición vertical determinada por la suma de las funciones seno.
  • \( 3x \) y \( 3.5x \) representan las frecuencias de las ondas.

Implementación en Processing

Se ha implementado este modelo en Processing, asegurando que la animación sea fluida y que la partícula se mueva a través del lienzo con un comportamiento oscilatorio definido por la combinación de ondas.

Visualización

El video muestra el movimiento oscilatorio de la partícula, evidenciando la interacción de las dos frecuencias y su efecto en la trayectoria final.

Ejercicio 6: Bubble Shooter con Vectores

En este ejercicio se ha desarrollado un lanzador de bolas con velocidad constante, donde cada bola es disparada en dirección al clic del usuario y se mueve siguiendo un vector de velocidad calculado dinámicamente.

Datos del Problema

Parámetro Valor
Posición de origen (\( x_0, y_0 \)) Centro inferior de la pantalla
Velocidad de las bolas (\( v \)) 5 píxeles por fotograma
Dirección Hacia la posición del clic

Modelo Matemático

La dirección del disparo se calcula como un vector unitario normalizado desde el punto de origen hasta el punto de clic:

\[ \vec{d} = (x_{\text{clic}} - x_0, y_{\text{clic}} - y_0) \]

\[ \hat{d} = \frac{\vec{d}}{\|\vec{d}\|} \]

Luego, la velocidad de la bola se obtiene escalando el vector de dirección por una magnitud constante \( v \):

\[ \vec{v} = \hat{d} \cdot v \]

Implementación en Processing

Se ha implementado este modelo en Processing, permitiendo que cada bola lanzada siga su trayectoria sin aceleración adicional. Las bolas desaparecen al salir de la pantalla.

Visualización

El video muestra el lanzador en acción, permitiendo disparar múltiples bolas en distintas direcciones y observando su movimiento uniforme.

Ejercicio 7: Dinámica de una Partícula con Fuerzas

En este ejercicio se ha simulado la dinámica de una partícula, aplicando la segunda ley de Newton para actualizar su movimiento en función de las fuerzas externas que actúan sobre ella.

Datos del Problema

Parámetro Valor
Masa (\( m \)) 2 kg
Fuerza aplicada (\( F \)) Variable
Aceleración (\( a \)) \( a = \frac{F}{m} \)
Ecuaciones de movimiento \( v = v_0 + a t \), \( x = x_0 + v t \)

Modelo Matemático

La aceleración de la partícula está determinada por la segunda ley de Newton:

\[ F = m a \]

Despejando la aceleración:

\[ a = \frac{F}{m} \]

Una vez obtenida la aceleración, se actualiza la velocidad y la posición en cada instante de tiempo utilizando las ecuaciones:

\[ v = v_0 + a t \]

\[ x = x_0 + v t \]

donde:

  • \( v \) es la velocidad de la partícula.
  • \( x \) es la posición de la partícula en cada instante.
  • \( a \) es la aceleración determinada por las fuerzas aplicadas.
  • \( t \) es el tiempo transcurrido.

Implementación en Processing

Se ha implementado este modelo en Processing, donde la partícula cae debido a la gravedad y el usuario puede aplicar fuerzas al hacer clic.

Visualización

El video muestra cómo la partícula se mueve bajo la influencia de la gravedad y cómo el usuario puede aplicarle fuerzas para alterar su trayectoria.

Ejercicio 8: Métodos RK2 y RK4 para la integración numérica

En este ejercicio se ha aplicado el método de Runge-Kutta de orden 2 (RK2) y el Runge-Kutta de orden 4 (RK4) para resolver la ecuación diferencial:

\( \frac{dy}{dx} = -2x^3 + 12x^2 - 20x + 8.5 \)

La ecuación ha sido integrada en el intervalo \( x = 0 \) hasta \( x = 2.4 \) con un paso de integración \( dt = 0.15 \). Se compararon los resultados obtenidos con los métodos numéricos RK2 y RK4 frente a la solución real.

Método RK2

El método RK2 (segundo orden) utiliza dos evaluaciones de la función en cada paso de integración:

\( k_1 = f(x_n, y_n) \cdot dt \)

\( k_2 = f(x_n + dt, y_n + k_1) \cdot dt \)

\( y_{n+1} = y_n + \frac{1}{2} (k_1 + k_2) \)

Método RK4

El método RK4 (cuarto orden) mejora la precisión utilizando cuatro evaluaciones por paso:

\( k_1 = f(x_n, y_n) \cdot dt \)

\( k_2 = f(x_n + dt/2, y_n + k_1/2) \cdot dt \)

\( k_3 = f(x_n + dt/2, y_n + k_2/2) \cdot dt \)

\( k_4 = f(x_n + dt, y_n + k_3) \cdot dt \)

\( y_{n+1} = y_n + \frac{1}{6} (k_1 + 2k_2 + 2k_3 + k_4) \)

Resultados y análisis

Las siguientes gráficas muestran la comparación entre los diferentes métodos y sus errores respectivos.

Gráfica de métodos numéricos

Comparación de los valores obtenidos con diferentes métodos numéricos.

Gráfica de errores

Errores cometidos por los métodos de integración respecto a la solución exacta.

Análisis de las gráficas

La primera gráfica muestra cómo los métodos RK2 y RK4 se acercan a la solución real de la ecuación diferencial. Se observa que el método RK4 ofrece una mejor aproximación a lo largo de todo el dominio, mientras que RK2 presenta una menor precisión pero sigue siendo superior a los métodos explícitos y semi-implícitos.

En la segunda gráfica, donde se representan los errores, se puede notar que el método RK4 tiene los errores más pequeños en comparación con RK2 y los demás métodos. Mientras que Euler explícito y el método semi-implícito presentan errores significativamente mayores, RK2 logra reducirlos en gran medida, aunque sigue siendo superado por RK4, que mantiene un error más bajo y estable en todo el intervalo.

Practica 1: Sistema de 4 muelles

En esta práctica se simula el movimiento de una partícula conectada a cuatro muelles, anclados en los vértices de un cuadrado. Se analizan las fuerzas que actúan sobre la partícula, incluyendo las elásticas de los muelles, el peso por la gravedad y una fuerza de fricción proporcional al cuadrado de la velocidad. La simulación se desarrolla en Processing implementando diversos métodos de integración numérica.

Fundamentos Físicos

La partícula está sometida a varias fuerzas: la fuerza elástica de cada muelle \( \vec{F}_e = -k (l - l_0) \hat{l} \), donde \( l \) es la elongación actual y \( l_0 \) la de reposo; la fuerza gravitatoria \( \vec{F}_g = m \cdot \vec{g} \); y la fuerza de fricción \( \vec{F}_d = -k_d \cdot \vec{v}^2 \cdot \hat{v} \).

La dinámica del sistema se resuelve mediante integración numérica con los métodos: Euler explícito, Euler semi-implícito, Heun, RK2 y RK4. Se compara su estabilidad y convergencia.

Análisis de Estabilidad y Convergencia

  • Se estudia la conservación de la energía sin fricción (\( k_d = 0 \)) para comprobar qué integradores son más estables.
  • Con \( k_d > 0 \), se analiza la convergencia hacia un estado de reposo y cómo diferentes valores de \( k_d \) influyen en los resultados.
  • Finalmente, se prueba cómo afecta el paso de integración a la estabilidad de cada método, graficando el máximo valor de energía en los primeros 5 segundos.

Visualización

Ejercicio 1: Emisor de Cohetes Pirotécnicos

En este ejercicio se ha desarrollado una simulación en Processing de un sistema de partículas que representa el lanzamiento de cohetes pirotécnicos. Cada cohete asciende verticalmente con una velocidad inicial aleatoria, y al finalizar su vida útil (lifespan), genera una explosión con múltiples partículas que se dispersan radialmente.

Fundamentos del Sistema

1. Generación de Cohetes

En cada frame, se genera un nuevo cohete con posición aleatoria en la base y velocidad vertical hacia arriba. Esta partícula se almacena como un objeto con atributos de posición, velocidad y vida útil.

La velocidad inicial se define como:

\[ v = (0, -\text{random}(5, 8)) \]

2. Condición de Explosión

Cuando el parámetro lifespan del cohete llega a 0, se genera una explosión en su posición. Esta consiste en crear múltiples partículas nuevas (fragmentos de explosión) con direcciones aleatorias y velocidades variables.

3. Partículas de Explosión

Las partículas generadas por la explosión se dispersan en 360º usando direcciones aleatorias. Su velocidad se genera usando componentes cartesianos:

\[ v_x = \text{random}(-1, 1) \cdot v_{\text{max}}, \quad v_y = \text{random}(-1, 1) \cdot v_{\text{max}} \]

Además, cada partícula tiene un lifespan que se va reduciendo con el tiempo, y su opacidad disminuye en consecuencia.

4. Visualización

Las partículas de explosión se representan como puntos o trazos radiales desde el centro de la explosión. Cuando el lifespan llega a 0, se eliminan de la simulación.

Visualización

Ejercicio 2: Simulación de Cohetes con Explosión Elíptica

En este ejercicio se ha implementado una simulación en Processing donde los cohetes, al explotar, generan partículas que se distribuyen siguiendo una forma elíptica. Cada explosión es distinta, ya que los ejes mayor y menor de la elipse se determinan de forma aleatoria en cada evento.

Fundamentos del Sistema

1. Emisión del Cohete

Se lanza un cohete desde la parte inferior de la pantalla con velocidad vertical ascendente aleatoria. Cuando su lifespan se agota, se produce la explosión.

2. Explosión Elíptica

Al explotar, se generan \( N \) partículas que siguen una distribución elíptica. Los ejes de la elipse son generados aleatoriamente:

\[ a = \text{random}(30, 80), \quad b = \text{random}(10, 40) \]

Para cada partícula se calcula un ángulo \( \theta \in [0, 2\pi] \), y las componentes de la velocidad inicial se asignan según la parametrización de la elipse:

\[ v_x = a \cdot \cos(\theta), \quad v_y = b \cdot \sin(\theta) \]

Así, la explosión toma una forma elíptica con una orientación circular variable.

3. Movimiento y Desaparición

Las partículas se mueven con sus velocidades iniciales y se desvanecen conforme disminuye su parámetro lifespan, hasta desaparecer completamente.

Ejercicio 3: Simulación de Explosión de Partículas

Este ejercicio consiste en una simulación básica en Processing que representa una explosión visual de partículas. El objetivo es emular el efecto de una detonación en la que múltiples partículas se propagan radialmente desde un punto central, creando un efecto visual similar al de fuegos artificiales.

Funcionamiento del Sistema

1. Generación de Partículas

En un instante determinado, se generan \( N \) partículas en el mismo punto central. A cada partícula se le asigna un ángulo aleatorio \( \theta \in [0, 2\pi] \) para simular una propagación radial uniforme.

2. Velocidad Inicial

La dirección de cada partícula se calcula con funciones trigonométricas y se escala con una velocidad aleatoria:

\[ v_x = \cos(\theta) \cdot r, \quad v_y = \sin(\theta) \cdot r \]

donde \( r \) es una magnitud aleatoria para simular explosiones más realistas, con velocidades variables.

3. Movimiento y Lifespan

Las partículas se mueven siguiendo sus vectores de velocidad. Además, cada una tiene un parámetro lifespan que disminuye con el tiempo, haciendo que las partículas se desvanezcan progresivamente hasta desaparecer.

Ejercicio 4: Simulación de Fuente de Agua

En este ejercicio se ha implementado una fuente de partículas que simula una fuente de agua. El sistema genera de manera continua partículas desde un origen fijo, que ascienden con una trayectoria vertical ligeramente dispersa para emular el efecto de gotas expulsadas por una fuente real.

Funcionamiento del Sistema

1. Emisión Continua

En cada iteración del bucle de dibujo de Processing se genera una nueva partícula. La posición de origen se mantiene fija (por ejemplo, la parte inferior central de la pantalla).

2. Velocidad Aleatoria

Cada partícula es creada con una velocidad inicial hacia arriba (componente vertical negativa), y una ligera desviación horizontal aleatoria. La velocidad se define como:

\[ v_x = \text{random}(-a, a), \quad v_y = \text{random}(-v_{\text{min}}, -v_{\text{max}}) \]

Esto permite que las trayectorias sean similares pero no idénticas, dando naturalidad a la animación.

3. Movimiento y Lifespan

Cada partícula asciende y al mismo tiempo va perdiendo opacidad (lifespan), simulando el efecto de evaporación o pérdida de energía. Se elimina una partícula una vez que su lifespan llega a 0.

Ejercicio 5: Emisor de Humo

En este ejercicio se ha desarrollado un sistema de partículas para simular un emisor de humo. El humo se genera continuamente desde una posición fija y se eleva lentamente mientras se difumina, simulando el comportamiento natural de una columna de humo.

Características del Sistema

1. Emisión Constante

En cada fotograma se crea una nueva partícula en la posición del emisor (por ejemplo, una chimenea). La frecuencia puede ajustarse para variar la densidad del humo.

2. Movimiento y Desplazamiento

Las partículas tienen una velocidad vertical leve y una ligera variación horizontal para crear una apariencia dispersa:

\[ v_x = \text{random}(-a, a), \quad v_y = \text{random}(-b, -c) \]

Donde \( a \) representa la amplitud de la dispersión horizontal y \( b, c \) los límites de la velocidad de ascenso.

3. Difuminado con el Tiempo

Cada partícula reduce su opacidad gradualmente (lifespan decreciente), dando la impresión de que el humo se disipa en el aire. Cuando el lifespan llega a cero, la partícula se elimina.

Ejercicio 6: Partícula Flotante

En este ejercicio se ha implementado una simulación física en Processing donde una partícula es liberada desde una posición superior y cae bajo la acción de la gravedad hasta entrar en contacto con un fluido. Una vez alcanza la superficie del agua, comienza a experimentar la fuerza de flotación, lo que provoca que parte de ella quede sumergida y se estabilice en equilibrio.

Fundamentos Físicos

1. Fuerza Gravitatoria

Se aplica una aceleración constante hacia abajo a la partícula:

\[ \vec{F}_g = m \cdot \vec{g} \]

2. Detección de Inmersión

Se calcula cuánto de la partícula está sumergido en el agua evaluando la diferencia entre su posición y el nivel del agua. A partir de esa profundidad \( h \), se estima el volumen sumergido \( V_s \) de una esfera parcialmente sumergida:

\[ V_s = \frac{\pi h^2 (3r - h)}{3} \] (O una forma equivalente derivada de la fórmula del casquete esférico).

3. Fuerza de Flotación

La fuerza de flotación se calcula como:

\[ \vec{F}_b = - \rho \cdot V_s \cdot g \]

Donde \( \rho \) es la densidad del fluido y \( V_s \) el volumen sumergido.

4. Amortiguación

Para evitar oscilaciones exageradas, se aplica una ligera amortiguación a la velocidad:

\[ \vec{v} \leftarrow \vec{v} \cdot (1 - k) \]

5. Movimiento

La posición se actualiza sumando la velocidad a cada paso:

\[ \vec{p} \leftarrow \vec{p} + \vec{v} \]

Ejercicio 7: Emisor de Spray Horizontal

En este ejercicio se ha diseñado un sistema de partículas en Processing que simula un spray o pulverizador horizontal. Las partículas son generadas continuamente desde un emisor y se propagan con direcciones aleatorias dentro de un rango angular determinado, simulando una dispersión horizontal controlada.

Fundamentos de Simulación

1. Generación Continua de Partículas

En cada iteración del bucle principal (draw()), se genera una nueva partícula en la posición del emisor. Esta partícula es inicializada con una velocidad aleatoria dentro de un abanico angular centrado en la horizontal:

\[ \theta \in \left[ -\alpha, \alpha \right], \quad \vec{v} = v_0 \cdot \left( \cos(\theta), \sin(\theta) \right) \]

Donde \( \alpha \) es la mitad del ángulo total de dispersión (por ejemplo, 20°) y \( v_0 \) es la magnitud de la velocidad.

2. Movimiento y Desvanecimiento

Las partículas se desplazan según su velocidad y disminuyen su opacidad gradualmente mediante una propiedad lifespan, lo que genera un efecto de disipación:

\[ \vec{p} \leftarrow \vec{p} + \vec{v}, \quad \text{lifespan} \leftarrow \text{lifespan} - \delta \]

3. Eliminación de Partículas

Cuando la vida útil de una partícula llega a 0, se elimina del sistema para optimizar el rendimiento:

\[ \text{if } \text{lifespan} \leq 0 \Rightarrow \text{eliminar} \]

Visualización

Practica 2: Fuente de Agua 2D con Sistema de Partículas

En esta práctica se simula una fuente de agua bidimensional mediante un sistema de partículas. El objetivo principal es representar el comportamiento del agua al salir a presión desde un emisor, teniendo en cuenta la gravedad y el rozamiento con el aire.

Descripción del Sistema

El sistema emite partículas que simulan gotas de agua. Cada partícula tiene una vida útil limitada y está sujeta a las fuerzas de gravedad y fricción. La gravedad hace que las partículas caigan, mientras que la fricción con el aire reduce progresivamente su velocidad. Se puede modificar la frecuencia de emisión y el tiempo de vida de las partículas para observar diferentes dinámicas del sistema.

Modelado Físico

  • Gravedad: \( \vec{g} = (0, 9.8) \, \text{m/s}^2 \)
  • Rozamiento: proporcional a la velocidad de la partícula
  • Vida útil: cada partícula se elimina tras un tiempo predefinido
  • Integración: se implementan métodos de Euler explícito e implícito

Exploración de Parámetros

Se estudia cómo afecta la frecuencia de emisión y el tiempo de vida al número total de partículas y la carga computacional. Se observa que valores altos en ambos parámetros generan acumulación excesiva de partículas y sobrecarga del sistema, mientras que valores bajos pueden hacer que la fuente parezca intermitente o irreal.

Visualización

Practica 3 Ejercicio 1: Simulación de Billar Francés

En esta práctica se han abordado dos simulaciones físicas diferentes: una simulación de un billar francés sin troneras, y una simulación de fluido en un recipiente mediante partículas interactivas que colisionan entre sí y con las paredes.

Simulación de Billar Francés

Esta simulación implementa un modelo de colisiones basado en velocidades. En ella, un conjunto de bolas de billar interactúan entre sí y con las bandas de la mesa, modelando las colisiones mediante:

  • Detección de colisiones entre pares de bolas.
  • Restitución de la posición en caso de colisión.
  • Cálculo de velocidades post-colisión teniendo en cuenta pérdidas energéticas.

Las colisiones con las bandas también se simulan con una pérdida de energía controlada mediante un coeficiente \( C_{\text{pared}} \), mientras que la fricción con la mesa es proporcional al cuadrado de la velocidad.

Además, se realizaron pruebas aumentando el número de bolas hasta \( n = 100 \), observando que la estabilidad del sistema se ve comprometida con valores altos. A medida que aumenta \( n \), las colisiones son más frecuentes, generando acumulación de errores numéricos y solapamientos entre partículas. Aunque estas situaciones tienden a corregirse con el tiempo, se identificó que incrementar el coeficiente de fricción \( K_d \) ayuda parcialmente a estabilizar la simulación al disminuir la energía cinética.

Se experimentó también con una fuerza constante que empuja todas las bolas hacia una esquina de la mesa, simulando una zona de atracción. En este caso, el sistema pierde estabilidad mucho más rápido, con errores evidentes como solapamientos y bolas saliendo fuera de la mesa. El ajuste de \( K_d \) no resuelve el problema, ya que solo ralentiza el movimiento sin evitar la desestabilización debida a múltiples colisiones simultáneas.

El usuario puede:

  • Seleccionar una bola y aplicarle impulso usando el ratón.
  • Hacer que todas las bolas se muevan aleatoriamente.
  • Activar o desactivar las colisiones entre bolas mediante una tecla.

Practica 3 Ejercicio 2: Simulación de Fluido con Colisiones Optimizada (Grid y Hash)

En este segundo ejercicio se simula el movimiento de una gran cantidad de partículas (representando un fluido) dentro de un recipiente rectangular. El objetivo es optimizar las colisiones entre partículas utilizando dos métodos: una rejilla espacial (grid) y una función hash. Estas técnicas permiten evitar comparaciones innecesarias entre todas las partículas, mejorando la eficiencia computacional.

Aspectos Técnicos

  • Implementación de dos estructuras: malla uniforme (grid) y tabla hash para detectar posibles colisiones.
  • Colisiones elásticas tratadas de manera local en celdas vecinas.
  • Distribución aleatoria inicial de partículas dentro del recipiente.
  • Representación gráfica eficiente que permite visualizar el comportamiento colectivo del sistema.

Comparativa de Estructuras

Ambas técnicas mejoran el rendimiento respecto al método clásico "todas contra todas", especialmente al aumentar el número de partículas. El comportamiento del sistema simula un líquido viscoso al caer y dispersarse dentro del recipiente.

Se analizó el rendimiento comparando los tres modos de colisiones: NONE, GRID y HASH. Se concluyó que:

  • El modo GRID ofreció los mejores tiempos de ejecución en configuraciones medias.
  • El modo HASH presentó más flexibilidad, pero también una mayor sobrecarga cuando las celdas eran muy pequeñas.

Se realizaron tests variando el número de partículas y el tamaño de celda \( S_c \) y \( N_c \), concluyendo que GRID es más eficiente para este tipo de simulación en Processing.

Visualización

Ejercicio 1: Simulación de Cuerda con Sistema Masa-Muelle

En este proyecto se ha simulado el comportamiento dinámico de una cuerda elástica suspendida en el aire. La cuerda está formada por múltiples partículas unidas entre sí mediante muelles, lo que permite representar de forma realista oscilaciones y deformaciones ante la acción de la gravedad y el arrastre del usuario.

Modelo Físico

Cada punto de la cuerda se modela como una partícula con masa, afectada por la gravedad. Estas partículas están conectadas mediante muelles que ejercen una fuerza proporcional a su elongación (Ley de Hooke):

\[ \vec{F}_e = -k \cdot (l - l_0) \cdot \hat{u} \]

Además, se añade un término de amortiguamiento proporcional a la diferencia de velocidad entre los extremos:

\[ \vec{F}_d = -c \cdot (\vec{v}_a - \vec{v}_b) \]

donde \( k \) es la constante elástica del muelle, \( c \) el coeficiente de amortiguamiento, \( l \) la longitud actual, \( l_0 \) la longitud de reposo, y \( \hat{u} \) el vector unitario entre partículas.

Interacción

El usuario puede interactuar con la cuerda pulsando y arrastrando sus extremos con el ratón. La simulación responde en tiempo real a estas acciones, mostrando cómo se propaga el movimiento a lo largo de la cuerda.

Visualización

Ejercicio 2: Simulación de Pelo con Sistema Masa-Muelle

Este ejercicio representa una simulación realista del comportamiento de múltiples pelos o fibras delgadas, modeladas como cadenas de partículas conectadas por muelles. Cada pelo responde a la gravedad y puede ser manipulado por el usuario mediante el ratón, generando interacciones suaves y naturales.

Modelo de Simulación

Cada pelo se construye como una sucesión de masas conectadas mediante muelles elásticos amortiguados. La física está basada en:

1. Fuerza Elástica (Hooke): \[ \vec{F}_e = -k \cdot (l - l_0) \cdot \hat{u} \]

2. Fuerza de Amortiguamiento: \[ \vec{F}_d = -c \cdot (\vec{v}_a - \vec{v}_b) \]

Estas fuerzas se suman a la gravedad y se aplican a cada nodo (partícula) para determinar su movimiento usando integración de Euler semi-implícito.

Interacción y Visualización

El usuario puede seleccionar y arrastrar cualquier nodo de los pelos con el ratón, generando deformaciones dinámicas que se propagan por toda la estructura. Esta interacción simula el movimiento natural de cabellos o fibras textiles.

Ejercicio 3: Simulación de Banderas con Fuerzas Externas

En este proyecto se ha desarrollado una simulación de varias banderas que ondean en el aire bajo la influencia de fuerzas físicas como el viento, la gravedad y el amortiguamiento. Las banderas están construidas como mallas de partículas conectadas por muelles, siguiendo diferentes configuraciones estructurales.

Tipos de Estructura

  • Red estructural: conecta nodos horizontal y verticalmente.
  • Flexión: añade conexiones a nodos a dos pasos de distancia, simulando rigidez.
  • Cizalla: incluye conexiones diagonales, ofreciendo resistencia a deformaciones inclinadas.

Modelo Físico

Cada vértice de la malla está sometido a:

  • Fuerza elástica (Hooke) por los muelles que lo conectan con los vecinos.
  • Fuerza de amortiguamiento proporcional a la velocidad.
  • Gravedad, si está activada.
  • Fuerza de viento proyectada sobre las normales de los polígonos.

Interacción

El usuario puede alternar el viento y la gravedad pulsando las teclas v y g, respectivamente. El efecto visual muestra cómo las distintas estructuras de malla afectan el comportamiento de las banderas.

Ejercicio 4: Colisión entre una Esfera y una Malla Deformable

En este proyecto se ha simulado una esfera que colisiona con una malla suspendida en el aire. La malla está formada por partículas conectadas por muelles y puede romperse si la tensión supera ciertos límites, simulando un tejido elástico.

Componentes del Modelo

  • Malla: estructura cuadriculada de partículas unidas por muelles con diferentes configuraciones.
  • Esfera: objeto dinámico que cae bajo la gravedad y puede interactuar con la malla mediante colisión.
  • Muelles de colisión: se generan dinámicamente entre los nodos de la malla y la esfera cuando hay contacto.

Tipos de Configuración de Malla

El usuario puede cambiar la disposición de los muelles pulsando las teclas del 1 al 5:

  1. Solo estructural
  2. Solo cizalla
  3. Estructural + cizalla
  4. Estructural + flexión
  5. Combinación de las tres

Parámetros Dinámicos

  • Velocidad de la esfera ajustable con las teclas de flecha ↑ y ↓
  • La malla puede configurarse como rompible o irrompible pulsando la tecla b

Visualización

La simulación muestra cómo diferentes configuraciones y materiales responden al impacto, con posibilidad de deformación permanente o rebote elástico.

Practica 4 Ejercicio 1: Simulación de un Cubo Deformable con Colisiones

Esta simulación representa un cubo formado por partículas conectadas por muelles elásticos y amortiguados. El objetivo es simular su caída bajo la gravedad y su interacción con el suelo mediante una colisión elástica con amortiguamiento. El sistema responde dinámicamente a las fuerzas internas y externas, permitiendo observar cómo el cubo se deforma, rebota y amortigua con el tiempo.

Estructura del Cubo

El cubo se modela como una red tridimensional de nodos de masa conectados por muelles elásticos:

  • Configuración típica: 4x4x4 (64 partículas).
  • Los muelles se crean entre nodos separados una distancia inferior a un umbral, generando una red tridimensional compacta.
  • Las fuerzas entre partículas incluyen:
    • Fuerza elástica de Hooke: proporcional a la elongación del muelle respecto a su longitud de reposo.
    • Fuerza de amortiguamiento: proporcional a la velocidad relativa proyectada en la dirección del muelle.

Interacción con el Suelo

Cuando una partícula cruza el plano del suelo, se le aplica una fuerza de colisión basada en:

  • Compresión vertical: proporcional a la distancia que penetra bajo el suelo.
  • Amortiguamiento: proporcional a la componente vertical de la velocidad de la partícula.

El objetivo es evitar que el cubo atraviese el suelo o se comporte de forma no realista al impactar.

Modelo Físico y Simulación

Cada frame, la simulación:

  1. Aplica gravedad a cada nodo.
  2. Aplica las fuerzas de los muelles entre nodos.
  3. Aplica fuerzas de colisión si alguna partícula toca el suelo.
  4. Actualiza la posición y velocidad mediante integración de Euler semi-implícito.

Visualización

La escena incluye un plano horizontal que representa el suelo, y se utilizan colores para representar el estado de los muelles:

  • Rojo: muelle comprimido.
  • Verde: muelle estirado.

Además, la cámara 3D se puede rotar libremente usando PeasyCam, y el cubo se reinicia con la tecla I.

Practica 4 Ejercicio 2: Simulación de Ondas Oceánicas

En esta simulación se representa el comportamiento del mar mediante una malla de vértices (mapa de alturas) que oscilan bajo distintos tipos de onda. Se han implementado tres modelos: Gerstner, direccional y radial, los cuales permiten una representación visual más o menos realista del movimiento del océano. La simulación es completamente cinemática y no utiliza integración de fuerzas.

Modelos de Onda Implementados

  • Onda Gerstner: genera desplazamientos circulares en X, Y y Z, simulando el patrón realista de olas profundas.
  • Onda Direccional: propaga el movimiento de forma uniforme en una sola dirección, con variaciones principalmente en el eje Y.
  • Onda Radial: produce ondas que se expanden desde un punto central, imitando el efecto de una perturbación como una gota en el agua.

Parámetros Configurables

  • Amplitud (m): altura de la ola desde el eje central.
  • Longitud de onda (m): distancia entre dos crestas.
  • Velocidad (m/s): define la rapidez de propagación de la onda.
  • Afinamiento (solo Gerstner): controla la forma de la onda, haciéndola más puntiaguda o suave.

Estos valores se pueden modificar manualmente o programáticamente para observar su impacto visual. Se ha comprobado que amplitudes demasiado grandes o longitudes de onda muy cortas provocan artefactos poco realistas.

Interacción del Usuario

  • Tecla 1: sin ondas.
  • Tecla 2: onda Gerstner.
  • Tecla 3: onda direccional.
  • Tecla 4: onda radial.
  • Tecla T: alternar entre modo malla (wireframe) y superficie texturizada.
  • Teclas W, A, S, D: mover la boya por la superficie del mar para comprobar su desplazamiento.

Visualización y Escena

La escena se representa en 3D con PeasyCam, permitiendo la navegación libre por la simulación. La malla de agua utiliza una textura de mar, mientras que el cielo se representa mediante una caja envolvente texturizada (skybox). La boya, una esfera con textura propia, permite comprobar el efecto de las ondas sobre un objeto flotante.

Demostración en Vídeo

En los siguientes vídeos se muestra la simulación en funcionamiento, incluyendo una explicación de los tipos de onda, los parámetros utilizados y los efectos de su modificación.

Práctica 5: Simulación de Carrera de Canicas (Marble Race 2D)

En esta práctica se ha desarrollado una simulación física interactiva de tipo carrera de canicas en 2D, haciendo uso del motor Fisica en el entorno Processing. El objetivo ha sido aplicar el modelo de sólidos rígidos, colisiones y uniones físicas para crear un entorno dinámico, impredecible y jugable.

Descripción de la simulación

El proyecto consiste en una pista vertical en la que varias canicas descienden influenciadas por la gravedad y se enfrentan a distintos tipos de obstáculos. Antes de comenzar la carrera, el jugador debe seleccionar una canica haciendo clic en su número. Durante la carrera, su canica queda marcada visualmente.

  • Las canicas están identificadas por un número único visible en pantalla y por diferentes colores.
  • El recorrido se divide en cuadrantes con obstáculos aleatorios distribuidos por zonas.
  • Se implementan tanto obstáculos rotatorios como obstáculos dinámicos con uniones físicas FRevoluteJoint.
  • El jugador puede seguir visualmente su canica durante toda la carrera.
  • Cuando tres canicas llegan al final del recorrido, se muestra un pódium visual con colores (oro, plata y bronce).
  • Si la canica del jugador entra en el pódium, se muestra el mensaje "¡TU CANICA!" en rojo.

Para garantizar la aleatoriedad y la variabilidad en los resultados, cada carrera genera una nueva distribución de obstáculos con diferentes velocidades y tamaños. Esto hace que el resultado no sea predecible y que la interacción física tenga un papel clave.