ENUNCIADO:
Se pretende implementar una malla 2D de muelles con el esquema estudiado.
Probar las 3 estructuras (shear, bend, structured)
Introducir el modelo de viento
Simular algún tipo de tela (bandera, cortina, ...)
La deformación de objetos se obtiene al conectar las partículas mediante una red de muelles, es decir, una malla de partículas con estructura basada en muelles, que puede ser Structured, Shear o, entre otras, Bend. En esta práctica simularemos el comportamiento de una cortina con viento.
Contamos con dos clases:
Tela: Aquí crearemos un objeto de tipo Malla, y recogeremos los eventos del teclado para elegir el modelo a aplicar en la cortina.
Malla: En el constructor, creamos una matriz de vértices y matrices de fuerzas, velocidades y aceleraciones. En el método 'update' es donde aplicaremos el viento y actualizaremos la matriz de fuerzas según la estructura elegida (también aplicamos la gravedad); creamos un vector con valores aleatorios de viento, y para que la fuerza de dicho viento sea proporcional al producto escalar entre el vector viento y el vector normal en el vértice considerado, hacemos los siguientes cálculos:
- producto vectorial entre el vértice actual y el vecino [ windNorm = vertA.cross(vertB) ]
- normalizar dicho producto vectorial y multiplicarlo por la magnitud del viento
- producto escalar entre el resultado anterior y el vector viento (director)
- multiplicar 'windNorm' por ese producto escalar
- añadir este vector resultante a la matriz de fuerzas [ forces[x][y].add(windNorm) ]
Cuando actualizamos la matriz de fuerzas, utilizamos el método 'getForce' , al cual le pasamos como parámetros el vértice actual, el vértice vecino (su componente 'x' e 'y'), la distancia entre ellos, y la constante 'k' del muelle. Así, obtenemos la fuerza como:
Fmuelle = -k * (modulo_anchor - distancia) * anchor , donde 'anchor' el vector distancia entre las partículas, normalizado.
Aparte de añadir dichas fuerzas a la matriz de aceleraciones, también añadimos el 'damping' (amortiguación) a la matriz de fuerzas, resultado de multiplicar la constante damping negativa por cada componente de la matriz de velocidad.
(En este vídeo podemos visualizar mejor la tela por las luces)
(Interacción con el teclado)

No hay comentarios:
Publicar un comentario