Presentación

Mi nombre es Miguel Ubiedo, tengo 20 años y soy estudiante de 3ºIngeniería Multimedia en la Universitat de València, así como estudiante de Piano y Canto en el Conservatorio Profesional de Música de Valencia. Mis inquietudes artísticas y técnológicas me han llevado a complementar ambos estudios, por lo que considero que poseo cual idades multidisciplinares, necesarias para innovar en nuestros tiempos. 

 

Aquí ofrezco una muestra de una selección de mis trabajos, individuales y colectivos, realizados en la asignatura de Simulación. 

Práctica 3- Grid y Hash

Grid→Repartimos el espacio en un conjunto de celdas de igual tamaño, e introducimos la partícula en una determinada celda según su posición. Compruebo la colisión con las partículas de mi celda y con las de las celdas vecinas. El problema es que desaprovechamos mucho espacio, ya que existen celdas vacías.

Hash→Los datos se almacenan en una tabla dispersa (vector de tamaño doble que el total de elementos a guardar). Las partículas se almacenan aplicando una función de dispersión, que nos dará una posición en la tabla. Esto nos servirá para encontrar partículas vecinas a una dada, y podremos calcular las colisiones sólo con las partículas que a priori sé con las que puedo chocar, es decir, con las de mi propia celda.

Vamos a comprobar las colisiones partícula contra partícula y partícula contra plano en ambos métodos.

 

Práctica 1 – Métodos de integración numércia mediante muelles

En esta práctica los objetivos a seguir eran los siguientes:

-Realizar análisis de comportamiento de los métodos de integración de Euler, Euler semiimplícito, Heun, Runge-Kutta 2 y RK4.

-Obtener empíricamente sus zonas de estabilidad para un sistema físico concreto y observar inestabilidades inherentes al método.

Se ha implementado empleando 2 muelles, uno horizontal y otro vertical (cogidos a 4 puntos  de un grid de tamaño 3×3). En el centro, se encontraba una partícula com una masa de 10 kg.

Con las diferentes teclas, podemos observar como integran cada paso los distintos métodos de integración.  En el vídeo se muestran las animaciones en el siguiente orden=

-Euler: cogemos la derivada en el intervalo actual para calcular el siguiente.

-Euler Semi: cogemos la derivada en el intervalo siguiente para calcular la integral en dicho punto.

-Heun: cogemos la derivada en el punto intermedio entre el intervalo actual y el siguiente. 

-RK2:  cogemos la derivada en el punto intermedio entre el intervalo actual y el siguiente. 

-RK4: hacemos una media ponderada entre la derivada en el intervalo anterior, en el siguiente, y 4 veces en el punto medio, todo ello dividido entre 6. Es una aproximación con una tasa de error muy escasa. 

Práctica 2 – Fuegos artificiales

En esta práctica, vamos a entender los cohetes de fuegos artificiales como surtidores de partículas que, movidos a una determinada velocidad y en función de un ángulo concreto (pueden estos parámetros ser aleatorios o no, según queramos mayor variedad e imperfección) generan figuras sobre un fondo negro, en nuestro caso el cielo valenciano en la Nit del Foc.

 

Clase Particula:
Hay dos tipos de partículas: una partícula de gran tamaño que sirve para simular el ascenso de la carcasa y una partícula de pequeño tamaño que sirve para simular un punto de luz de la palmera que ha explotado en el aire. Ambos tipos están sometidos a la fuerza de la gravedad y del viento. La fuerza del viento debe es configurable en intensidad y en dirección. Cada partícula tiene su propio integrador (Euler semi-implícito) en el que se va calculando la velocidad y la posición de la partícula.

 Clase Cohete:
El cohete tiene dos conjuntos de partículas:
o La carcasa. Una única partícula que parte con una velocidad inicial vertical.
o El sistema de partículas, almacenadas en un vector y que formarán la palmera.

El cohete es el que implementa el tipo de palmera particular. Aquí es donde hemos desplegado nuestra imaginación ya que, según la dirección y módulo de la velocidad de cada partícula del sistema, la palmera tendrá una forma u otra. Así como el color de las partículas dará el color de la
palmera.  La dinámica del cohete tiene dos partes. Desde su activación, durante un tiempo se simulará el ascenso de la carcasa a través de una única partícula que parte con una gran velocidad inicial vertical. En un momento dado, la carcasa “explota”. Esto significa que la partícula única desaparece y se activa el vector de partículas dotando a cada una de ellas de velocidad y dirección.

 Castillo (Estructura de datos):
El castillo es un vector de cohetes. En el Castillo (que está en el programa principal) se maneja la interacción con el castillo, concretamente, usando el ratón, lanzaremos los cohetes que formarán el castillo. Igualmente debería constar con una pequeña interfaz para definir la fuerza y la dirección del viento. La función draw() se encarga de visualizar el castillo, además de escribir información adicional en la pantalla.

Práctica 5 – Bandera

Empleamos 3 métodos (structured, Bend y Shear) para simular una bandera ondeando al viento. Structured es el esqueleto básico para la estabilidad de la malla. Shear, por su parte, es ideal para nuestra escena, ya que funciona adecuadamente cuando existe transmisión lateral de energía, es decir, viento. Y finalmente tenemos Bend, cuyo mayor defecto (o virtud, según se vea) es que no produce arrugas.

Veamos un vídeo implementando dichos métodos a continuación, ondeando nuestra Senyera Valenciana, nuestro homenaje a ella:

 

Práctica 7 – Simulación de olas mediante mapas de altura

MAPA DE ALTURAS: Sistema para simular olas de mar mediante ondas periódicas, formado por una matriz de puntos, la altura de los cuales será el mapa de alturas del sistema. Dichos puntos serán la amplitud de la onda en cada instante.
Se calcula un vector de dirección distinto en cada caso, y se actualiza los vértices de la malla dependiendo del tipo de onda escogido. En el caso de las ondas radiales y sinusoidales tan solo modificamos la componente z de los vértices, mientras que en el modelo de Gerstner se modifican las componentes x, y, z ya que en este caso se devuelve un punto. Para simular el comportamiento de los tres tipos de ondas juntas crearemos
un vector sumatorio de ondas, y se devolverá un punto al igual que en Gerstner salvo que en este caso la componente z estará compuesta también por la suma entre el cálculo de la onda radial más la sinusoidal.

A = amplitud de la onda
k = número de onda = 2·pi/longitud de onda
w = frecuencia angular = 2·pi/periodo
t = tiempo
s = distancia al centro e la perturbación
D = dirección de propagación
Q = Constante de encrespamiento de la ola.

Direccional (Sinusoidal): Ondas en un sentido. Estas ondas simulan olas oceánicas. La simulación del sistema no conlleva desplazamiento de materia, por lo que su objetivo es más visual que empírico. Desde un punto arbitrario fuera de la malla, las perturbaciones van siendo generadas con amplitud, velocidad, dirección y longitud de onda constantes.
A medida que avanzamos en cada diferencial de tiempo, los frentes de las ondas van recorriendo la malla en función de la dirección unitaria preestablecida, que será la misma para todos los puntos de la malla.

z = A·cos(D·(x, y)·k + wt) 

Radial: Ondas circulares a partir de un centro. Al tratarse de la simulación de la
perturbación física superficial producida sobre un fluido, vamos a trabajar con un mapa de alturas, lo que no conlleva desplazamiento de materia, por lo que tiene claramente un objetivo más visual que empírico. Desde un punto de origen, la perturbación nace con una amplitud inicial, velocidad inicial y una longitud de onda predefinidas. A medida que avanzamos en cada diferencial de tiempo, la perturbación va afectando a los puntos
de la malla que distan del origen según la relación tiempo transcurrido y velocidad de propagación de la onda, y a su vez va viéndose afectada en una atenuación de su amplitud.

z = A·cos(k·s – w·t) 

Gerstner: Aquí se modifica la altura del vértice y la posición en el plano XY, pues están pensadas para simular mar de fondo, donde hay un sumatorio de ondas longitudinales, cada una de ellas con una dirección diferente y incluyendo diferentes parámetros de caracterización. Este tipo de ola supone transporte de materia por lo que se deben modificar las tres coordenadas del punto en cada iteración. Las olas se cruzan entre sí, generando puntos cercanos con alturas que cambian. Para este caso de mares más picados, debemos conseguir que las crestas de las olas se muevan y rompan sobre la superficie según la energía que transporten. Mediante Q, generamos la rotación de la ola con la que rompe sobre la superficie, en función inversamente proporcional a la frecuencia y a la amplitud.

x = x0 + Sumatorio(Q·A·Dx·cos(D·(x, y)·k + wt))
y = y0 + Sumatorio(Q·A·Dy·cos(D·(x, y)·k + wt))
z = Sumatorio(Q·A·Dy·cos(D·(x, y)·k + wt))