49
1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés Curello Instituto Tecnológico de Buenos Aires [email protected] Tutores Silvia Alicia Gómez, Leticia Irene Gómez Instituto Tecnológico de Buenos Aires {sgomez | lgomez}@itba.edu.ar Abstract En este trabajo, se presenta un método para realizar animaciones que simulan el movimiento y la interacción de cuerpos rígidos con y sin fuerzas externas (por ejemplo, gravedad). Combinamos métodos numéricos, leyes físicas y teoría de gráficos en 3D, con una implementación propia en código C++ que logra simulaciones realistas de interacción en tiempo real con requerimientos básicos de video y CPU que pueden encontrarse en cualquier PC hogareña. Además, debido a que muchas veces estas simulaciones son la base de algún estudio, nuestro algoritmo permite tanto la visualización de los cuerpos en acción como la obtención de datos sobre la evolución de las variables involucradas. Cada ejecución contempla la generación automática de una serie de “fotos instantáneas” que congelan la posición de los distintos cuerpos intervinientes en la simulación, a intervalos regulares de tiempo, para su posterior inspección. Esta es un área de investigación muy actual y está en pleno desarrollo, todos los años se presentan nuevos trabajos y es cada vez más utilizada ya que el poder de procesamiento de las computadoras ha llegado al punto de poder procesar simulaciones muy complejas en tiempo real. Estas permiten ahorrar mucho tiempo y dinero que era usado en pruebas reales. Algunas áreas de aplicación son la industria automotriz, militar y de entretenimiento.

Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

Embed Size (px)

Citation preview

Page 1: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

1

Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real

Pablo Andrés Curello Instituto Tecnológico de Buenos Aires

[email protected]

Tutores Silvia Alicia Gómez, Leticia Irene Gómez

Instituto Tecnológico de Buenos Aires {sgomez | lgomez}@itba.edu.ar

Abstract

En este trabajo, se presenta un método para realizar animaciones que simulan el movimiento y la interacción de cuerpos rígidos con y sin fuerzas externas (por ejemplo, gravedad).

Combinamos métodos numéricos, leyes físicas y teoría de gráficos en 3D, con una

implementación propia en código C++ que logra simulaciones realistas de interacción en tiempo real con requerimientos básicos de video y CPU que pueden encontrarse en cualquier PC hogareña.

Además, debido a que muchas veces estas simulaciones son la base de algún estudio,

nuestro algoritmo permite tanto la visualización de los cuerpos en acción como la obtención de datos sobre la evolución de las variables involucradas. Cada ejecución contempla la generación automática de una serie de “fotos instantáneas” que congelan la posición de los distintos cuerpos intervinientes en la simulación, a intervalos regulares de tiempo, para su posterior inspección.

Esta es un área de investigación muy actual y está en pleno desarrollo, todos los años se

presentan nuevos trabajos y es cada vez más utilizada ya que el poder de procesamiento de las computadoras ha llegado al punto de poder procesar simulaciones muy complejas en tiempo real. Estas permiten ahorrar mucho tiempo y dinero que era usado en pruebas reales. Algunas áreas de aplicación son la industria automotriz, militar y de entretenimiento.

Page 2: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

2

ÍNDICE 1 INTRODUCCIÓN................................................................................................................................... 3

2 CONCEPTOS MATEMÁTICOS .......................................................................................................... 3

2.1 SISTEMAS DE COORDENADAS .......................................................................................................... 3 2.2 MATRICES Y TRANSFORMACIONES ................................................................................................. 5 2.3 COORDENADAS HOMOGÉNEAS ....................................................................................................... 6 2.4 QUATERNIONS ................................................................................................................................. 7

2.4.1 Definición.............................................................................................................................. 8 2.4.2 Operaciones........................................................................................................................... 8 2.4.3 Representación de rotaciones............................................................................................... 9 2.4.4 Cambio de espacios .............................................................................................................. 9

3 CONCEPTOS FÍSICOS........................................................................................................................10

3.1 VELOCIDAD LINEAL Y ANGULAR....................................................................................................10 3.2 VELOCIDAD DE UNA PARTÍCULA ....................................................................................................11 3.3 CENTRO DE MASA ...........................................................................................................................11 3.4 FUERZAS Y TORQUES......................................................................................................................12 3.5 MOMENTO LINEAL Y MOMENTO ANGULAR ..................................................................................12 3.6 TENSOR DE INERCIA ........................................................................................................................13

4 REPRESENTACIÓN DE CUERPOS .................................................................................................15

4.1 CONSTANTES INTRÍNSECAS ...........................................................................................................15 4.2 VARIABLES DE ESTADO.................................................................................................................15 4.3 FORMA Y SUPERFICIE.....................................................................................................................16

4.1.1 Representación poligonal ...................................................................................................17

5 OBTENCIÓN DEL PRÓXIMO ESTADO .........................................................................................18

6 MÉTODO DE SIMULACIÓN, PRIMERA PARTE..........................................................................20

7 COLISIONES ........................................................................................................................................21

7.1 DESCRIPCIÓN DEL PROCESO ..........................................................................................................23 7.2 DETECCIÓN DE INTERSECCIÓNES ..................................................................................................23

7.2.1 Intersección Esfera-Esfera..................................................................................................24 7.2.2 Intersección Triángulo-Triángulo......................................................................................24

7.3 TIPOS DE CONTACTO .....................................................................................................................25 7.4 DETERMINACIÓN DEL IMPULSO ....................................................................................................27

8 MÉTODO DE SIMULACIÓN FINAL ...............................................................................................28

9 RESULTADOS EXPERIMENTALES ................................................................................................30

10 CONCLUSIONES.................................................................................................................................41

11 FUTURAS EXTENSIONES ................................................................................................................42

12 AGRADECIMIENTOS ........................................................................................................................42

13 REFERENCIAS ....................................................................................................................................42

14 APÉNDICE: IMPLEMENTACIÓN DEL MOTOR PHY..................................................................43

Page 3: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

3

1 INTRODUCCIÓN Existen muchos trabajos sobre simulaciones de animaciones en tiempo real, peor la gran

mayoría necesitan placas de video con aceleradores y procesadores muy potentes para poder alcanzar una rendimiento óptimo.

Todos los días interactuamos con cuerpos y vemos como se mueven de acuerdo a las leyes

de la física. En este trabajo se pretende simular este comportamiento por medio de una computadora, de manera que pueda verse un resultado creíble lo más rápido posible, sin requerimientos sofisticados de hardware.

Por tratarse de una simulación, existe un objetivo claro: el realismo. Para eso es necesario

estudiar cuidadosamente las leyes físicas que rigen la dinámica de los cuerpos y tratar de llevarlas a una computadora, tarea que requiere un análisis de diferentes técnicas para lograrlo, con la elección de la más adecuada de acuerdo a las interacciones que se pretenden simular y a los límites de tiempo de la simulación. Por lo que a este trabajo respecta, estos límites de tiempo son rígidos, ya que se pretende que la simulación ejecute lo más rápido posible en una computadora de manera que pueda verse la evolución de la simulación en tres dimensiones en tiempo real.

Para comprender este documento se recomienda contar con conocimientos básicos matemáticos y físicos, más precisamente sobre matemática vectorial y métodos numéricos, y sobre la dinámica de partículas y cuerpos rígidos. En el trabajo se introducen las fórmulas y las relaciones que se utilizan, pero no se presenta un análisis extensivo de las mismas, éstas ya que se debería cubrir una gran cantidad de temas diversos, alejando el trabajo de su objetivo.

Este documento está organizado en varias partes. Las dos primeras explican los conceptos teóricos introductorios que constituyen la base para comprender lo que sigue. La parte siguiente describe la representación de los cuerpos y sus variables para pasar a analizar el proceso de obtención del estado de un cuerpo a partir de las excitaciones y los estados anteriores (integración). Luego de esto último explicamos la primera parte del algoritmo de simulación que proponemos, con su posterior estudio de colisiones entre cuerpos. Finalmente se analiza el método en su conjunto.

2 CONCEPTOS MATEMÁTICOS

Antes de comenzar, hace falta aclarar que para todas las ecuaciones en general usaremos como convención letras minúsculas para los escalares y letras mayúsculas para los vectores.

2.1 SISTEMAS DE COORDENADAS Para representar la posición de una partícula en el espacio es necesario establecer un

sistema de coordenadas. Este consiste en un punto de origen X cuyos tres componentes son (Xx, Xy, Xz) y tres vectores que determinan su orientación: VX, VY, VZ como se muestra en la figura 1.

Page 4: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

4

Todo punto en el espacio tridimensional puede ser expresado como un vector fijo (punto

de origen del sistema de coordenadas) más una combinación lineal de tres vectores cualesquiera siempre que sean linealmente independientes. Los coeficientes que multiplican a estos ejes constituyen las coordenadas del punto en ese sistema de coordenadas.

Debido a la complejidad del sistema en estudio, es necesario determinar dos tipos de coordenadas:

• Coordenadas globales o del mundo • Coordenadas locales

Las primeras se toman respecto de un sistema de coordenadas principal que se

encuentra en el punto (0, 0, 0) y cuyos ejes son VX,=(1, 0, 0), VY,=(0, 1, 0) y VZ,=(0, 0, 1). En principio, todo vector está representado en estas coordenadas.

Las coordenadas locales se toman respecto de un sistema de coordenadas que se mueve y rota junto con un cuerpo en particular. Esto es sumamente útil ya que todo punto que se mantenga fijo respecto de un cuerpo puede ser expresado en coordenadas locales sin importar si el objeto está rotando o moviéndose, es decir, en coordenadas locales es un punto constante mientras que en coordenadas globales es variable (el sistema de coordenadas se mueve y rota con el objeto o cuerpo).

Con el objeto de simplificar las ecuaciones de movimiento de cuerpos rígidos que se analizan más adelante se tomará la convención de que las coordenadas locales de un cuerpo

y

z

x

X

X

X

XV

V

V

Figura 1

y

z

x

Figura 2a

y

z

x

X

Xz

Xx

XVy

Vx

Vz

Figura 2b

Page 5: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

5

están centradas en su centro de masa. Por lo tanto el centro de masa de un cuerpo expresado en sus coordenadas locales se encuentra en la posición (0, 0, 0).

2.2 MATRICES Y TRANSFORMACIONES En las demostraciones y fórmulas a desarrollar sobre el movimiento de cuerpos rígidos se

usará exhaustivamente matrices para expresar vectores y transformaciones.

En este trabajo tomamos como convención para expresar vectores 3D una matriz vertical de 3x1. De esta forma si se quiere transformar un vector mediante una matriz M la operación a realizar será la siguiente multiplicación de matrices

=

zyx

mmmmmmmmm

zyx

333231

232121

131211

'''

P’ = M.P

donde M es la matriz de transformación, P’=(x’, y’, z’) es el vector transformado y P=(x, y, z) es el vector a transformar.

Si se eligen correctamente los valores que integran la matriz M, estas transformaciones de vectores pueden usarse para rotar o cambiar el tamaño de un vector.

Para rotar un vector alrededor de los ejes x, y y z, respectivamente, se deben utilizar las siguientes matrices de transformación:

−=

θθθθ

cossin0sincos0001

xR

−=

θθ

θθ

cos0sin010

sin0cos

yR

−=

1000cossin0sincos

θθθθ

zR

donde ? es el ángulo a rotar. Estas matrices sirven para rotar un vector más allá de las coordenadas en que esté expresado. Es decir, si el vector a transformar está en coordenadas globales, el vector transformado estará en coordenadas globales. Lo mismo se aplica con las coordenadas locales.

Una observación interesante es que las columnas de estas matrices son iguales a cada

uno de los ejes cartesianos luego de ser afectados por esta rotación. Si se desea trasladar el vector P simplemente se le suma el vector translación

directamente: P’ = P + T

donde T = ( tx, ty, tz ) contiene las unidades a trasladar en sus componentes.

Page 6: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

6

2.3 COORDENADAS HOMOGÉNEAS Un método para transformar vectores muy usado en el área de computación gráfica son

las coordenadas homogéneas. La diferencia consiste en utilizar cuatro coordenadas en vez de tres para representar un punto en el espacio. El punto (x, y, z) en coordenadas homogéneas sería (x.W, y.W, z.W, W) donde W es un número real cualquiera distinto de cero. En el caso particular de que W valga 1, la cuarta coordenada puede ser ignorada ya que las tres primeras coordenadas son equivalentes a las coordenadas cartesianas que ya conocemos.

En general, dado un vector en coordenadas homogéneas (X, Y, Z, W), su equivalente en coordenadas cartesianas se obtiene mediante las siguientes ecuaciones:

x = X / W y = Y / W z = Z / W

Una ventaja de utilizar estas coordenadas es que tanto las translaciones como las rotaciones de vectores se pueden lograr multiplicando una matriz de transformación M, a diferencia de lo explicado anteriormente, donde una translación se lograba mediante una suma de vectores.

Para rotar un vector en coordenadas homogéneas alrededor de los ejes x, y y z en un ángulo ? se deben utilizar las siguientes matrices de transformación, respectivamente:

=

10000cossin00sincos00001

θθθθ

xR

−=

10000cos0sin00100sin0cos

θθ

θθ

yR

=<

1000010000cossin00sincos

θθθθ

R

Para trasladar un vector en coordenadas homogéneas se debe utilizar:

=

1000100010001

TzTyTx

T

donde Tx, Ty y Tz son las unidades a trasladar en los ejes x, y y z.

Como todas las transformaciones son multiplicaciones de matrices, si por ejemplo se quisiera trasladar un vector V, luego rotarlo y volverlo a trasladar, usando las matrices T1, R y T2 las operaciones a realizar serían las siguientes:

VTRTVTRTV ⋅⋅⋅=⋅⋅⋅= )(' 1212

Page 7: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

7

Como puede verse, las matrices pueden asociarse y formar una sola matriz de transformación, de manera de guardar todas las transformaciones realizadas en una única matriz que llamaremos M:

VMV ⋅=' donde 12 TRTM ⋅⋅=

Esta expresión es de gran utilidad ya que a medida que un objeto se va trasladando y rotando, la transformación total es guardada en una sola matriz.

2.4 QUATERNIONS

Las formas más comunes de representar rotaciones son: • Ángulos de Euler • Matriz de Transformación • Quaternion

Los ángulos de Euler son los que se miden respecto de cada uno de los ejes x, y y z como

se ve en la figura 3.

Especificando estos tres ángulos podemos representar cualquier rotación. Esta es la

forma más simple en principio, pero es incómoda en muchas situaciones.

Las matrices de transformación fueron explicadas anteriormente y son muy útiles, el problema es que una matriz de 4x4 guarda 16 números y una de 3x3 guarda 9, mucho más que los tres ángulos de Euler o los cuatro que usan los quaternions.

Cuando se realiza una simulación, las matrices se están modificando todo el tiempo, esto hace que al tiempo de estar corriendo la simulación, la matriz empieza a acumular errores y pierde coherencia de modo que ya no describe una rotación solamente, sino también una transformación distinta que tiende a ‘deformar’ el espacio.

La ventaja de los quaternions reside en que sólo usan 4 valores, por lo cual existe mucha menos redundancia en los datos, lo que produce menos errores. Además, se puede detectar si un quaternion ya no es correcto por medio de su módulo, que debe valer uno. Cuando esto no ocurre, se procede a normalizarlo y el problema está solucionado. Otra ventaja de los quaternions es que en otras aplicaciones donde se necesita interpolar rotaciones, los quaternions son más útiles y tienen menos error en la operación ([7], [8]).

y

z

x

Figura 3

γ β

α

Page 8: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

8

2.4.1 DEFINICIÓN DE QUATERNION Los teoría de los quaternions mantiene cierta analogía con la de los números complejos.

Un número complejo se define como iba ⋅+ , donde a y b son números reales y i es un versor que cumple con

1−=⋅ ii

Los quaternions, a diferencia de los números complejos se definen como una combinación lineal de tres versores:

kzjyixwqrrr

⋅+⋅+⋅+= donde w, x, y y z son números reales e i, j y k son versores que cumplen las siguientes relaciones:

1−=⋅ ii 1−=⋅ jj 1−=⋅ kk

kji =⋅ ikj =⋅ jik =⋅

Con estas definiciones alcanza para encontrar las fórmulas a utilizar para realizar operaciones entre quaternions.

Las relaciones entre los versores pueden interpretarse de forma que las multiplicaciones

son productos vectoriales y que los versores i, j y k representan los ejes cartesianos x, y y z respectivamente.

2.4.2 OPERACIONES CON QUATERNIONS Además de poder expresar el quaternion como una combinación lineal de tres versores

sumada a w, existe otra representación que consiste en la dupla ),( Vwqr

= donde V es el vector que tiene como componentes x, y y z.

Utilizando esta última notación, mostramos las posibles operaciones sobre los

quaternions.

Dados ),( Vwqr

= y )','(' Vwqr

=

• Suma: )','(' VVwwqqrr

++=+

• Producto: )''',''(' VsVwVVVVwwqqrrrrrr

++×⋅−⋅=⋅

• Conjugado: ),( Vwqr

−=

• Módulo: 2222 zyxwq +++=

• Inversa: qq

qq

⋅=−1

La notación usada para el producto escalar entre vectores es el punto “.” y para el

producto vectorial es la cruz “x”.

Page 9: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

9

2.4.3. REPRESENTACIÓN DE ROTACIONES Un quaternion puede ser usado para representar una orientación o rotación. Si deseamos

rotar un vector en un ángulo de ? alrededor de un eje N como indica la figura 4, tanto el vector como la rotación se representan como quaternions [8].

El quaternion que representa al vector a rotar debe tener w=0, por lo tanto es del tipo

),0( Vpr

= , donde V es el vector.

El quaternion que representa la rotación es ))2/sin(),2/(cos( Nqr

⋅= θθ donde N y q

están normalizados: 1=q y 1=Nr

.

Para realizar la rotación debe realizar una multiplicación a izquierda y otra a derecha de

p con q y la inversa de q: 1' −⋅⋅= qpqp

donde p’ es el quaternion resultado. Cabe aclarar que p’ siempre tendrá w=0 ya que representa un vector y no una rotación.

2.4.4. CAMBIO DE ESPACIOS Puede demostrarse que rotar el vector p con el quaternion q es equivalente a aplicar la

siguiente matriz de transformación:

+−++−+−+−+

+−+−

=

10000)(212222022)(212202222)(21

22

22

22

yxyzwxxzwyyzwxzxwzxy

xzwywzxyzy

M

Por cuestiones de espacio y tiempo no realizaremos la demostración.

Si lo que poseemos es la matriz y se quiere expresar como un quaternion, el quaternion

puede calcularse de la siguiente manera:

N P ́

P

Ø

Figura 4

Page 10: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

10

443322112/1 mmmmw +++⋅±=

wmm

x4

2332 −=

wmm

y4

3113 −=

wmm

z4

1221 −=

3. CONCEPTOS FÍSICOS

En las siguientes secciones se presentará de manera rápida los conceptos y modelos físicos que rigen la dinámica de partículas y cuerpos rígidos. Dichas leyes son de vital importancia para lograr simular el comportamiento de un cuerpo ante fuerzas externas.

3.1. VELOCIDAD LINEAL Y ANGULAR Dada la posición de una partícula X(t) que depende del tiempo, su velocidad lineal V(t)

se obtiene por medio de una simple derivada

)()( tXtV &=

Recordemos que X y V son vectores, por lo tanto V será uno cuyos componentes son los componentes de X derivados respecto del tiempo.

En este trabajo llamaremos velocidad al vector recién explicado y rapidez al módulo del

vector velocidad V, que representa las unidades o metros por segundo que recorrería la partícula si esta rapidez se mantuviera constante.

La velocidad angular se representa con el vector W que apunta en la dirección del eje de rotación del cuerpo, y cuyo módulo es lo que llamaremos rapidez angular. Esta rapidez angular es el desplazamiento angular del cuerpo en un período de tiempo en que esta rapidez se mantiene constante.

Consideremos un cuerpo en rotación como muestra la figura 5, donde X(t) es la posición del centro de masa del cuerpo, V(t) es la velocidad del centro de masa y W indica el eje y rapidez de rotación del cuerpo.

y

z

x

W(t

V(t

X(t

Figura 5

Page 11: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

11

En el caso de la velocidad lineal, es simple ver que se calcula derivando al vector de posición, pero la relación entre la velocidad angular y la rotación depende de cómo representemos esta rotación. En el presente trabajo se utilizaron los quaternions para las rotaciones, por lo tanto es necesario establecer una relación entre la velocidad angular y este quaternion. Esta relación esta dada por

)()(21

)( tqtWtq ⋅=&

Nótese que para poder multiplicar W(t) y q(t), es necesario que el primero se exprese

como el quaternion (0, W(t)) y no como un vector de 3x3.

3.2. VELOCIDAD DE UNA PARTÍCULA Definamos una partícula o punto cuya posición en coordenadas globales es Xp(t) y en

coordenadas locales relativas al centro de masa es Xrp(t). Supongamos que esta partícula forma parte de un cuerpo cuyo centro de masa se encuentra en X(t) y que tiene una velocidad lineal de V(t) y una velocidad angular de W(t).

La relación entre Xp(t) y Xrp(t) será la siguiente

)()()( tXrtXtX pp +=

La derivada de Xp(t) puede expresarse en función de las velocidades como

)()]()([)()( tVtXtXtWtX pp +−×=&

Esta ecuación separa la velocidad en dos componentes, un componente lineal que viene

dado por V(t) y un componente angular dado por )]()([)( tXtXtW p −× .

3.3. CENTRO DE MASA La definición del centro de masa nos permite separar las dinámicas de los cuerpos en las

partes lineal y angular.

A los efectos de discretizar los cuerpos para nustra simulación, suponemos que un cuerpo está formado por un conjunto de partículas muy pequeñas, cada una con una masa mi y una posición Xri (coordenadas locales). De esta forma, el centro de masa de un cuerpo en coordenadas locales se define como

m

tXrmCMr ii∑=

)(

donde m es la masa total, o sea, la suma de todas las de las partículas: ∑= imm

En nuestro caso, dijimos previamente que se tomaba la convención de que las

coordenadas locales de un cuerpo tienen origen en este punto. Por lo tanto el centro de masa de un cuerpo expresado en sus coordenadas locales se encuentra en la posición (0, 0, 0).

Page 12: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

12

3.4. FUERZAS Y TORQUES

Una fuerza se define con los siguientes atributos; • Módulo • Dirección • Punto de aplicación El módulo de la fuerza indica que tanta aceleración puede provocar sobre un cuerpo dado

en la dirección de esta fuerza. El punto de contacto es donde se aplica la fuerza, que podemos imaginar que es una partícula muy chica que integra el cuerpo.

Cuando una fuerza es aplicada provoca una fuerza equivalente sobre el centro de masa que es la responsable de la aceleración lineal resultante del cuerpo y un torque que sería una especie de “fuerza angular” que provoca una aceleración angular en el cuerpo.

Si definimos F i(t) como la fuerza total que actúa sobre la partícula i-ésima del cuerpo, X(t) como la posición del centro de masa del cuerpo en coordenadas globales y Xi(t) como la posición de la partícula i-ésima en coordenadas globales, definimos el torque que esta fuerza produce sobre el cuerpo como

)()]()([)( tFtXtXtT iii ×−=

Figura 6

La dirección del torque Ti(t) es la del eje sobre el cual el cuerpo rotará debido a este, que es igual a la de la velocidad angular Wi(t) que este producirá.

Una propiedad interesante del torque es que depende de el punto de aplicación de la fuerza, pero la fuerza equivalente sobre el centro de masa es siempre la misma.

3.5. MOMENTO LINEAL Y MOMENTO ANGULAR

El momento lineal o cantidad de movimiento de una partícula se define como

VmP ⋅= donde V representa la velocidad de la partícula.

X(t) P0(t)

F(t)

Page 13: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

13

Para un cuerpo, tenemos que

∑ ⋅= )()( tXmtP ii&

que es igual a

∑ ∑ ∑ −⋅×+⋅=−×+⋅ )]}()([)()()]}()([)()({ tXtXimtWtVmtXtXtWtVm iiii

Si tomamos al centro de masa como el origen de coordenadas, es decir, si Xi(t) está en

coordenadas locales, la última sumatoria es cero (equivale al centro de masa en coordenadas locales) y se obtiene

( ) )()()( tVMtVmitP ⋅=⋅= ∑

Además, de acuerdo a las leyes de Newton, la fuerza que actúa sobre el centro de masa

de un cuerpo es igual a la derivada de la cantidad de movimiento

)()( tPtF &=

El momento angular de un cuerpo se define como

)()()( tWtItL ⋅= donde W(t) es la velocidad angular del cuerpo y I(t) es una matriz de 3x3 llamada tensor de inercia. Esta última representa la inercia rotacional del cuerpo, y depende de cómo esté distribuida la masa del cuerpo respecto del centro de masa.

El concepto de momento angular de un cuerpo no es para nada intuitivo, pero es muy útil ya que se conserva en la naturaleza. Para un cuerpo al que no se le aplican fuerzas, su momento angular se mantiene constante, mientras que la velocidad angular podría cambiar (esto sucede si cambia el momento de inercia en el tiempo). La relación entre el momento angular y el torque aplicado es

)()( tLtT &= que es análogo al de la fuerza aplicada en el centro de masa y el momento lineal.

3.6. TENSOR DE INERCIA

Para cuerpos simples y que rotan alrededor de un eje fijo, el tensor de inercia se calcula analíticamente mediante integrales. Pero para la simulación que pretendemos realizar eso no se aplica ya que los valores de la matriz dependen del eje de rotación, que cambia todo el tiempo al aplicar torques arbitrarios sobre los cuerpos. La definición del tensor de inercia contiene integrales que debemos expresar como sumatorias que se obtienen al considerar el cuerpo un conjunto de partículas con masas muy pequeñas. Si Xri es la posición de la partícula i-ésima del cuerpo expresado en coordenadas locales (relativa al centro de masa) y mi su masa, el tensor de inercia lo definimos como

Page 14: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

14

+−−

−+−

−−+

=

)(

)(

)(

)(222222

222222

222222

yixiiyiziixizii

ziyiizixiixiyii

zixiiyixiiziyii

XrXrmXrXrmXrXrm

XrXrmXrXrmXrXrm

XrXrmXrXrmXrXrm

tI

donde Xrix, Xriy, Xriz son los componentes de Xri .

Como puede verse, si un cuerpo está rotando las posiciones Xri de las partículas dependen de la rotación, por lo tanto habría que calcular I(t) cada vez que un cuerpo rota en alguna dirección. Esto es muy pesado y haría la simulación tan lenta que sería impensado que funcione en tiempo real. La solución se encuentra intentando separar una parte del cálculo asumiendo una rotación específica, y luego recalcular el tensor de inercia para cualquier otra rotación.

Si Id es la matriz identidad 3x3 y si usamos la propiedad 222

ziyixiiT

i XrXrXrXrXr ++=⋅ el tensor de inercia puede escribirse como

∑ ⋅−⋅⋅= ]]([)( Tiii

Tii XrXrIdXrXrmtI

Si suponemos que el cuerpo tiene una rotación inicial dada, la posición de las partículas

que las constituyen pueden expresarse en función de su posición inicial. Entonces si consideramos a Xi como un vector X0i afectado por la rotación descripta por la matriz R(t), tenemos que )(0 tRXrXr ii ⋅= . Aquí, Xr0i es la posición inicial de la partícula i-ésima.

Reemplazando en la expresión anterior de I(t) y reagrupando se llega a

TTiii

Tii tRXrXrIdXrXrmtRtI )(]]([)()( 0000 ⋅⋅−⋅⋅⋅= ∑

y si definimos a I0 como la matriz

∑ ⋅−⋅⋅= ])[()( 00000T

iiiT

ii XrXrIdXrXrmtI

entonces el tensor de inercia queda definido por la siguiente expresión

TtRItRtI )()()( 0 ⋅⋅=

Como los X0i no dependen de la rotación instantánea del cuerpo, I0 tampoco ya que queda en función de matrices constantes. Por lo tanto, I(t) ha quedado definido por una parte invariable que puede ser precalculada antes de la simulación ( I0 ) multiplicada por derecha e izquierda por R(t) y R(t)T que sí dependen del tiempo. Esto permite que el tensor de inercia sea calculado mucho más eficientemente ya que este cálculo sólo involucra dos multiplicaciones de matrices, de manre atal que el trabajo más pesado se realiza antes de la simulación y se guarda en la matriz I0.

Page 15: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

15

4. REPRESENTACIÓN DE CUERPOS Los cuerpos que tendremos en cuenta son los llamados cuerpos rígidos. Esta categoría incluye a todos los que no permiten modificaciones en su estructura. Por lo tanto, no se tendrán en cuenta deformaciones de objetos producto de un choque o de fuertes fuerzas de impacto. Para representar un cuerpo se debe tener en cuenta la siguiente información:

• Vector de estado • Constantes intrínsecas del cuerpo • Forma o superficie

Para describir el estado de un cuerpo en el tiempo, haremos uso de un conjunto de

variables de estado agrupadas en lo que llamaremos el vector de estado Y(t). Estas no son más que funciones del tiempo que describen valores como la rotación, posición y velocidad del cuerpo en cuestión.

Las constantes intrínsecas del cuerpo son parámetros no variables que aportan a la

descripción del cuerpo y sus características generales, como la masa, tensor de inercia, y coeficiente de restitución, que influyen notablemente en la respuesta de éste ante excitaciones de fuerzas externas.

La forma o superficie de un cuerpo permite saber cuándo está chocando o rozando con

otro objeto, además de permitir el cálculo de algunas de sus constantes como el tensor de inercia. También es importante la forma del objeto a la hora de llevar a cabo la simulación porque es lo que hay que dibujar en pantalla.

4.1. CONSTANTES INTRÍNSECAS

Las constantes más importantes son: • Masa • Tensor de inercia • Coeficiente de restitución

Como ya fue explicado, la masa es la inercia del objeto con respecto a las fuerzas que se

apliquen en su centro de masa mientras que el tensor de inercia, es la inercia con respecto a los torques que se le apliquen. En realidad, el tensor de inercia no es constante. Lo que se toma constante es la matriz I0 que se usa para calcular el tensor de inercia (ver sección 3.6).

El coeficiente de restitución indica la energía que se absorbe en una colisión entre dos

cuerpos. Este coeficiente se usará más adelante al analizar el algoritmo propuesto en detalle.

4.2. VARIABLES DE ESTADO El vector de estado en un instante debe contener la información necesaria sobre el estado traslacional y rotacional:

• Posición • Rotación • Momento lineal • Momento angular

Page 16: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

16

El momento lineal o cantidad de movimiento podría ser reemplazada por la velocidad del cuerpo. De manera similar también podría reemplazarse el momento angular con la velocidad angular. Pero como se dijo anteriormente, la ventaja del momento lineal y angular es que se conservan y muchas fórmulas resultan más simples si se trabaja con los momentos y no con las velocidades directamente. El vector de estado, que llamaremos Y(t), queda definido de la siguiente manera

=

)()()()(

)(

tLtPtqtX

tY

donde • X(t) es la posición del centro de masa del cuerpo en coordenadas globales • q(t) es el quaternion de rotación • P(t) es el momento lineal • L(t) es el momento angular

La pregunta es ¿cuál es la relación existente entre estas variables de estado y las fuerzas y torques que se apliquen? La respuesta se obtiene calculando la derivada del vector de estado.

Utilizando las fórmulas que se mostraron en las secciones previas se llega al vector derivado:

⋅=

)()(

)()(21

)(

)(

tTtF

tqtW

tV

tY&

De esta forma, la derivada de la posición del centro de masa es su velocidad, la de la

rotación se obtiene de la velocidad angular y el quaternion de la rotación actual, la del momento lineal de las fuerzas aplicadas sobre el centro de masa con la fuerza y la del momento angular con los torques aplicados.

4.3. FORMA Y SUPERFICIE

Existen varias formas de representar un objeto en tres dimensiones. Algunas de ellas son: • Representación Poligonal • Superficies paramétricas • Representación implícita

La representación poligonal utiliza una red de polígonos para describir la superficie de un

objeto. Cada polígono es adyacente a otros de forma que todos juntos aproximan la forma de la superficie. Esta representación usa mucho espacio ya que para lograr una buena calidad de imagen hace falta dividir las superficies en grandes números de polígonos. más allá de esta desventaja, es la forma más rápida y simple de manejarse con objetos en 3D y por eso es la más usada.

Page 17: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

17

Figura 7

La representación por medio de superficies paramétricas es parecida a la poligonal, con la diferencia de que en vez de polígonos usamos pequeñas superficies que se describen por medio de una fórmula matemática y no tienen por qué ser planas.

La representación implícita hace uso de una ecuación matemática que define una

superficie simple como una esfera, un plano, etc. Es la menos usada ya que sólo permite objetos básicos y resulta ser bastante compleja en su cálculo ya que cada superficie representable es muy distinta a las otras, requiriendo fórmulas y chequeos propios.

4.3.1. REPRESENTACIÓN POLIGONAL En este trabajo se decidió usar la representación poligonal ya que es la más usada y la

que permite una representación de cualquier objeto de una manera simple. Otra ventaja es que todos los programas de diseño asistido por computadora (Autocad,

3DStudio, Maya, Softimage, etc.) usan esta representación, de manera que puede usarse en la simulación todo objeto creado con alguno de estos programas.

De acuerdo a la representación poligonal, la forma de un cuerpo u objeto quedará definido a través de una lista de polígonos. A modo de simplificación, usaremos sólo triángulos como polígonos para formar cada cuerpo, de manera que la superficie se representará con la siguiente información:

• Lista de vértices • Lista de triángulos • Lista de normales

Como cada triángulo está formado por tres vértices, la lista de triángulos indicará con

qué vértices está formado, y la lista de vértices contendrá un vector con las coordenadas (x, y, z) de cada uno de ellos. La lista de normales indica para cada triángulo, el vector normal al plano que lo contiene. Esta normal se utiliza para dibujar el triángulo en la pantalla y para la detección de colisiones (siempre se elige la que se dirige hacia afuera del objeto).

Page 18: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

18

5. OBTENCIÓN DEL PRÓXIMO ESTADO En la simulación que queremos realizar, el estado de un cuerpo se obtendrá mediante un

algoritmo que trabaja de a pasos. Esto quiere decir que dado el estado de un cuerpo en el tiempo t, la simulación deberá calcular el nuevo estado de éste un tiempo después. De esta forma, el resultado del paso anterior será la condición inicial del paso próximo a realizar.

Si k indica el número de paso en el que se encuentra la simulación, teniendo el estado

actual de un cuerpo dado por el vector de estado Y(tk) y su derivada:

=

)()()()(

)(

tLtPtqtX

tY

⋅=

)()(

)()(21

)(

)(

tTtF

tqtW

tV

tY&

debemos enfrentar el problema de obtener el vector de estado Y(tk+1). Esto se resuelve por medio de métodos numéricos de resolución de ecuaciones diferenciales, como por ejemplo los mátodos de Euler, de Runge-Kutta o de Paso Adaptativo, entre otros.

Estos métodos analizan la obtención de una aproximación a una función y(t) en un intervalo [a,b] calculando su valor para valores de tiempo tk. Esta función viene dada por la ecuación

( )ytfy ,'= con ( ) 0yay = .

En nuestro caso, la y(t) es un vector de funciones, de modo que se deben resolver cuatro problemas de este tipo donde la función y(t) en cada uno es X(t), q(t), P(t) y L(t) respectivamente.

El método de Euler comienza dividiendo el intervalo [a,b] en M subintervalos del mismo tamaño usando la partición dada por los siguientes puntos.

khatk += para Mk ,....,1,0= siendo M

abh −=

donde se ha llamado h al tamaño de paso (que en nuestro caso representa tiempo). En nuestra simulación, no tiene por qué cumplirse que el tamaño de paso sea constante. Sin embargo, este análisis es útil porque cada paso de la simulación será como el primero en un problema diferencial diferente con un h propio.

Procedemos ahora a resolver aproximadamente ( )ytfy ,'= en [t0,tM] con ( ) 00 yty =

Suponiendo que ( )ty , ( )ty' , ( )ty '' son continuas y usando el teorema de Taylor para

desarrollar ( )ty alrededor de 0tt = , para cada punto t existe un punto c1 entre t0 y t tal que

( ) ( ) ( )( ) ( )( )201

000 2'''

ttcytttytyty

−+−+= .

Al sustituir ( ) ( )( )000 ,' tytfty = y 01 tth −= el resultado es

( ) ( ) ( )( ) ( )2

'',2

10001

hcytythftyty ++=

Page 19: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

19

Si el tamaño de paso h es suficientemente pequeño, entonces podemos despreciar el término que contiene h2 y obtener

( ) ( ) ( )( )00011 , tythftyyty +=≈

que se llama aproximación de Euler. Por despreciar h2 se dice que hay un error de truncamiento local de orden 2 o O(h2). Cuanto más grande sea el exponente de h a despreciar, menor será el error ya que h es cercano a 0. Repitiendo el proceso generamos una sucesión de puntos que se aproximan a la gráfica de la solución ( )tyy = . El paso general del método de Euler es

htt kk +=+1 ( )kkkk ythfyy ,1 +=+

para 1,....,1,0 −= Mk .

Este método es muy simple de calcular, pero tiene un error acumulativo o global de orden O(h) que es muy grande. En cada obtención de un valor de yk+1, se usa el valor anterior yk solamente de forma que los errores en cada paso se van acumulando hasta que el error acumulado se hace demasiado importante. Las consecuencias de este error pueden verse en la simulación cuando aparecen fuerzas grandes que hacen que los cuerpos empiecen a tener comportamientos extraños (parece que tiemblan) y a medida que pasa el tiempo empeora.

El método de Runge-Kutta se construye a partir de uno desarrollado por Taylor. Existen diferentes métodos de Runge-Kutta de diferentes órdenes. El método de orden N es el que tiene un error global final del mismo orden ( )NhO . Esto se logra evaluando la función y en varios puntos, en cada paso. Cuando el orden es N=4, el método es bastante preciso, estable y fácil de programar. Aún más, la mayoría de los expertos dicen que no es necesario trabajar con métodos de orden superior porque el aumento del costo computacional no compensa la mayor exactitud.

Consiste en calcular la aproximación 1+ky de la siguiente manera:

443322111 kwkwkwkwyy kk ++++=+ donde k1, k2, k3, k4, son de la forma

( )kk ythfk ,1 =

( )1112 , kbyhathfk kk ++=

( )231223 , kbkbyhathfk kk +++=

( )36251434 , kbkbkbyhathfk kk ++++= Emparejando estos coeficientes con los del método de la serie de Taylor de orden N=4 de manera que el error de truncamiento local sea de orden ( )5hO se obtiene un sistema de ecuaciones que lleva a los valores de la solución que para las variables ai y wi son

21

2 =a , 13 =a , 21

1 =b , 21

3 =b , 04 =b , 05 =b , 16 =b ,

61

1 =w , 31

2 =w , 31

3 =w , 61

4 =w

Page 20: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

20

Con estos valores obtenemos la fórmula para el método Runge-Kutta de orden N=4 estándar. A partir del punto inicial (t0,y0) se genera la sucesión de aproximaciones usando la fórmula recursiva

( )6

22 43211

ffffhyy kk

++++=+

donde

( )kk ytff ,1 =

++= 12 2

,2

fh

yh

tff kk

++= 23 2

,2

fh

yh

tff kk ( )34 , hfyhtff kk ++=

Como puede verse, al hacer un paso de tamaño h en el tiempo, la función f es evaluada en los tiempos tk, tk+h/2 y tk+h. Esto requiere un mayor número de cálculos que el método de Euler, pero a menos que se esté realizando una simulación muy simple que no tenga problemas potenciales de inestabilidad, la mejora en la reducción de error es considerable y vale la pena realizarla. Por lo tanto, en nuestra simulación utilizaremos el método de Runge-Kutta de orden 4 para actualizar el estado de los cuerpos.

El método de Paso Adaptativo tiene la particularidad de adecuarse al tipo de función f

de forma que el error en la resolución se mantenga bajo y acotado. Lo que hace es modificar el tamaño del paso, por lo que previamente no se sabe cuantos pasos hay que realizar en un intervalo para obtener y.

En principio este método resulta tentador porque aumenta la estabilidad de la simulación, pero tiene la desventaja de que el cálculo de la estimación de error consume procesamiento y hace que la simulación sea más lenta. Por lo tanto, si pretendemos que la simulación corra en tiempo real, quizás es preferible usar un método como el de Runge-Kutta que es más rápido y permite realizar más pasos por segundo. Esta posibilidad de hacer más pasos por segundo quizás compense la reducción de error que se logra con el paso variable del método adaptativo.

6. MÉTODO DE SIMULACIÓN, PRIMERA PARTE

El algoritmo de simulación está dividido en dos partes principales. La primera se encarga de actualizar el estado de los cuerpos a través del tiempo y la segunda se ocupa de procesar las colisiones que se produzcan entre ellos.

Con los conceptos ya explicados, estamos en condiciones de analizar el esquema del proceso de la primera parte que se muestra a continuación. Allí puede verse que para actualizar el estado de un cuerpo se necesitan los siguientes datos de entrada:

• El estado anterior en que se encontraba, que consiste en el vector de estado Y(t) que se obtuvo del paso anterior

• Las fuerzas que se apliquen sobre el cuerpo. • La variación de tiempo desde el paso anterior

Page 21: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

21

Figura 8

Luego de obtener el nuevo estado se procederá a procesar las colisiones para volver a empezar repitiendo el ciclo mientras dure la simulación. Para cada nueva iteración, el estado anterior es el estado nuevo de la iteración anterior. De esta forma podrá verse la evolución en el tiempo de la dinámica de los cuerpos a medida que se aplican fuerzas sobre ellos.

El proceso “Actualizar Estado” es básicamente un integrador que a partir del vector de estado Y(t) y su derivado obtendrá el nuevo estado, luego de un intervalo de tiempo. La derivada del vector de estado se obtiene de acuerdo a las fórmulas explicadas en la sección 4.2 y depende de las fuerzas aplicadas sobre el centro de masa y de los torques. Para esto suponemos que dado un tiempo de simulación, es posible obtener las fuerzas que actúan sobre el cuerpo en ese instante.

La naturaleza iterativa del algoritmo es lo que acarrea mayores inconvenientes, pero, por el contrario, es lo que lo hace más simple y general. Uno de estos problemas es el de la correctitud de los valores entregados por el integrador al extrapolar el estado del cuerpo. Para minimizar estos errores se requiere que los estados de los cuerpos sean actualizados de a intervalos de tiempo lo más pequeños posibles, lo que permite un seguimiento más real de su evolución en el tiempo.

En las secciones siguientes se mostrará como detectar y reaccionar ante las colisiones con otros cuerpos, lo que conforma la segunda parte del algoritmo.

7. COLISIONES Todo el análisis hecho hasta ahora de la simulación ha logrado obtener el estado de un

cuerpo bajo la influencia de fuerzas. Ahora estudiaremos como resolver el problema de las colisiones entre cuerpos. La idea principal es que los cuerpos no son penetrables. De no tener esto en cuenta, veríamos en la simulación objetos que se atraviesan unos a otros sin ningún problema, perdiendo realismo. Resumiendo, se necesita un mecanismo de intercambio de energía entre los cuerpos.

El procesamiento de colisiones puede encararse de dos formas. • Preventiva o sin interpenetración • Con interpenetración

Actualizar Estado fuerzas

tiempo

estado anterior

estado nuevo

Page 22: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

22

La diferencia entre ellos es básicamente si queremos prevenir colisiones o detectarlas cuando ya ocurrieron. Un procesamiento preventivo se encargaría de encontrar las intersecciones entre objetos antes de que se produzcan y evitarlas. Un procesamiento con interpenetración detectaría las intersecciones cuando ya se produjeron y haría algo al respecto.

Debido a que el método de simulación usado es iterativo, es más viable usar la segunda opción, ya que resulta muy difícil saber si dos cuerpos chocarán en el futuro próximo sin correr la simulación hasta ese momento. Como lo dice su nombre, el método que se utilizará permite la interpenetración de cuerpos, ya que responde cuando esta ya se ha producido. La idea es que si los pasos de la simulación se realizan de a intervalos de tiempo muy pequeños estas interpenetraciones son casi imperceptibles visualmente.

Un inconveniente aparece con los cuerpos chicos a altas velocidades. ¿Qué pasa si un

cuerpo se encuentra a la izquierda de otro y al avanzar un paso en la simulación aparece a la derecha? (ver figura 9). La colisión no se detectaría porque en ningún momento los cuerpos se intersecan. Este problema es inherente a la naturaleza de la simulación, que se realiza de a pasos, y resulta ser bastante difícil de resolver. Un intento para evitarlo es achicar el paso del tiempo para objetos muy rápidos o trazar un rayo desde la posición inicial del cuerpo a la posición siguiente y ver si el rayo interseca a otro objeto. Estas soluciones no son perfectas pero constituyen una mejor aproximación a la realidad.

En nuestro caso el desarrollo de la simulación en un paso particular será la siguiente: se actualizarán los estados de todos los objetos individualmente y luego se analizará si hay objetos que están chocando. Una vez que se detecta que dos cuerpos están en colisión, se tomará una acción que intentará separarlos. La elección de esta acción da origen a otros métodos:

• Método de la penalidad (Penalty method) • Método del impulso

El método de la penalidad consiste en aplicar una fuerza que tiende a separar a los

cuerpos que es proporcional a la interpenetración existente. Cuanto más penetrados estén los cuerpos, más fuerza se aplica. La fuerza aplicada funciona como un resorte cuando chocan los cuerpos.

El método del impulso es el que usaremos y consiste en aplicar una fuerza producto del choque a los cuerpos en colisión que tiende a separarlos. A esta fuerza se la llama impulso porque es muy grande y se aplica por un período de tiempo muy chico, de forma que a los cuerpos les causa un cambio de velocidad instantánea . Este impulso se calcula en función de la velocidad, de las masas de los cuerpos y del coeficiente de restitución.

Figura 9

t = t0 t = t0 + ∆t

V V

Page 23: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

23

7.1. DESCRIPCIÓN DEL PROCESO

El procesamiento de colisiones está dividido en dos fases: • Detección de intersecciones • Cálculo y aplicación del impulso para las colisiones

La detección de intersecciones debe determinar si dos cuerpos están intersecando para

luego analizar si es necesario aplicar el impulso correspondiente. La información a obtener de la intersección de dos cuerpos es el punto punto de colisión y el plano de Colisión. El punto de colisión será útil para analizar si los cuerpos están colisionando o si se están separando. El plano de colisión sirve para determinar la dirección del impulso a aplicar.

7.2. DETECCIÓN DE INTERSECCIÓNES

Previamente se dijo que la representación de la forma de los objetos a usar iba a ser la poligonal por medio de triángulos. Este dato nos dice que cada vez que dos objetos se están intersecando, habrán dos o más de los triángulos que los conforman que estarán intersecando entre sí. Por lo tanto, el problema de detectar intersecciones se reduce a buscar para cada triángulo de cada cuerpo, intersecciones con cualquiera de los triángulos de los cuerpos restantes. Este algoritmo es O(N2) (orden N cuadrado) y no es recomendable ya que es excesivamente lento. A modo de ejemplo si contamos con 20 objetos con 100 triángulos cada uno, habría que hacer (20*100)2/2=1 millón de chequeos en cada paso de la simulación, lo que sería casi imposible de sobrellevar en tiempo real, que resulta ser nuestro objetivo.

Una forma de acelerar este proceso es mediante la utilización de volúmenes acotantes o bounding volumes ([4]) que contienen un gran número de triángulos dentro. En la figura 10 se muestra un conjunto de triángulos rodeados por un volumen esférico.

Figura 10

Mediante el uso de estos volúmenes, se realizan los chequeos de intersección entre ellos y de no producirse se evita el chequeo de cada triángulo por separado, ya que como todos ellos se encuentran dentro del volumen, si este no interseca, los triángulos tampoco. Esto ayuda muchísimo y representa una gran aceleración en el procesamiento.

En nuestra simulación utilizamos esferas como volúmenes acotantes, por lo tanto necesitamos saber como calcular la intersección entre dos esferas.

Page 24: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

24

7.2.1. INTERSECCIÓN ESFERA-ESFERA Como se ve en la figura 11, determinar si dos esferas están intersecando es bastante

simple.

Dadas ambas posiciones Xa y Xb y los radios de las esferas ra y ra, la intersección existe

si se cumple

baba rrXX +<=−

que elevando al cuadrado es equivalente a

( ) ( ) ( ) 2222 )( babzazbyaybxax rrXXXXXX +<=−+−+−

La intersección se calcula muy rápido ya que estamos usando un módulo al cuadrado

para la comparación, lo que elimina el cálculo de una raíz cuadrada (mucho más lenta de calcular en una computadora).

7.2.2. INTERSECCIÓN TRIÁNGULO-TRIÁNGULO

En general, los algoritmos que calculan la intersección entre dos triángulos devuelve los dos puntos que definen el segmento de recta en que los triángulos intersecan que llamaremos C1 y C2. En la figura 12 puede verse el caso típico:

Los datos que se necesita saber de toda intersección son el punto y plano de colisión.

Figura 11

Xb

rb ra

Xa

Xa-Xb

Figura 12

C1

X C2

Page 25: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

25

Suponiendo que tenemos C1 y C2, el punto de colisión puede tomarse como el punto medio entre ellos

221 CC

X c

+=

Obtener el plano de colisión es más difícil ya que sólo tenemos un segmento. La

aproximación que tomaremos define la normal del plano como la diferencia de las posiciones del punto Xc en cada uno de los cuerpos un instante antes. Para calcular estas posiciones se toma la derivada del punto de colisión en ambos cuerpos que llamaremos Ca y Cb y se las multiplica por una variación de tiempo (un instante antes). De esta forma la normal al plano de colisión queda determinada como

)( ab CCtN && −⋅∆−= La explicación y cálculo de Ca,y Cb y sus derivadas se encuentra en la próxima sección. Además de lo explicado, hace falta agregar un chequeo adicional para determinar si la colisión entre triángulos sucede del lado exterior de los cuerpos. Cuando dos cuerpos empiezan a intersecar, los triángulos se encuentran con sus caras exteriores enfrentadas. Luego de penetrar, la simulación aplicará un impulso a cada cuerpo para separarlos, lo que hace que los triángulos vuelvan a chocar del lado de adentro, por lo tanto si no se detecta este hecho, una vez que dos cuerpos chocan es difícil que se separe (ver resultados experimentales).

7.3. TIPOS DE CONTACTO

Una vez encontrada una intersección debemos determinar qué pulso aplicar a los cuerpos, si es que hace falta. En nuestro análisis no se tendrá en cuenta la presencia de fuerzas de fricción, tema de una futura extensión al algoritmo aquí presentado.

Supongamos que dos cuerpos a y b chocan en t=t0 como se muestra en la figura.

El punto de colisión en coordenadas globales es C y el plano de colisión viene

determinado por su normal N. El punto C pertenece a ambos objetos, por lo tanto existe un punto Ca que pertenece al cuerpo a y un Cb que pertenece a b que coinciden con C (Ca = Cb = C)

Figura 13b

t = t0

C

Figura 13a

t = t0 - ∆t

Cra a

Crb b

Vb

Page 26: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

26

A pesar de que los puntos Ca y Cb son iguales en coordenadas globales, seguramente no los son en coordenadas locales ya que los centros de masa de a y b serían distintos (podría haber una excepción). Además, las velocidades de esos puntos son distintas ya que los cuerpos pueden tener velocidades lineales y angulares diferentes.

De acuerdo a lo explicado en secciones anteriores podemos plantear la velocidad de los

puntos Ca y Cb como:

)]()([)()()( 00000 tXtCtWtVtC aaaaa −×+=&

)]()([)()()( 00000 tXtCtWtVtC bbbbb −×+=& donde Va y Vb son las velocidades de los centros de masa, Wa y Wb las velocidades angulares y Xa y Xb la posición de los centros de masa de los cuerpos.

Para el análisis de la relación entre los cuerpos, calculamos la velocidad relativa entre los puntos:

)]()([)( 000 tCtCtNv barel&& −•=

vrel es un número real que indica la velocidad relativa entre los puntos de colisión de ambos cuerpos en la dirección de la normal al plano de colisión. Este valor entrega una clasificación de la colisión que viene dada de la siguiente manera (ver figura 14).

Figura 14b

a

b

N

C’a (t0 ) - C’b(t0 )

Vrel < 0

Figura 14c

a

b

N C’a (t0 ) - C’b(t0 )

Vrel = 0

Figura 14a

a

b

N C’a (t0 ) - C’b(t0

Vrel >

Page 27: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

27

• vrel < 0 Esto indica que los cuerpos están moviéndose de forma que tienden a penetrarse cada vez mas. En este caso es necesario aplicar un impulso que separe los cuerpos.

• vrel > 0

Este caso se da cuando los cuerpos están separándose, por lo tanto no hace falta impulso alguno ya que en un momento posterior los cuerpos ya estarán separados.

• vrel = 0

Esta es la situación más conflictiva. Cuando la velocidad relativa en la dirección de la normal es cero, los cuerpos están en reposo en esta dirección.

Los casos en que hay que aplicar impulso son vrel < 0 y vrel = 0. El cálculo del impulso

para el segundo es muy difícil ya que se deben tener en cuenta muchos contactos a la misma vez (se plantea un sistema de ecuaciones diferenciales) debido a que un impulso puede afectar a muchos cuerpos que estén en reposo entre ellos (ver figura 15).

7.4. DETERMINACIÓN DEL IMPULSO Como explicamos antes, un impulso J es una fuerza muy grande que se aplica por un

período de tiempo muy chico: tFJ ∆⋅= . Este impulso se aplica en la dirección de la normal al plano de colisión y provocará un cambio instantáneo en la cantidad de movimiento de JP =∆ .

El torque impulsivo que genera J será JtXCTJ ×−= )]([ y generará un cambio

instantáneo en el momento lineal de JTL =∆ .

Como el impulso debe separar los cuerpos, debrá ser opuesto para los cuerpos a y b en cuestión:

NjJ a ⋅+= NjJ b ⋅−=

Para obtener el valor del módulo de J (que llamamos j ), hay que comparar la velocidad relativa antes y después del choque. Las leyes que rigen las colisiones hacen uso de un coeficiente llamado coeficiente de restitución que es un factor de escala entre ambas velocidades:

−+ ⋅−= relrel VV ξ donde ? es el coeficiente de restitución.

Figura 15

Page 28: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

28

El valor de ? está entre 0 y 1 (inclusive) y establece cuanta energía se pierde en el choque. Si ?=1, no se pierde energía (colisión elástica) y si ?=0, los cuerpos pierden toda velocidad en la dirección normal (colisión inelástica).

Las relación entre las velocidades antes y después del choque son:

aaa M

tNjtVtV

)()()( 0

00

⋅+= −+

)}()]()({[)()()( 0000

100 tNjtXtCtItWtW aaaaa ⋅×−⋅+= −−+

donde Ma es la masa del cuerpo a y Ia

-1 es la inversa de su tensor de inercia. Combinando estas dos ecuaciones y comparando con la de Ca

+ se obtiene una relación entre las velocidades relativas antes y después de la colisión:

)]()([)()()( 00000 tXtCtWtVtC aaaaa −×+= +++&

Luego, comparando con la ecuación del coeficiente de restitución se llega a una ecuación donde puede despejarse j ([10]):

bbbaaaba

rel

RtNjRtItNRtNjRtItNMM

Vj

×⋅×⋅⋅+×⋅×⋅⋅++

⋅+−=

−−

)]([)({)()]([)({)(11

)1(

001

0001

0

ξ

donde )()( 00 tXtCR aaa −= y )()( 00 tXtCR bbb −= .

8. MÉTODO DE SIMULACIÓN FINAL

En la figura 16 se muestra el algoritmo de simulación final mediante un diagrama de flujo. Como puede verse en el diagrama, la simulación consiste en un ciclo principal que se ocupa de dar un paso en la simulación. Para cada cuerpo, se determina la suma de fuerzas y se las separa en los componentes que actúan sobre el centro de masa y el componente del torque. Ambos se usan, junto con el vector de estado, para calcular el vector de estado en un instante posterior, que se obtiene avanzando en el tiempo ?t unidades (suele usarse milisegundos).

El ?t se calcula al final de ciclo y puede obtenerse de diferentes maneras. En este

trabajo proponemos dos formas: si se quiere realizar una simulación que trabaje en tiempo real debe usarse el clock de la computadora para leer el tiempo que pasó desde el último paso. Si se desea trabajar de a pasos fijos para estudiar la evolución de los cuerpos de a intervalos iguales (podría verse la simulación en cámara lenta por ejemplo), ?t se mantiene en un valor fijo. La primera se verá afectada por la cantidad de tareas concurrentes que esté realizando la CPU de la computadora donde se ejecute la simulación, pudiendo cambiar los resultados entre sucesivas ejecuciones. La segunda, en cambio, ofrecerá siempre el mismo resultado.

Luego de calcular el vector de estado se procede a chequear las intersecciones entre objetos. Para cada intersección se calcula el punto y plano de colisión para después analizar la

Page 29: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

29

velocidad relativa Vrel en el punto de colisión entre los cuerpos. Si Vrel < 0 estamos ante un contacto donde se debe aplicar un impulso, por lo tanto éste se calcula y se le aplica a ambos cuerpos involucrados, con direcciones opuestas.

Figura 16

Inicializar estados de los cuerpos.

Inicio

Determinar la sumatoria de fuerzas aplicadas

Para cada cuerpo CRi

Calcular la derivada de Y(t) con Y(t), y la fuerza total

Obtener Y(t+∆t) con el integrador

Para cada cuerpo CRi

¿Cri interseca otro cuerpo CRi?

Calcular Vrel entre CRi y CRj

¿ Vrel < 0?

Calcular impulso J

Aplicar J a Cri y –J a CRj

Calcular tamaño de paso ∆t

t=t+ ∆t

Fin

no

no

si

si

Page 30: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

30

9. RESULTADOS EXPERIMENTALES

De acuerdo a la implementación de nuestro algoritmo Phy, para cada experimento se obtuvieron dos resultados, la visualización de la simulación en tiempo real (continua o capturada a través de fortos instantáneas) y los reportes de estado de los cuerpos. Por cada cuerpo se muestran todas las variables de estado además de sus velocidades, tensor de inercia y masa.

En el CD que se adjunta se pueden encontrar varias simulaciones para ejecutar en tiempo real. Una vez ejecutada una simulación, puede utilizarse la tecla F1 para verla en pantalla completa y F2 para capturar la pantalla a un archivo JPG. También es posible moverse por la escena con las siguientes teclas:

• ‘W’ Movimiento hacia delante. • ‘S’ Movimiento hacia atrás. • ‘A’ Movimiento hacia la izquierda • ‘D’ Movimiento hacia la derecha • ‘Q’ Movimiento hacia arriba • ‘E’ Movimiento hacia la abajo

Además del teclado, puede usarse el mouse para dirigir la cámara en cualquier dirección

deseada, manteniendo presionado el botón derecho. A continuación se muestran los resultados obtenidos a través de nuestro motor, en base

a distintas escenas.

9.1. ESCENA 1

En esta escena se muestran dos cuerpos chocando. Cada cuerpo tiene aplicada una fuerza que lo atrae al otro, de modo que siguen colisionando continuamente. Se usó un valor de coeficiente de restitución de 1, por lo tanto no hay pérdida de energía en el sistema y las esferas oscilan siempre con la misma amplitud. En el gráfico puede verse el valor de la coordenada X de uno de los cuerpos. Los picos en el gráfico se dan en los momentos de colisión (como consecuencia del impulso aplicado) y hacen aparecer una discontinuidad en la velocidad del cuerpo.

Ejemplo 1

-3,5-3

-2,5-2

-1,5-1

-0,50

0

1060

2120

3180

4240

5300

6360

7420

8480

9540

1060

0

1166

0

1272

0

t [ms]

X.x

[m

]

X.x

Page 31: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

31

Page 32: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

32

9.2. ESCENA 2 Esta escena es parecida a la anterior, ya que sólo se ha cambiado el coeficiente de

restitución. De esta forma, aparece una pérdida de energía en el sistema que se pone en evidencia en el gráfico de la posición y visualmente en la velocidad de los cuerpos que llega a cero.

Ejemplo 2

-4

-3

-2

-1

0

0

470

940

1410

1880

2350

2820

3290

3760

4230

4700

t [ms]

[m]

X.x

9.3. ESCENAS 3 Y 4

En esta escena se muestra un cuerpo fijo agarrado mediante un resorte con otro cuerpo (del centro de masa). Este último se deja caer por la fuerza de la gravedad.

A continuación se grafica la componente vertical de la posición. Como puede verse, el sistema nunca llega al reposo porque no hay pérdida de energía alguna.

Ejemplo 3

-4-3-2-101

0

1575

3150

4725

6300

7875

9450

1102

5

1260

0

1417

5

1575

0

t [ms]

[m]

X.y

Luego se repite la escena, pero agregando una fuerza viscosa que lleva al sistema al

reposo. Esto puede verse claramente en el gráfico de la componente vertical de la posición, que tiende a ser constante a medida que pasa el tiempo.

Ejemplo 4

-2

-1,5

-1

-0,5

0

0

1370

2740

4110

5480

6850

8220

9590

1096

0

1233

0

1370

0

t [ms]

[m]

X.y

Page 33: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

33

Page 34: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

34

Page 35: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

35

9.4. ESCENA 5 En este Escena se muestran seis esferas chocando entre sí de a un par por vez, transfiriendo toda la energía de una en otra. Como el coeficiente de restitución es 1, no hay pérdidas y cada esfera en movimiento choca y queda en reposo, mientras que la que estaba en reposo toma la velocidad de la anterior.

Page 36: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

36

9.5. ESCENA 6 Aquí se muestra un conjunto de 16 esferas conectadas por resortes que son

golpeadas por otra que está suelta.

Page 37: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

37

9.6. ESCENA 7 Aquí se muestran las esferas de la escena anterior, pero en este caso se le aplican

impulsos iguales a las cuatro esferas de las puntas.

Page 38: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

38

9.7. ESCENA 8 Aquí se muestran varias esferas cayendo, por efecto de la gravedad, dentro de una

copa de cristal. Como no hay rozamiento entre las esferas y la superficie inteior de la copa, el movimiento es indefinido.

Page 39: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

39

Page 40: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

40

9.8. ESCENA 9 Aquí se muestran varias esferas cayendo, por efecto de la gravedad, y

golpeándose entre sí durante la caída y contra las paredes del cuarto.

Page 41: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

41

10. CONCLUSIONES

Después de haber estudiado el funcionamiento de los métodos de simulación de la dinámica de cuerpos rígidos en tiempo real junto al análisis de las ventajas y falencias del método utilizado, y después de haber implementado un motor que cuenta con todas las funcionalidades explicadas en la teoría, estamos en condiciones de concluir que se trata de una técnica que proporciona gran realismo y generalidad para la simulación del comportamiento de cuerpos ante fuerzas e interacciones entre ellos.

La generalidad del método que proponemos está fundamentada a través de varios hechos:

§ La forma de los cuerpos se puede modelar con cualquier programa de diseño asistido por computadora libremente (Autocad, 3DStudio, Maya, Softimage, etc.) y luego cargado al motor sin inconvenientes.

§ Se permite la especificación de las características intrínsecas del cuerpo como lo son su masa, tensor de inercia y coeficiente de restitución. Esto permite crear cuerpos de todo tipo. Por ejemplo se puede modelar un cuerpo con densidad de masa variable si se calcula previamente su tensor de inercia.

§ Las fuerzas pueden ser de todo tipo ya que sólo se necesita poder saber su módulo y dirección en cada paso de la simulación. Esto permite crear explosiones, campos de fuerza, gravedad, viento, etc.

§ Las colisiones brindan un mecanismo de intercambio de energía entre los cuerpos de gran exactitud ya que se analizan hasta el detalle de los polígonos que forman la superficie del cuerpo.

Las simulaciones de este tipo resultan ser de gran ayuda en todo proyecto donde la

visualización o estudio de cuerpos en acción sea necesaria. Como se puede apreciar en la sección 9, la libertad que ofrece el método en el diseño de las entidades influyentes hace que esta técnica se adapte a distintas áreas de estudio. Las aplicaciones encontradas más frecuentemente son:

§ Estudio de comportamiento de motores en plantas automotrices, ayudando a mostrar el funcionamiento de las piezas (se simula el trabajo del motor).

§ Análisis de choques en la industria automotriz

§ Simulación de las máquinas y robots de una planta en funcionamiento

§ Entretenimiento, videojuegos, etc. Como pudo apreciarse a lo largo de este trabajo, el proceso en general requiere una gran cantidad de cálculos matemáticos. Por esta razón, si se necesita una simulación en tiempo real con muchas fuerzas y cuerpos diseñados con una gran cantidad de polígonos, se debería contar con un equipo potente para poder trabajar con comodidad. Por ejemplo, una PC de última generación (alrededor de U$1000) para un uso particular o una estación Silicon Graphics (alrededor de U$20.000) para un uso profesional. Nuestro trabajo consistió en intentar lograr el mayor realismo con el mejor rendimiento posible en tiempo limitado, logrando un simulador en tiempo real que puede funcionar en cualquier PC hogareña, con requerimientos básicos.

Page 42: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

42

11. FUTURAS EXTENSIONES

Actualmente estamos trabajando para extender el método a la aplicación de fuerzas discipativas de roce, con el agregado de la texturización de los cuerpos que interviene el la escena de la simulación.

12. AGRADECIMIENTOS

A las profesoras Silvia Alicia Gómez y Leticia Irene Gómez por haber supervisado el desarrollo del trabajo.

A mis compañeros Pablo Yomha y Andrés Bel, por colaborar aportando material para el

desarrollo del tema.

13. REFERENCIAS

[1] Baraff, David, Curved Surfaces and Coherence for Non-penetrating Rigid Body Simulation, Program of Computer Graphics , Cornell University, 1990.ç

[2] Baraff, David, Coping with Friction for Non-penetrating Rigid Body Simulation., Program of Computer Graphics, Cornell University, 1991.

[3] Baraff, David, Fast Contact Force Computation for Nonpenetrating Rigid Bodies, Robotics Institute, Carnegie Mellon University, 1994.

[4] Bobic, Nickm, Advanced Collision Detection Techniques, http://www.gamasutra.com/features/20000330/bobic_01.htm

[5] Eberly, David, Dynamic Collision Detection using Oriented Bounding Boxes, Magic Software.

[6] Eberly, D. Intersection of Objects with Linear and Angular Velocities using Oriented Bounding Boxes, Magic Software.

[7] Eberly, D. A Linear Algebraic Approach to Quaternions. Magic Software, 2002.

[8] Eberly, D. Quaternion Algebra and Calculus, Magic Software.

[9] Gottschalk, S., Lin, M., Manocha, D., OBBTree: A Hierarchical Structure for Rapid Interference Detection, University of North Carolina.

[10] Hecker, Chris, Physics, Game Developer Magazine, Junio de 1997.

[11] Hecker, Chris,Collision Response. Game Developer Magazine, Marzo de 1997.

[12] Mathews, J., Fink, K., Métodos numéricos con MATLAB, Prentice Hall, 2000.

[13] Press, William H., Teukolsky, Saul A., Vetterling, William T., Flannery, Brian P., Numerical Recipes in C, Second Edition. Cambridge University Press.

[14] Redon, S., Kheddary, A., Coquillart, S., Fast Continuous Collision Detection between Rigid Bodies.

[15] Redon, S., Kheddary, A., Coquillart, S., An Algebraic Solution to the Problem of Collision Detection for Rigid Polyhedral Objects. Proceedings of the 2000 IEEE International Conference on Robotics & Automation. San Francisco, 2000.

Page 43: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

43

[16] Rhodes, Graham S., Stable Rigid-Body Physics, Program of Computer Graphics, Cornell University, 2001.

[17] Van Den Heuvel, J., Jackson, M., Fast, Accurate Collision Detection between Circles or Spheres, http://www.gamasutra.com/features/20020118/vandenhuevel_01.htm

[18] Volino, P., Magnenat Thalmann, N., Accurate Collision Response on Polygonal Meshes, MIRALab, C.U.I., University of Geneva.

14. APENDICE: IMPLEMENTACIÓN DEL MOTOR DE SIMULACUION PHY

A partir de los conceptos teóricos explicados, se desarrolló un motor que implementa

toda la funcionalidad de una simulación de la dinámica de cuerpos rígidos en tiempo real, al que se decidió llamar Phy. Motor se le llama a un conjunto de funciones implementadas en algún lenguaje de programación que permiten realizar una tarea. Con Phy es posible definir tanto objetos en 3D de cualquier forma que pueden moverse y rotar en el espacio como cuerpos rígidos o partículas y ver su respuesta ante fuerzas y colisiones con otros cuerpos. Además de definirlos permite dibujarlos en pantalla en tiempo real, generar reportes a archivos de texto de las variables deseadas, capturar un conjunto de imágenes de la evolución de la simulación, etc. La implementación fue realizada en C++, comentando el código en Inglés, por costumbre del autor. La programación de los gráficos en tres dimensiones se hizo en OpenGL. Además se utilizaron librerías para mostrar texto en pantalla, escribir y leer formatos de imagen, y para manejar vectores y matrices. En esta documentación se explicarán las clases que vienen con Phy y se mostrarán algunos ejemplos.

El motor está dividido en cuatro partes principales: • Clase de simulación y eventos del sistema. • Manejador de recursos o AssetManager • Motor Físico o PhysicsEngine • Motor de Colisiones o CollisionEngine

La clase de simulación principal llamada CSimulation engloba la funcionalidad general del sistema. Los eventos del sistema dan la posibilidad de ser capturados para que se ejecute código del usuario en ciertos momentos de la simulación. El Manejador de recursos permite ingresar objetos, cuerpos, fuerzas, etc. en la escena, para luego obtenerlos cuando se los necesite. El Motor Físico es el que realiza la simulación de cuerpos y partículas, mientras que el Motor de Colisiones es el encargado de encontrar las colisiones entre objetos o cuerpos.

14.1. TÉRMINOS

Antes de pasar a explicar todas las clases, es necesario aclarar algunos términos a utilizar. El sistema permite ingresar distintos tipos de entidades al sistema. Una entidad es un objeto de la clase CEntity o una subclase. Las distintas entidades son:

• Objetos • Entidades físicas • Colliders • Fuerzas

Page 44: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

44

Los objetos pueden ubicarse en un lugar del espacio, ser rotados y poseer una forma, pero no mantienen información de las variables físicas como las velocidades lineal y angular, momentos, etc. A la forma de un objeto se le llama mesh o red y la define la clase CMesh.

Las entidades físicas son objetos de subclases de CPhysicEntity y están asociadas a un objeto que guarda su posición, rotación y forma.

Los colliders son objetos de la clase CCollider o alguna subclase y representan el volumen que colisiona de un objeto o cuerpo. Algunos están asociados al objeto cuyo volumen de colisión representan, que mantiene su posición. Las fuerzas son objetos de subclases de CForce y se encargan de hacer que los cuerpos se muevan, siendo manejadas por el motor físico.

14.2 CLASES A continuación se explican las clases que integran el sistema. Para mas detalles referirse

a los encabezados .h donde se encuentran definidas todas las clases y sus métodos, con los comentarios correspondientes. En el diseño del sistema, se usó la convención de anteceder a todas las clases con la letra ‘C’ y a todas las interfaces con ‘i’. Las interfaces son clases abstractas que no implementan método alguno.

Csimulation Es la clase principal para el usuario del motor. Engloba

funcionalidad como: • Manejo del tiempo: Pausa, Cámara lenta, tamaño de paso, etc. • Dibujo de texto y objetos en pantalla • Funciones de entrada de teclado y mouse

14.3. LISTENERS

Los listeners son objetos de clases que permiten atrapar eventos de algún tipo, implementando métodos de algunas de las clases que se muestran a continuación. iSimulationListener Para atrapar eventos de la simulación (evento de inicio, nuevo paso,

dibujo, cierre del sistema, etc). iCollisionListener Para atrapar eventos de colisión de objetos. iKeyListener Para atrapar eventos de teclado (se presionó o soltó una tecla). iMouseListener Para atrapar eventos del mouse (presión de botones o movimiento del

mouse).

Page 45: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

45

14.4. CLASES RELACIONADAS CON LA ESCENA

CWorld Representa una escena en la simulación. Tiene una cámara y el método

para dibujar(Draw) todos los objetos, cuerpos, colliders, etc. CCamera Es una cámara que puede moverse y rotar respecto de los tres ejes de

coordenadas. Posee métodos que permiten moverla “en primera persona”. Esto quiere decir que se puede avanzar y mirar al alrededor como si se estuviera caminando por la escena.

CEntity Es una entidad cualquiera de la simulación. Puede ser un objeto, cuerpo

rígido, fuerza, etc. C3DParticle Una partícula es una entidad que sólo posee una posición. C3DBody Un 3DBody o cuerpo es una partícula que puede rotarse, por lo tanto es

descripta por una posición y una rotación. Esta rotación se guarda como un quaternion. Posee métodos que permiten rotar el objeto tanto con un quaternion como con matrices o ángulos y ejes. Por último se incluyen métodos que permiten transformar un punto de coordenadas globales a locales (de este objeto) y viceversa.

C3DObject Es un 3DBody al que se le asocia una forma. Esta forma viene dada por

un objeto de tipo CMesh. CMesh Es una colección de triangulos que definen la forma de un objeto. Posee

métodos que permiten tanto mover, agrandar y centrar los triángulos como obtener volúmenes acotantes como una esfera o caja.

CWorld

C3DObject

C3DBody

C3DParticle

CEntity CCamera CMesh

Object

Page 46: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

46

14.5. CLASE SRELACIONADAS CON LA FÍSICA

CPhysicsEngine Es el motor físico. Permite definir qué método de resolución de

ecuaciones diferenciales se utilizará, mediante un objeto de la clase COde. Tiene el método Step que permite realizar un paso en la simulación, actualizando el estado de todos los cuerpos. Permite aplicar fuerzas constantes a todos los cuerpos o recalcular las fuerzas dinámicas que actuan sobre ellos. El coeficiente de restitución se define aquí, ya que en esta implementación se fija uno para toda la simulación.

CPhysicalEntity Es una entidad física (cuerpo rígido o masa puntual) que debe estar

asociada con un objeto de la clase C3DParticle. Debido a que un cuerpo necesita variables como la posición o rotación, se decidió guardar en todas las entidades físicas una C3DParticle que guarda estas variables. De modo que si se mueve o rota (en caso de usar un C3DBody en vez de un C3DParticle) ese objeto lo mismo hará el cuerpo o masa puntual ya que están asociados. A una entidad física también se le pueden aplicar fuerzas definidas por un vector que brinda su dirección y módulo, y un punto de contacto.

CPointMass Es una entidad física definida por un punto infinitesimal con una masa

determinada. Su estado queda definido por su posicón y momento lineal. Posee métodos para copiar su estado y estado derivado a un arreglo, lo que permite guardarlo fácilmente para recuperarlo luego o para pasárselo al objeto encargado de la resolución de ecuaciones diferenciales (las variables se dan en un arreglo). También permite aplicar fuerzas.

CRigidBody Es una masa puntual con una rotación. Su estado viene dado por su

posición, rotación, momento lineal y angular. Además de los métodos que hereda de PointMass permite aplicar torques al cuerpo rígido.

CPhysicCollisionListener Es un listener de eventos de colisión. Cuando aparece una

colisión entre dos cuerpos, se ejecuta un método de esta clase que aplica los impulsos correspondientes.

CPhysicsEngine

CRigidBody

CPointMass

CPhysicalEntity

CPhysicCollisionListener

iCollisionListener

Object

Page 47: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

47

14.6. CLASES RELACIONADAS CON LAS FUERZAS

CForce Hay dos tipos de fuerzas. Las asociadas o linked y las que no los son.

Las fuerzas asociadas guardan a que objetos se aplican, las demás no lo hacen, por lo tanto se deben aplicar explícitamente a cada entidad afectada. Otra categoría que divide a las fuerzas es su variabilidad. Si una fuerza es constante para una entidad física (ej: gravedad), se le aplica una vez y queda almacenada. Si la fuerza es dinámica, varía en el tiempo, por lo tanto se debe aplicar a todas las entidades que afecte antes de dar cada paso en la simulación.

CGravityForce Fuerza gravitatoria (9,81 m/s) CSpringForce Fuerza de resorte. Es una fuerza dinámica y está asociada a dos

cuerpos. La fuerza aplicada es ( )lXXkF −−⋅= 12 , donde X1 y X2

son las posiciones de los puntos donde el resorte está agarrado, k es la constante del resrote, y l su longitud natural. La constante del resorte define que tanta fuerza se aplica para una separación de los cuerpos. La longitud natural del resorte es la que hace que no exista fuerza alguna.

CDamperForce Es una fuerza viscosa. Ésta depende de la velocidad relativa entre dos

puntos de cuerpos y tiende a reducir esta velocidad. Las fuerzas viscosas son muy usadas ya que con el tiempo tienden a llevar a cero las variables de los cuerpos como la velocidad y el momento lineal, lo que es una buena práctica ya que lleva a simulaciones mas estables. La

fuerza aplicada es ( )012 vXXcF −−⋅= && , donde X1 y X2 son las

posiciones de los puntos de referencia de los cuerpos, c es la constante de la fuerza viscosa, y v0 su velocidad natural. La constante c define que tanta fuerza se aplica para una velocidad relativa entre los puntos. La velocidad natural es la que hace que no exista fuerza aplicada (generalmente es cero).

CGravityForce CSpringForce CDamperForce

CForce

Page 48: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

48

14.7. CLASES RELACIONADAS CON LAS COLISIONES

CCollisionEngine Es el motor de colisiones. Permite buscar colisiones entre todas las

entidades físicas cargadas en la escena. Para cada una se llama al método OnCollision del listener definido por la clase CcollisionListener.

CCollider Un Collider es cualquier entidad que pueda intersectar con otra. Cada

Collider tiene un objeto que implementa el método OnCollision del listener definido por la clase CcollisionListener.Éste es el llamado una vez que se encuentra una colisión. Esto permite que el usuario pueda capturar el evento y hacer lo que desee desde allí. Si se asocia un listener de tipo CPhysicCollisionListener que define el motor físico, se aplicará un impulso a los cuerpos luego de la colisión.

CEntityCollider Es un CCollider asociado a una entidad de la cual obtiene su posición,

de modo que si esta entidad se mueve, el collider la acompaña. CBSCollider Es un CEntityCollider que detecta colisiones por medio de un volumen

acotante esférico. CBSMeshCollider Es un CEntityCollider que detecta colisiones por medio de un volumen

acotante esférico y un objeto CMesh. Al momento de chequear si dos colliders están colisionando, se fija si las esferas intersecan, si éstas no lo hacen no hace falta chequear nada más. Si las esferas intersecan, se chequea cada uno de los triángulos para ver si colisionan.

CCollisionData Contiene los datos necesarios de una colisisión. Diferencia entre

distintos tipos de colisiones: triángulo-triángulo, esfera-esfera (para volúmenes acotantes), triángulo-esfera, etc.

Permite aproximar el punto y plano de colisión con estos datos.

CCollisionEngine

CBSCollider CBSMeshCollider

CEntityCollider

CCollider

CPhysicCollisionListener

CCollisionData

Object

Page 49: Simulación de la Dinámica de Cuerpos Rígidos en …pablocurello.tripod.com/PHY/SimulDinamCRig.pdf · 1 Simulación de la Dinámica de Cuerpos Rígidos en Tiempo Real Pablo Andrés

49

14.8. MANEJADOR DE RECURSOS CAssetMng Permite ingresar objetos, entidades físicas, fuerzas, colliders, etc en la

escena. CAsset Es un recurso almacenable. Esta asociada a un objeto CEntity, tiene un

nombre.

14.9. CLASES MATEMÁTICAS COde Permite la resolución de ecuaciones diferenciales ordinarias. El método

usado es el de Runge-Kutta de orden 4. CQuaternion Define las operaciones entre quaternions. vector3, vector4 Clases que definen las operaciones entre vectores de 3 y 4

componentes. matrix33, matrix44 Clases que definen las operaciones entre matrices de 3x3 y de 4x4. Las clases vector3, vector4, matrix33 y matrix44 fueron programadas por Dante Treglia y Mark A. DeLoura. Vienen con la distribución del libro Game Programming Gems.

14.10. CLASES GENERALES CTimer Realiza el manejo del tiempo con una resolución de milisegundos.

Permite hacer una pausa, continuar y parar el reloj. CReport Clase que permite realizar reportes a archivos de texto. Se usa para

realizar un seguimiento de las variables de un cuerpo. CThumbnailCreator Esta clase permite capturar la pantalla y guardarla en un archivo BMP,

JPG o TGA. TextLib Permite mostrar texto en pantalla para aplicaciones que usan OpenGL. Las clases Textlib fueron programadas por Dante Treglia y Mark A. DeLoura. Vienen en la distribución del libro Game Programming Gems. La clase CThumbnailCreator usa la librería Graphics3D desarrollada por Morgan McGuire www.graphics3d.com que a su vez utiliza la librería IJG del Independent JPEG Group.

14.11. CLASES PARA LA ENTRADA DE DATOS CWinkeys Permite leer el estado del teclado en cualquier momento. CMouse Captura los eventos del mouse.