- Ej1 - Montaña rusa
- Ej2 - Movimiento circular uniforme
- Ej3 - Particula osciladora
- Ej4 - Lanza burbujas
- Ej5 - Espiral
- Ej6 - Tiro parabóolico y plano inclinado
- PRACTICA 1 - Metodos numericos de integración
- Ej1 - Localizar celdas
- Ej2 - Emisor tipo Humo y emisor tipo Fuente
- Ej3 - Partícula flotante y emisor tipo Splash
- Ej4 - Modelos de colisión entre partículas
- PRACTICA 2 - Sistema de particulas - Fuegos artifiales
- PRACTICA 3 - Estudio de los modelos de colision y estructura de datos
- Ej1 - Cuerda
- PRACTICA 4 - Estructuras masa-muelle - BANDERAS
- PRACTICA 5 - Simulación de ondas - MAR
- TEMA 1 - CONCEPTOS BÁSICOS E INTEGRADORES NUMÉRICOS
- TEMA 2 - SISTEMAS DE PARTÍCULAS Y ESTRUCTURAS DE DATOS
- TEMA 3 - OBJETOS DEFORMABLES
Emisores de partículas - fuegos artificiales
En la pr&aactue;ctica vamos a desarrollar un emisor de partículas, con diferentes formas para simular un castillo de fuegos artificiales.
Para probar los diferentes tipos de explosiones interactuaremos con el teclado.
También vamos a desarrollador un modelo de viento sencillo, que también podremos modificar mediante el teclado.
El objetivo de esta práctica, una vez implementado todo el sistema es el análisis de la relación frame rate (fps) - número de partículas.
Vamos a implementar varias clase que nos harán más fácil el desarrollo de la pr&aactue;ctica. Vamos tener una clase cohete, que será la clase contenedora tanto de la partícula ascendente, la carcasa y las partículas de la explosión.
La posición inicial de la carcasa vendrá dada por la posición del ratón y ascenderá hasta una altura aleatoria en función de la velocidad inicial, que será aleatoria.
Vamos a ver ahora los diferentes tipos de explosiones con los que vamos a trabajar.
Circular
vel.x = random(50, 100) * cos(ang)
vel.y = random(50, 100) * sin(ang)
incremento ang: ang += 2*Pi/360
Elíptica
vel.x = random(30, 80) * cos(ang)
vel.y = random(70, 100) * sin(ang)
incremento ang: ang += 2*Pi/360
Corazón
vel.x = (-6*cos(i) + 2*sin(3*i))*random(10, 20)
vel.y = (-6.5*cos(i) + 2.5*cos(2*i) + 1*cos(3*i) + cos(4*i))*random(10, 20)
i -> aumenta 1 en cada iteración
Espiral doble
vel.x = random(70, 80) * cos(ang)
vel.y = random(70, 80) * sin(ang)
incremento ang: ang += Pi/99
Esfera
vel.x = random(50, 80) * cos(ang)
vel.y = random(50, 80) * sin(ang)
incremento ang: ang += 60
Las explosiones se generarán dentro de un bucle, el número de iteraciones de cada uno dependerá del tipo de explosión.
Cuando ejecutamos estos bucles, lo que estamos haciendo es asignar velocidades inciales a las partículas que vamos a crear, cuya posición inicial será la de la carcasa cuando explote.
Los métodos de la clase partícula son los que usamos en la práctica anterior y que usaremos también en las siguientes. Es donde realizamos la integración para actualizar la posición de las partículas. Usamos Euler-semi.
Fijandonos en los resultados de fps obtenidos según el número de partículas que hay en cada momento activas podemos concluir que el resultado del sistema es correcto para un número no muy elevado de partículas, pues a partir de 1500 los fps bajan mucho, pese a eso, el sistema continúa siendo funcional hasta un elevado número de partí unas 30 veces m´s que el limite de calida visual.