Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

Referencia de la Clase MANEJADOR_CONFLICTOS_COLISION

#include <colision.h>

Diagrama de herencias de MANEJADOR_CONFLICTOS_COLISION

Inheritance graph
[leyenda]
Diagrama de colaboración para MANEJADOR_CONFLICTOS_COLISION:

Collaboration graph
[leyenda]
Lista de todos los miembros.

Métodos públicos

 MANEJADOR_CONFLICTOS_COLISION ()
virtual ~MANEJADOR_CONFLICTOS_COLISION ()
void detectar_conflictos (LISTA< COSA * > *Cosas, double udt)
 DETECTAR COLISIONES...

void resolver_conflictos (void)
 RESPUESTA A COLISIONES.


Documentación del constructor y destructor

MANEJADOR_CONFLICTOS_COLISION::MANEJADOR_CONFLICTOS_COLISION  ) 
 

Definición en la línea 290 del archivo colision.C.

MANEJADOR_CONFLICTOS_COLISION::~MANEJADOR_CONFLICTOS_COLISION  )  [virtual]
 

Definición en la línea 295 del archivo colision.C.


Documentación de las funciones miembro

void MANEJADOR_CONFLICTOS_COLISION::detectar_conflictos LISTA< COSA * > *  Cosas,
double  udt
[virtual]
 

DETECTAR COLISIONES...

Este metodo resuelve el problema geometrico de deteccion de colisiones entre las COSAs de la lista `Cosas`. Crea y retorna una lista de contactos puntuales que ocurren siempre entre pares de COSAs. `udt` solo se usa para pasarselo al metodo `detectar_par_colision`.

El metodo realiza su trabajo de la siguiente manera:

  • Busca los pares de cosas que pueden estan en colision, teniendo en cuenta las optimizaciones del metodo `detectar_par_colision`. Notese que siempre se considera que una colision ocurre entre dos cosas, luego lo que se obtiene al final de este proceso es una lista de parejitas, para cada una de las cuales existe un contacto. Tenga en cuenta que este proceso en el caso "inocente" es de O(N^2), pero puede optimizarse a O(NlogN + K), para N cosas de las cuales K poseen volumentes envolventes solapados.

OJO: Para mejorar el chequeo por volumenes envolventes, debe aislarse la primera etapa de `detectar_par_colision`, e implementarse el algoritmo de busqueda/barrido que aprovecha la coherencia espacial de las COSAs dentro de este metodo. Dicho algoritmo preprocesara una lista de parejas sospechosas de colisionarse, y descarta las que no se colisionan.

ATENCION!: En este momento, se utilizan versiones "inocentes" de las dos etapas. Se propone sofisticar cada una de las etapas con los algoritmos descritos por Baraff en las notas del curso de SIGGRAPH "Physically based modelling: principles and practice". Tambien debe tenerse en cuenta que la etapa 2 se encuentra en un estado muy precario de iniciacion.

Implements MANEJADOR_CONFLICTOS.

Definición en la línea 303 del archivo colision.C.

References COLOR_pareja, contactos, detectar_par_colision(), LISTA< T >::tam(), TMP_debug_visual, y visual_debug.

Here is the call graph for this function:

void MANEJADOR_CONFLICTOS_COLISION::resolver_conflictos void   )  [virtual]
 

RESPUESTA A COLISIONES.

Este metodo recibe una lista de contactos calculada previamente en la fase de deteccion de colisiones. Para cada conflicto, determina si hay contacto o colision y segun sea el caso actualiza las velocidades de las cosas involucradas mediante la heuristica de colisiones elasticas o inelasticas (basado en los coeficientes de restitucion).

Notese que se considera tanto las velocidades lineales como las velocidades angulares de las cosas en colision. Este metodo es responsable de actualizar dichas velocidades de una manera fisicamente correcta, es decir, cambiarlas sin violar los principios de conservacion del momentum y de la energia. Para lograrlo, se calcula el impulso (J/torque_impulsivo , con unidades de momentum) necesario para evitar la interpenetracion de los cuerpos, y se actualizan las velocidades usando el momentum calculado.

Para entender los detalles de las matematicas usadas, se recomienda referirse al capitulo 8 del curso "physically based modelling", de Baraff, publicado en SIGGRAPH.

Implements MANEJADOR_CONFLICTOS.

Definición en la línea 356 del archivo colision.C.

References CONTACTO::A, CONTACTO::B, contactos, COSA::estoy_fijo(), MATRIZ_4x4::inversa(), COSA::ke(), COSA::masa(), CONTACTO::n_b, VECTOR::normalizar(), CONTACTO::p, COSA::posicion_absoluta(), VECTOR::producto_cruz(), VECTOR::producto_punto(), COSA::set_velocidad_absoluta(), COSA::set_velocidad_angular_absoluta(), COSA::tensor_de_inercia(), COSA::velocidad_absoluta(), y COSA::velocidad_angular_absoluta().

Here is the call graph for this function:


La documentación para esta clase fué generada a partir de los siguientes archivos:
Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.