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 del Archivo colision.C

Ir al código fuente de este archivo.

Funciones

void detector_colision_puntual_rigida (COSA *A, COSA *B, LISTA< CONTACTO * > *Colisiones, double udt, BOOLEAN visual_debug, MINMAX *m1, MINMAX *m2)
 Este metodo utiliza un procedimiento especial que toma ventaja de la operacion generica de interseccion rayo/cosa, para implementar un esquema generico de deteccion de colisiones entre una MASA_PUNTUAL y cualquier otra cosa que implemente la interseccion.

void detector_colision_tela_rigida (COSA *A, COSA *B, LISTA< CONTACTO * > *Colisiones, double udt, BOOLEAN visual_debug, MINMAX *m1, MINMAX *m2)
 Este metodo generaliza el caso de `detector_colision_puntual_rigida` para controlar colisiones entre una tela y cualquier otra cosa que implemente la operacion de interseccion.

void detectar_par_colision (COSA *A, COSA *B, LISTA< CONTACTO * > *Colisiones, double udt, BOOLEAN visual_debug)
 Este metodo recibe dos cosas y revisa si se colisionan o no.


Variables

int COLOR_pareja = 0
LISTA< CONTACTO * > contactos
LISTA< MINMAX * > TMP_debug_visual
BOOLEAN visual_debug = TRUE


Documentación de las funciones

void detectar_par_colision COSA A,
COSA B,
LISTA< CONTACTO * > *  Colisiones,
double  udt,
BOOLEAN  visual_debug
[static]
 

Este metodo recibe dos cosas y revisa si se colisionan o no.

Si las cosas no colisionan no se hace nada, y si colisionan se crea y anexa a la lista `Colisiones` una estructura de informacion que contiene el punto de contacto de las dos cosas, y referencias a las cosas involucradas. Notese que como dos cosas pueden colisionar en varios puntos, se pueden anexar varios CONTACTOs a la lista de una sola vez.

`udt` indica el intervalo de tiempo de la simulacion que transcurrio antes de llegar al estado actual de las cosas y se utiliza para estimar la posicion anterior de las cosas en colision (en interpenetracion). Esta estimacion es un parametro usado en la deteccion del punto de colision. Para entenderlo mejor estudie el caso de colision entre una masa puntual y una cosa rigida.

El metodo hace dos niveles de chequeo para probar si dos cosas se colisionan:

  • Calcula los min-max de las dos cosas y prueba la interseccion de los mismos. Si los min-max de dos cosas no se intersectan, no es posible que las cosas esten en colision. De lo contrario, se pasa al nivel 2.
  • Tiene en cuenta el tipo de cada cosa y la geometria de cada cosa para evaluar mas exactamente el punto de colision, o descartarlo.

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

References CC_COSA_RIGIDA, CC_MASA_PUNTUAL, CC_TELA, COLOR_pareja, detector_colision_puntual_rigida(), detector_colision_tela_rigida(), COSA::estoy_fijo(), MINMAX::max, MINMAX::min, COSA::minmax(), TMP_debug_visual, visual_debug, VECTOR::x, VECTOR::y, y VECTOR::z.

Referenciado por MANEJADOR_CONFLICTOS_COLISION::detectar_conflictos().

Here is the call graph for this function:

void detector_colision_puntual_rigida COSA A,
COSA B,
LISTA< CONTACTO * > *  Colisiones,
double  udt,
BOOLEAN  visual_debug,
MINMAX m1,
MINMAX m2
[static]
 

Este metodo utiliza un procedimiento especial que toma ventaja de la operacion generica de interseccion rayo/cosa, para implementar un esquema generico de deteccion de colisiones entre una MASA_PUNTUAL y cualquier otra cosa que implemente la interseccion.

Notese como se estima la posicion de la masa puntual a partir de su actual vector de velocidad y el ultimo intervalo de tiempo `udt`. Este metodo funciona mejor cuando la velocidad de la cosa `B` es relativamente menor que la de la masa puntual `a`. Debe tenerse en cuenta que para evitar "atravesamientos" el intervalo de incremento de la simulacion debe ser muy chico, comparado con las velocidades maximas de las cosas.

PRE: A es una MASA_PUNTUAL y B es una COSA_RIGIDA.

OJO: ESTA ESTRATEGIA NO FUNCIONA CUANDO `A` ESTA QUIETA! ESTO DEBE CAMBIARSE!

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

References CONTACTO::A, LISTA< T >::anx(), CONTACTO::B, RAYO::direccion, COSA::interseccion(), CONTACTO::n_a, CONTACTO::n_b, VECTOR::normalizar(), RAYO::origen, CONTACTO::p, COSA::posicion_absoluta(), MINMAX::Rayito, COSA::set_posicion_absoluta(), CONTACTO::t, COSA::velocidad_absoluta(), y visual_debug.

Referenciado por detectar_par_colision(), y detector_colision_tela_rigida().

Here is the call graph for this function:

void detector_colision_tela_rigida COSA A,
COSA B,
LISTA< CONTACTO * > *  Colisiones,
double  udt,
BOOLEAN  visual_debug,
MINMAX m1,
MINMAX m2
[static]
 

Este metodo generaliza el caso de `detector_colision_puntual_rigida` para controlar colisiones entre una tela y cualquier otra cosa que implemente la operacion de interseccion.

PRE: `A` debe ser una TELA y `B` una COSA_RIGIDA.

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

References detector_colision_puntual_rigida(), TELA::masa_puntual(), TELA::num_masas(), y visual_debug.

Referenciado por detectar_par_colision().

Here is the call graph for this function:


Documentación de las variables

int COLOR_pareja = 0 [static]
 

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

Referenciado por MANEJADOR_CONFLICTOS_COLISION::detectar_conflictos(), detectar_par_colision(), y MINMAX::MINMAX().

LISTA<CONTACTO *> contactos [static]
 

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

Referenciado por MANEJADOR_CONFLICTOS_COLISION::detectar_conflictos(), y MANEJADOR_CONFLICTOS_COLISION::resolver_conflictos().

LISTA<MINMAX *> TMP_debug_visual
 

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

Referenciado por MANEJADOR_CONFLICTOS_COLISION::detectar_conflictos(), y detectar_par_colision().

BOOLEAN visual_debug = TRUE [static]
 

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

Referenciado por MANEJADOR_CONFLICTOS_COLISION::detectar_conflictos(), detectar_par_colision(), detector_colision_puntual_rigida(), y detector_colision_tela_rigida().


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.