SIMULACIÓN VIRTUAL INTERACTIVA Con C++ / OpenGL
SIMULACIÓN VIRTUAL INTERACTIVA Con C++ / OpenGL
SIMULACIÓN VIRTUAL INTERACTIVA Con C++ / OpenGL
<página en blanco>
.
<página en blanco>
Jairo Uparella
3Dium
.
Capítulo 1 Simulación
1.1 Introducción 17
1.2 Conceptos básicos de la simulación en general 17
1.2.1 Modelado y Simulación 20
1.2.2 Pasos para diseñar una Simulación Virtual
Interactiva 24
1.2.3 Propósitos de la Simulación Virtual Interactiva 26
1.2.4 Ventajas y desventajas de la simulación 29
1.2.5 El soporte de la Realidad Virtual 31
2.1 Introducción 33
2.2 Aportes de la geometría analítica 33
2.2.1 Funciones trigonométricas 33
2.2.2 Sistema de coordenadas. El plano cartesiano 38
2.2.3 La línea recta 39
2.2.4 Curvas de segundo grado 42
2.2.5 Análisis de ecuaciones paramétricas 45
2.2.6 Coordenadas polares 48
2.2.7 Geometría analítica del espacio 51
2.2.8 El plano 51
2.2.9 Distancia entre puntos 54
2.2.10 Cosenos directores 54
2.2.11 Esferas 56
2.2.12 Cilindros 57
2.2.13 Otros sistemas de coordenadas 57
2.2.14 Aspectos geométricos de los modelos 3D 59
2.2.15 Movimiento en el plano en 3D 61
v
Simulación Virtual Interactiva
.
Capítulo 3 Física real para Simulación Virtual
3.1 Introducción 69
3.2 Simulación basada en la física 69
3.3 El cálculo aplicado en la física 70
3.3.1 Límites 70
3.3.2 Derivadas e integrales 71
3.3.3 Vectores, matrices y quaternions 72
3.3.4 Ecuaciones diferenciales 73
3.3.5 Transformaciones 74
3.3.6 Rotación 74
3.3.7 Quaternions 77
3.3.8 El problema del delta de t y el tiempo-real 78
3.3.9 Geometría analítica de la colisión 82
3.3.10 Sobre el concepto de Inercia 86
3.4 Mecánica 87
3.4.1 Cinemática de la partícula 88
3.4.1.1 Movimiento y velocidad media 88
3.4.1.2 Velocidad instantánea 89
3.4.1.3 Aceleración media 90
3.4.1.4 Aceleración instantánea 91
3.4.1.5 Movimiento rectilíneo uniformemente
acelerado 91
3.4.1.6 Caída libre 93
3.4.1.7 Movimiento en el plano 96
3.4.1.8 Posición de la partícula 96
3.4.1.9 Velocidad media e instantánea 97
3.4.1.10 Aceleración media e instantánea 98
3.4.1.11 Movimiento de proyectiles 99
3.4.1.12 Caída de proyectiles 103
3.4.1.13 Explosiones con partículas 105
3.4.2 Movimiento de partículas en 3D 106
3.4.2.1 Disparo de partículas 106
3.4.3 Cinemática del cuerpo rígido 109
3.4.3.1 Movimiento circular 109
3.4.3.2 Movimiento circular uniforme 110
3.4.3.3 Velocidad 110
3.4.3.4 Aceleración 110
vi
3.4.3.5 Posición angular 111
3.4.3.6 Velocidad angular 112
3.4.3.7 Relación entre velocidades lineales y angulares 113
3.4.3.8 Aceleración angular 114
3.4.3.9 Analogía entre los movimientos uniformes
lineales y angulares 115
3.4.3.10 Aceleración centrípeta y tangencial 115
3.4.3.11 Movimiento de un satélite 117
3.4.3.12 Velocidad relativa 119
3.4.4 Conceptos de la estática 122
3.4.4.1 Fuerza 122
3.4.4.2 Tipos de fuerzas 122
3.4.4.3 Estática de la partícula – Equilibrio 123
3.4.4.4 I ley de Newton, ley de la inercia 126
3.4.4.5 Fuerzas equivalentes 126
3.4.4.6 Momento o torque 127
3.4.4.7 Equilibrio en un cuerpo rígido 130
3.4.4.8 Palancas 135
3.4.4.9 Fuerzas de rozamiento 136
3.4.5 Dinámica del cuerpo rígido 137
3.4.5.1 II ley de Newton, ley de la dinámica 137
3.4.5.2 Masa y peso 138
3.4.5.3 Centro de gravedad 139
3.4.5.4 Fuerza centrípeta y centrífuga 140
3.4.5.5 Ley de la gravitación universal 140
3.4.5.6 Campo gravitacional 142
3.4.5.7 Masa inercial y masa gravitacional 142
3.4.5.8 Trabajo, potencia y energía 142
3.4.5.9 Trabajo realizado por una fuerza variable 144
3.4.5.10 Potencia 146
3.4.5.11 Potencia y velocidad 146
3.4.5.12 Trabajo y energía cinética 147
3.4.5.13 Energía potencial 148
3.4.5.14 Energía potencial gravitacional 148
3.4.5.15 Energía potencial elástica 150
3.4.5.16 Fuerzas conservativas 150
3.4.5.17 Conservación de la energía 151
3.4.6 Rotación del cuerpo rígido 152
vii
Simulación Virtual Interactiva
.
3.4.6.1 Masa y centro de masa 152
3.4.6.2 Momento de inercia 153
3.4.6.3 Teorema de Steiner o del eje paralelo 157
3.4.6.4 El tensor de inercia 158
3.4.6.5 Trabajo y potencia de rotación 159
3.4.6.6 Momento y aceleración angular 162
3.4.6.7 Energía cinética de rotación 162
3.4.6.8 Fuerza de Coriolis 164
3.4.7 Impulso y momento lineal 165
3.4.7.1 III ley de Newton, ley de acción y
reacción 165
3.4.7.2 Impulso 165
3.4.7.3 Momento lineal 165
3.4.7.4 Conservación del momento lineal 166
3.4.8 Colisiones o choques 169
3.4.8.1 Colisiones 169
3.4.8.2 Choques elásticos 169
3.4.8.3 Choques inelásticos 170
3.4.8.4 Coeficiente de restitución 171
3.4.8.5 Colisiones sin fricción 171
3.4.8.6 Momento angular e impulso angular 174
3.4.8.7 Conservación del momento angular 176
3.4.8.8 Representación vectorial de cantidades
angulares 178
3.4.8.9 Impulso lineal y angular 181
3.4.8.10 Efectos angulares del cuerpo rígido 183
3.4.8.11 Colisión y fricción 184
3.4.8.12 Respuesta de colisión 187
3.5. Elasticidad 193
3.5.1 Fuerzas elásticas 193
3.5.2 Resortes y amortiguadores 194
3.5.3 Simulación de tela 195
3.5.4 Fuerzas aerodinámicas en la tela 199
3.6 Mecánica de fluidos 201
3.6.1 Fluidos en reposo 201
3.6.2 Densidad 201
3.6.3 Presión en un fluido 201
3.6.4 Principio de Arquímedes 202
viii
3.6.5 Boyancia 203
3.6.6 Resistencia y sustentación – Drag / Lift 203
3.6.7 Ecuación de Bernoulli 205
3.6.8 Viscosidad 206
3.6.9 Ley de Poiseuille 207
3.6.10 Número de Reynolds 207
3.6.11 Ley de Stokes 208
3.7 Cinemática inversa 209
Capítulo 5 Escenario 3D
ix
Simulación Virtual Interactiva
.
6.9 Sonido 321
Bibliografía 335
Acerca del Autor 337
Índice 339
x
Prefacio
“!No es un juego… es Simulación!” (David Carradine, AIRWOLF)
xi
Simulación Virtual Interactiva
.
Cuando se habla de interacción, se refiere a la modificación del
modelo o modelos de la escena virtual por voluntad del hombre
(Human-in-the-loop). Por lo tanto se puede entrenar personas en
dispositivos virtuales con un método interactivo. De aquí la definición
de Simulación Virtual Interactiva, explicada con más detalle en el
capítulo uno. El campo de la simulación militar se considera la fuente
original de información de la simulación, la cual además, se utiliza en
la creación de videojuegos y otras representaciones de la realidad.
Cuando el niño dibuja en papel una granja con una gran cantidad de
vacas y otros animales, está verdaderamente imitando la realidad. El
papel es el ambiente sintético donde puede guardar objetos y aunque
no interactivo, muestra como es la granja. Esta comparación puede ser
muy elemental pero busca dar a entender que el concepto de la
simulación puede ser interpretado por cada persona de cualquier
profesión, desde su punto de vista, ya que la aplicación de esta ciencia
es ilimitada, dada la diversidad de la tecnología de apoyo. Otro
ejemplo es el joven que está aprendiendo física. Esta interpretación
que él hace de cómo es el mundo y la naturaleza, se basa en algunas
ecuaciones y procedimientos matemáticos. Se puede decir que, sin ser
ni virtual ni interactiva, la física descrita simula la realidad.
xii
significa que está respondiendo con detalles a la tarea real para lo cual
fue programado. Este libro no es un escrito más con respecto al
material de simulaciones. En Internet puede encontrar una gran
cantidad de publicaciones de expertos que permiten aprender sobre el
arte ingenioso de la simulación, pero la diferencia es que este libro,
generaliza y entra profundamente y de manera primaria en aquellos
aspectos relevantes del diseño programado y la simulación, lo cual es
una ventaja para usted, porque puede desarrollar con sus habilidades,
ideas concretas. Aunque este libro parecería que se inclina un poco en
wargames, aviación y en el automóvil, encontrará conceptos para
trabajar con la Simulación Virtual en cualquier campo específico o
rama de la ciencia.
xiii
Simulación Virtual Interactiva
.
Con la Simulación Virtual se puede mostrar una idea o un proceso que
puede ser modelado bajo las técnicas de la Computación Gráfica o
CG, pero de forma interactiva.
Mucha gente piensa que hay sólo una manera de hacer un simulador.
Esto no es cierto. Aunque el producto final puede ser idéntico a otro,
el proceso de programación, la organización e incluso las ecuaciones
pueden ser diferentes entre productos. Las simulaciones permiten que
se pueda reproducir el mundo y los modelos en la forma en que sean
comprendidos. Las simulaciones utilizan muchos supuestos, porque es
imposible simular todas las cosas que suceden alrededor del problema
que se quiere solucionar. En este tipo de simulaciones se deben tener
todos los posibles supuestos bien definidos y que no representen una
gran parte de las consideraciones iniciales que se deben configurar
para desarrollar el simulador. Al principio no se tendrán muchas ideas
de qué hacer. Construir un simulador debe ser algo bien planeado y
por muchas personas de diferentes áreas o disciplinas, quienes pueden
describir la mejor forma para desarrollarlo. Por esta razón, en este
libro se expondrán los detalles importantes y los métodos para
construir diferentes simuladores, tales como el avión o simulador de
xiv
vuelo, el auto o de carreras y todos ellos utilizan métodos similares
para ser programados, pero sus respectivos propósitos y esos aspectos
de la física como los valores que conciernen al modelo, tal como los
coeficientes dinámicos y formas, hacen la gran diferencia entre ellos.
Por ejemplo, un dispositivo como el panel del avión tiene muchos
instrumentos y quizá la forma en que se deben construir es la misma
para el automóvil, pero sus propósitos es algo que se debe tener
presente todo el tiempo, porque el correcto uso del instrumento es lo
que hace distinguir entre volar un barco y sumergir un avión.
xv
Simulación Virtual Interactiva
.
Interface) para crear modelos 3D y componentes GUI (Graphics User
Interface) portátiles que utilizan el mecanismo de devolución de
llamada simple para gestión de eventos. Otra herramienta actualizada
es GLFW, la cual perfectamente se puede utilizar para ayudar en la
construcción de estos modelos. Como dice la referencia, GLFW es
una API portátil que se encarga de tareas específicas relacionado al
sistema operativo con la programación de OpenGL. Por lo tanto, se
necesita aprender OpenGL para entender los modelos que se presentan
aquí. Al final del libro, puede encontrar algunas referencias para ese
propósito.
El objetivo debe ser reproducir modelos más grandes de los que pueda
encontrar en este libro, los que evidentemente se pueden mejorar para
hacer diferentes simuladores. Algunos buenos modelos no pueden ser
funcionales en todos los simuladores. Así que hay que tener cuidado
cuando se requiere poner algunas líneas de otros programas o ideas de
otros en sus programas. Lo mejor es aprender primero todo lo que se
pueda y más adelante sin ayuda, preparar sus propios modelos.
Será bueno para mí si este libro es o fue bueno para usted. Espero que
estas líneas le permitan hacer su vida más fácil. En muchos países,
parece que sí hay interés en la producción de tecnología virtual,
motivo por el cual decidí escribir este libro, esperando que lo que está
en mi cerebro pueda ser bueno para alguien en el mundo. No importa
dónde esté.
xvi
Capítulo 1
Simulación
1.1 Introducción
Se presenta en este capítulo, una recopilación conceptual de lo que ha
sido la evolución de la simulación, con el fin de ubicarnos dentro del
campo extenso de esta ciencia. Luego, se definen los conceptos de
modelo, sistema, entidad, fenómeno, proceso y simulación con el fin
de llegar a la definición de Simulación Virtual Interactiva. Se sigue
con los pasos para diseñar un producto bajo este tipo de simulación.
Se explicarán algunos escenarios de aplicación de la Simulación
Virtual, la metodología para el desarrollo de simulaciones, ventajas,
desventajas y principios que se tienen para el Modelado &
Simulación M&S.
17
Simulación Virtual Interactiva
.
aplicaciones matemáticas, cálculo infinitesimal, vectorial y otras más
y siendo ésta especializada y orientada a diferentes campos de la
ciencia como las computadoras, la electrónica, eléctrica, industrial y
obras civiles, la simulación también se define como la capacidad
creativa del hombre para diseñar o desarrollar “modelos” de sistemas
reales y en lo posible, estar unida en experimentación al mismo
sistema.
1
El Método Monte Carlo se considera como una técnica para solucionar modelos
utilizando números aleatorios (random). Hace parte de la denominada DES -
Discrete Event Simulation – Simulación de Eventos Discretos. Los números
aleatorios son una serie de números distribuidos idénticamente e
independientemente en el intervalo de 0 a 1. El término "Monte Carlo" fue
introducido por John Von Neuman y su nombre se debe a la ciudad de Monte Carlo
(Mónaco), famosa por sus casas de juegos de azar. El método fue aplicado en
aspectos de la bomba atómica.
18
modelos. De aquí nace el método de Monte Carlo, debido a las
variables aleatorias que representan dichas conductas. Von Neuman
utilizó este método para estudiar las acciones aleatorias que presentan
los neutrones y la efectividad de misiones de bombardeo desde
aviones. Junto a Stanislau Ulam, trabajó en el denominado proyecto
Manhattan, en el Laboratorio Nacional de los Álamos en California.
Hoy se utiliza este método para determinar el máximo potencial de
productividad en las empresas. Cuando se habla de eventos discretos,
se refiere al hecho de que las variables de estado cambian
instantáneamente en puntos definidos en el tiempo. En una simulación
continua, como su nombre lo dice, las variables cambian
continuamente y normalmente a través de una función o ecuación
diferencial no lineal y modelos dependientes del tiempo.
Por último se incluyen los sistemas expertos, los cuales han sido
desarrollados para simular la experticia de profesionales de diversas
ramas como la geología, la medicina, la química y otras, dichos
sistemas pueden ser utilizados por personas que no son expertos en
esas materias para realizar diagnósticos. La inteligencia artificial AI,
es un área de la ciencia computacional relacionada con el desarrollo
de simulaciones de inteligencia humana y con la construcción de
herramientas que presentan características del comportamiento o
conducta inteligente.
19
Simulación Virtual Interactiva
.
donde cada computadora en red maneja alguna entidad. (Self-
Contained Entity Based Representations). A esto se le conoce como
dead–reckoning, lo que permite disminuir el número de mensajes y
crear simulaciones a gran escala. Cada máquina controla algunas
entidades como tanques o helicópteros. El dead–reckoning consiste
en mandar la posición y velocidad de una entidad a las demás
computadoras para que estas lo dibujen. Cuando el mensaje que se
envía es para indicar que se está vivo o activo, se le denomina
heartbeat.2 De esta forma, por fallas del sistema o congestión de la
red, se sabe que un objeto puede estar bloqueado e inactivo, por lo que
cada simulador debe quitarlo de su mundo virtual.
2
Se respeta la escritura de estos términos originales y es preferible utilizarlos en
inglés con el fin de no crear confusiones.
3
El término “estático” es conocido en inglés como steady-state.
4
Conocidos también por “objetos” los que operan bajo esquemas de jerarquías.
20
sistema, es decir, dependiendo su ejecución del factor tiempo. Siendo
así, el modelado 3D consiste en la realización de una representación
visual de un objeto o conjunto de objetos mediante una computadora o
cualquier otro dispositivo que permita observar el modelo final desde
cualquier ángulo. Por lo tanto, hay que analizar con detalle las
definiciones de los principales aspectos en un ambiente 3D y la
definición que se tiene para simulación. Por lo general, un modelo es
una representación física, matemática o de otra manera lógica de
un sistema, de una entidad, de un fenómeno o de un proceso. El
anterior término definido por el DoD (Departamento de Defensa
Americano), obliga a establecer una definición para los términos
sistema, entidad, fenómeno y proceso.
21
Simulación Virtual Interactiva
.
efectiva. Nuestra imagen en el espejo, por ejemplo, los físicos la
denominaron imagen virtual. Esto quiere decir, que si bien representa
una entidad o un sistema, esta carece de realismo y por esto se dice
que pertenece al mundo virtual. También se refiere en su abstracción
más representativa, al ambiente tridimensional. Así que en este libro
se referirá al término virtual como la representación tridimensional
con movimiento propio en el tiempo, de un sistema, una entidad, un
fenómeno o un proceso, incluso a un dispositivo que represente uno
real. Sólo si se presenta este caso se puede incluir aquí los aspectos
bidimensionales o 2D que interactúan con el sistema virtual. Un
ejemplo claro es el de un simulador de vuelo, el cual se puede
constituir en un sistema que representa una entidad como el avión,
viajando a través de ciertos fenómenos naturales (clima), procesos
como el despegue, vuelo y aterrizaje y es controlado por un sistema de
navegación bidimensional.
22
La simulación es la técnica de imitar la conducta de ciertas
situaciones o sistemas (económicas, mecánicas...) por medio de un
modelo análogo, situación o aparato, bien sea para ganar información
convenientemente o para entrenar personal. En palabras más sencillas,
simulación es ejecutar un modelo, representado por un software y que
entrega información útil. La Simulación Virtual es por lo tanto, un
método para poner modelos en ejecución con el fin de entrenar de
manera efectiva a un grupo de personas en un aspecto común. Tal es
el caso de un simulador de navegación, para entrenar al personal
conformado por un comandante o capitán y una tripulación. Otro
ejemplo es el simulador de cirugía, para entrenar en ciertos
procedimientos quirúrgicos y aspectos de la anatomía a un grupo de
médicos y enfermeras.
23
Simulación Virtual Interactiva
.
entrenamiento, son sistemas inmersivos. El instrumental quirúrgico
para la intervención en cirugía virtual interactiva, se le conoce como
haptic, del griego haphe –– lo que concierne a la sensibilidad de
toque. Los haptic también se utilizan en otras aplicaciones como los
simuladores de vuelo. Los steering wheels (volante de dirección) de
los juegos de autos tienen vibradores –– una especie de haptic para
sentir la carretera. Dentro de la Realidad Virtual, además de los
sistemas de visualización y el toque virtual, un aspecto también
importante que se incluye en este tratado de la simulación es el
sonido. El sonido es otro efecto de sensación producido por los
sistemas inmersivos. Existen bibliotecas que proporcionan ciertas
funciones para producir salida de audio de alta calidad –– high quality
audio, en especial salida multicanal de arreglos 3D de fuentes
(sources) de sonido alrededor de un oyente (listener).
24
Base de datos – Es el medio que permite la representación de
entidades y sus atributos en un ambiente distribuido. Las bases de
datos son particionadas en los diferentes ambientes. Cada partición
representa un conjunto específico de objetos y parámetros
completamente distintos de otros ambientes.
25
Simulación Virtual Interactiva
.
Elaboración de circuitos electrónicos – Diseñar y construir los
circuitos electrónicos de recepción y control del ambiente 3D, basados
en microcontroladores o dispositivos de control y comunicación.
Justamente, lo que proporciona la Realidad Virtual.
a=f/m
v = ∫ a dt
x = ∫ v dt
26
reemplacen al real con el fin de proporcionar más tiempo de
entrenamiento a menor costo.
27
Simulación Virtual Interactiva
.
estudiantes y de él se evaluará los movimientos y articulaciones que
posea. La inversión electrónica es mínima, si se desea controlar a
distancia a través de los puertos de comunicación.
28
La escuela de navegación se beneficia de los dispositivos electrónicos
que se conectan a los ambientes de mar y océanos virtuales. El
aprendizaje de la operación de un GPS, VHF, ecosonda, radar y otros,
es ahora más fácil con un sistema virtual que represente el interior de
un buque. Incluso, las empresas de seguridad y vigilancia, escolta y
de policía se pueden ahorrar el gasto en municiones a través de
simuladores de tiro virtual interactivo, entrenándose en análisis de tiro
bajo situaciones de riesgo, crisis y emergencias.
29
Simulación Virtual Interactiva
.
producto de simulación. El problema directo permite el entrenamiento
de la forma tradicional, en que se somete a un proceso para alcanzar
un resultado u objetivo, pero con la posibilidad de extender las
capacidades del sistema real. También permite experimentar cuando
se hace el cambio de ciertos patrones o variables, que no son comunes
tratar en un hecho real. Una de las finalidades y ventajas de la
simulación es la posibilidad de experimentar sobre todo cuando el
modelo real es peligroso.
30
Pero también la simulación tiene sus desventajas que pueden llamarse
más bien desventajas externas de la simulación, lo cual es posible
catalogar en tres aspectos: resultados, costos y competitividad:
31
Simulación Virtual Interactiva
.
De los principales adelantos que se han desarrollado con la Realidad
Virtual, está el tratamiento de personas que padecen de fobias como el
miedo a lugares, a la oscuridad, temor a ciertos animales y a las
alturas. Aunque se dice que debe ser considerada como de carácter
transitorio, por ahora se puede indicar que la Realidad Virtual es
simulación por computadora basada en modelos gráficos, acústicos y
táctiles, orientada a la visualización de situaciones y variables
complejas, durante la cual el usuario se mantiene inmerso haciendo
uso de ciertos dispositivos en esos mundos que simulan ser reales.
Dentro de las principales características de la Realidad Virtual se
pueden citar:
32
Capítulo 2
Modelos matemáticos
2.1 Introducción
En este capítulo se tratarán de manera simple, pero concreta, los
fundamentos y el aporte de la geometría analítica en la simulación.
Este capítulo ayudará a comprender el comportamiento más sencillo
de un modelo, los cuidados que se deben tener a la hora de crear o
diseñar un modelo matemático y como se debe probar (validar) dichos
modelos antes de incorporarlos al programa definitivo.
33
Simulación Virtual Interactiva
.
descripción de la trayectoria5 utilizando las funciones seno y coseno
(funciones sin() y cos() en Inglés). La inclinación de la carretera por
donde transita el auto, hace intervenir las dos funciones anteriores o
directamente la función tangente.
h
a = 20m
θ
l = 80m
tanθ = 20 / 80
5
Cuando se habla de trayectoria se refiere a la descripción geométrica de un punto,
trazada en el plano o espacio.
34
Si ahora se conoce el ángulo, se puede fácilmente determinar cuál es
la magnitud de la línea punteada. En otras palabras, hallar la
hipotenusa h del triángulo rectángulo. Entonces se tiene que:
senθ = 20 / h
h = 20 /senθ
h = 20 /0.2419
h = 82.6 m
(a2 + l2) / h2 = 1
35
Simulación Virtual Interactiva
.
(202 + 802 ) / 82.62 = 0.9967 ≈ 1
a2 / h2 + l2 / h2 = 1
es decir,
sen2 θ + cos2 θ = 1
1 rad = 180º / π
36
Por lo tanto se puede incluir en los respectivos códigos de programa,
una función que procese en radianes los valores a resolver por las
funciones trigonométricas. Si theta está en grados:
#define PI 3.1415926535897
if (theta>359) theta=0;
if (theta<0) theta=359;
cos_theta = cos (theta * PI/180); // ahora en radianes
sen_theta = sin (theta * PI/180); // ahora en radianes
a2 = h2 + l2 – 2 h l cos θ
a = 19,98 ≈ 20
37
Simulación Virtual Interactiva
.
2.2.2 Sistema de coordenadas. El plano cartesiano
P2 (x2,y2)
y
-x x
P1 (x1,y1)
-y
6
Es necesario analizar estas expresiones cuando cualquier punto ocupe el tercer
cuadrante, es decir, cuando P tiene coordenadas negativas, como P(-2,-5).
38
Entonces es posible encontrar las coordenadas del punto medio entre
los puntos dados los cuales definen el segmento de recta. Estos puntos
se representan Pm(xm,ym).
xm = (x1 + x2 )/2
ym = (y1 + y2 )/2
m2 = - 1/m1
39
Simulación Virtual Interactiva
.
La mayoría de errores del programador se centran en el poco control
que se hace en ciertos casos y que se refleja mucho tiempo después
tras ejecutar los programas cientos de veces.
x=4
Suponiendo que no se hizo control a una pendiente para una recta que
tiende a 90 grados, el programa puede ejecutarse muchas veces sin
que llegue a cuestionar este ardid matemático mientras la recta no gire
y llegue a ese punto determinado. En la llamada forma de la recta,
punto - pendiente, se conocen la pendiente y un punto por donde pasa
la recta:
y - y1 = m (x - x1)
40
y =mx +b
x cos θ + y sen θ = p
p
θ
x
Para hallar una distancia de un punto cualquiera a una recta que tiene
la forma general se utiliza un teorema que describe dicha distancia
como la longitud del segmento perpendicular trazado:
41
Simulación Virtual Interactiva
.
d = | Axo + Byo + C | / sqrt(A2 + B2)
P(xo,yo)
d
L: Ax+By+C=0
x
42
Imagínese una biela, válvula o un pedal de bicicleta, el cual se debe
controlar, con el fin de que al darle vueltas siempre esté girando
alrededor de un punto. Para un modelo sincronizado, sobre todo
cuando la manipulación de un objeto tridimensional afecta a otros
dentro del ambiente 3D, es importante saber controlar las posiciones
que éste necesita para representar y comportarse como lo hace en la
realidad.
(x – h)2 + (y – k)2 = r2
x2 + y2 = r2
y = sqrt ( r2 - x2 )
43
Simulación Virtual Interactiva
.
Este puede ser uno de los tantos recursos que en principio se puede
utilizar con el fin de hacer girar la manija, si es que se necesita de
alguna manera la ubicación de puntos (x,y) para controlar un
mecanismo virtual exacto.
X Y 1
2
0 10
0.5 9.987492178
1 9.949874371
1.5 9.886859967
2 9.797958971 6
2.5 9.682458366
3 9.539392014
3.5 9.367496998
4 9.16515139
4.5 8.93028555 0
5 8.660254038 0 2 4 6 8 1 1
5.5 8.351646544 0 2
6 8
6.5 7.599342077
7 7.141428429
7.5 6.614378278
8 6
8.5 5.267826876
9 4.358898944
9.5 3.122498999
10 0
44
A pesar de la resolución apropiada de x, los valores pueden
proporcionar una trayectoria distorsionada cuando la curva se
aproxima a 0. Más adelante se presenta una mejor solución para este
tipo de comportamientos.
( x2 / a2 ) + ( y2 / b2 ) = 1
y2 = ax
45
Simulación Virtual Interactiva
.
Considerando el caso particular en que las funciones lineales f y g, con
respecto a t están definidas de la siguiente manera:
f(t) = xo + at
g(t) = yo + bt
x = xo + at
y = yo + bt
Estas ecuaciones forman una línea recta que reposa en el plano (xy) y
pasa por el punto (xo,yo), cuya pendiente es b/a. Si a=0, la recta es
vertical, pasando por el mismo punto. Se puede cambiar la forma de la
pendiente de la recta, de modo que las ecuaciones obtengan la
siguiente forma:
x = xo + (cosθ )t
y = yo + (senθ )t
46
Figura 2.8 El comportamiento del auto se puede establecer con ecuaciones sencillas
como las descritas, que denoten el recorrido curvilíneo que este vehículo sigue.
x = xo + (x1 - x0 ) t
y = yo + (y1 - y0 ) t
z = zo + (z1 - z0 ) t
y = ( Vo senθ )t – gt2
47
Simulación Virtual Interactiva
.
Se puede averiguar las coordenadas del proyectil en diferentes valores
de t. Este toca el suelo cuando y =0, por lo tanto,
0 = ( Vo senθ )t – gt2
90º
Y
P(3,π/6)
180º 0º P(xo,yo) =
360 º P(r,ζ)
r
R(2,-π/6) y
Q(-3,π/6) ζ
X
x
270º
x = r cosθ
y = r senθ
48
El eje x corresponde a la recta inicial del plano cartesiano. En el
sistema de coordenadas polares esta recta se denomina eje polar.
r = ± sqrt (x2 + y2 )
tan θ = y / x
Esto genera los puntos de una circunferencia que parece vista desde el
lado derecho o izquierdo y que permite también crear patrones de
movimientos para la ubicación de un elemento en el ambiente
bidimensional. Si se desea obtener una circunferencia perfecta en
Excel, la cual permita obtener puntos independientes para fácil
aplicación en programación posterior se debe trazar la gráfica cos x
contra sen x.
7
La resolución permite determinar qué tan grande será el paso-a-paso, entre un
punto y otro. Por lo general son un porcentaje del valor tope máximo. Aquí se
escogieron 20 pasos.
49
Simulación Virtual Interactiva
.
X COS X SEN X
0.00 1.000 0.000
0.31 0.951 0.309
0.63 0.809 0.588 COS X vs SEN X
0.94 0.588 0.809 1.500
1.26 0.309 0.951
1.57 0.000 1.000 1.000
1.88 –0.309 0.951
2.20 –0.588 0.809
0.500
2.51 –0.809 0.588
2.83 –0.951 0.309
0.000
3.14 –1.000 0.000 Z
-1.500 -1.000 -0.500 0.000 0.500 1.000 1.500
3.46 –0.951 –0.309
3.77 –0.809 –0.588 -0.500
4.08 –0.588 –0.809
4.40 –0.309 –0.951 -1.000
4.71 0.000 –1.000
5.03 0.309 –0.951 -1.500
5.34 0.588 –0.809
5.65 0.809 –0.588
5.97 0.951 –0.309
6.28 1.000 0.000
X vs COSX
1.500
1.000
0.500
2.00 4.00
0.000
0.00
-0.500 6.00
-1.000
-1.500
50
el ángulo en que rotaría el pivote y por ende la figura entera, pero sólo
el fin que se busca con el modelado tiene la última palabra en los
medios y el tratamiento que se le dará a la simulación.
2.2.8 El plano
51
Simulación Virtual Interactiva
.
Y
Z X
z=0
52
En otras palabras z = ±k es paralelo al plano (xy) y se dice que el eje z
entra y sale de la pantalla. La figura representa el plano (z) con
respecto a la pantalla de su computador.
Y
k
Z
Figura 2.12 Plano z = k
Ax + By + Cz + D = 0
53
Simulación Virtual Interactiva
.
2.2.9 Distancia entre puntos
Por lo tanto es posible hallar las coordenadas del punto medio del
segmento de la recta que une los dos puntos:
xm = (x1 + x2)/2
ym = (y1 + y2)/2
zm = (z1 + z2)/2
P1
P2
X
Figura 2.13 Segmento de recta definido por dos puntos en el espacio 3D.
54
ángulos directores, formados con los ejes positivos x, y, z. De aquí
que se denominen cosenos directores a cos α, cos β y cos γ.
d = sqrt( x0 2 + y02 + z0 2 )
P(xo,yo, zo)
β
α X
O
γ
55
Simulación Virtual Interactiva
.
2.2.11 Esferas
Una esfera es la gráfica de todos los puntos que están a una distancia
fija llamada radio y de un punto fijo llamado centro. Si el centro de la
esfera es (h,k,l) entonces la ecuación de la esfera debido a la distancia
entre el centro y un punto cualquiera es:
r1 r2
Suponiendo que las esferas son de marfil, entonces tienen masa y peso
debido a la gravedad. Para que una golpee a la otra se debe vencer la
inercia (estado de reposo) de una de ellas por medio de una fuerza que
se aplica en cierto punto de su superficie.
Esta adquiere una aceleración y por lo tanto una dirección, las cuales
cambian al momento del golpe. A su vez, con el impacto mueve la
otra bola en cierto sentido o dirección y a cierta velocidad. Esta
explicación es lo que visualiza los campos de la física.
56
2.2.12 Cilindros
x2/b2 + z2/a2 = 1
b
a
g X
8
Si es definida por un círculo (disco en 3D), quiere decir que está cerrado en los
extremos. Si es una circunferencia entonces es abierto en los extremos.
57
Simulación Virtual Interactiva
.
transformación a coordenadas cilíndricas, las cuales se obtienen por
las siguientes ecuaciones:
P(x,y,z)
P(r,θ,y)
y
r X
θ
Z
Figura 2.17 Coordenadas cilíndricas.
P(x,y,z)
P(r,,ϕ)
ϕ
r X
58
2.2.14 Aspectos geométricos de los modelos 3D
Se dice que si el objeto está en el piso, el alto va del piso hacia arriba,
el ancho, es el lado que se aprecia de frente y es más corto que el
largo, siendo éste último la profundidad.
Y Y
alto X X
alto
profundidad profundidad
Z largo Z ancho
59
Simulación Virtual Interactiva
.
Ahora, si ese objeto está ubicado de tal forma que el largo está al
frente de la vista, el ancho de ese objeto se convierte en la
profundidad. En resumen, la profundidad es la medida que parte de
una posición hacia adelante o hacia atrás. Se refiere entonces, al
término largo, como la medida de mayor magnitud dimensional de un
objeto, y profundidad a la magnitud que entra y sale de la pantalla del
computador.
XY - Front YZ - Left
XZ - Top
Y
Z
X
60
2.2.15 Movimiento en el plano en 3D
Y Y’
yr
xr
X
X’
61
Simulación Virtual Interactiva
.
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265359
//-------------------------------------------------------------------------------------------------------------
int aspect_r;
float b, d, k, dcar, freno, x, y, z, dy, idl, idr, ran1;
GLUquadricObj* quadObj1;
//-------------------------------------------------------------------------------------------------------------
void llantas (void)
{
//llantas
glColor3f(0.15f,0.15f,0.15f);
glPushMatrix();
glTranslatef ( -0.85, 0.3, -2.8 );
glRotatef(d*9, 0.0, 1.0, 0.0); //eje vertical y
glRotatef(359-ran1, 1.0, 0.0, 0.0); //eje horizontal de la llanta
glRotatef(90, 0.0, 1.0, 0.0);
quadObj1 = gluNewQuadric();
gluCylinder(quadObj1, 0.3, 0.3, 0.2, 8, 1);
glPopMatrix();
glPushMatrix();
glTranslatef ( 0.85, 0.3, -2.8 );
glRotatef(d*9, 0.0, 1.0, 0.0); //eje vertical y
glRotatef(359-ran1, 1.0, 0.0, 0.0); //eje horizontal de la llanta
glRotatef(-90, 0.0, 1.0, 0.0);
quadObj1 = gluNewQuadric();
gluCylinder(quadObj1, 0.3, 0.3, 0.2, 8, 1);
glPopMatrix();
glPushMatrix();
62
glTranslatef ( 0.85, 0.3, 0.0 );
glRotatef(359-ran1, 1.0, 0.0, 0.0); //eje horizontal de la llanta
glRotatef(-90, 0.0, 1.0, 0.0);
quadObj1 = gluNewQuadric();
gluCylinder(quadObj1, 0.3, 0.3, 0.2, 8, 1);
glPopMatrix();
glPushMatrix();
glTranslatef ( -0.85, 0.3, 0.0 );
glRotatef(359-ran1, 1.0, 0.0, 0.0); //eje horizontal de la llanta
glRotatef(90, 0.0, 1.0, 0.0);
quadObj1 = gluNewQuadric();
gluCylinder(quadObj1, 0.3, 0.3, 0.2, 8, 1);
glPopMatrix();
}
Cada una de las llantas puede rotar sobre su respectivo eje. Las llantas
delanteras pueden además virar en su eje vertical de acuerdo con la
dirección que se ha dado en el teclado numérico.
//-------------------------------------------------------------------------------------------------------------
void display(void)
{
// ESPACIO VIRTUAL
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glClearColor(0.0, 0.0, 0.0, 0.0);
glViewport(0,0,640-1,480-1);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
aspect_r=640/480;
gluPerspective (80, aspect_r , 0.1, 500.0 );
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
63
Simulación Virtual Interactiva
.
//-------------------------------------------------------------------------------------------------------------
void init(void)
{
x=100; z=100;
glEnable (GL_DEPTH_TEST);
64
glBegin(GL_QUADS);
glVertex3f ( 0.0, 0.0, 0.0);
glVertex3f ( 0.0, 0.0, 50.0);
glVertex3f ( 50.0, 0.0, 50.0);
glVertex3f ( 50.0, 0.0, 0.0);
glEnd();
glPopMatrix ( );
glEndList();
}
//-------------------------------------------------------------------------------------------------------------
if (k!=0){
if (dcar<0) dcar=dcar + 0.05 ; //regresa cámara
if (dcar>0) dcar=dcar - 0.05 ;
}
if (k!=0){
if (d>0) d=d+(-0.15*k); //retorna dirección timón
if (d<0) d=d+(+0.15*k);
}
65
Simulación Virtual Interactiva
.
glutPostRedisplay ();
}
//-------------------------------------------------------------------------------------------------------------
void update(int value)
{
if (d>4.5) d= 4.5; //dirección del auto
if (d>0.0) b = b + 1.2*d*k;
if (d<0.0) b = b + 1.2*d*k;
if (d<-4.5) d=-4.5;
idr=0; idl=0;
//-------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
void keyboard ( unsigned char key, int m, int n )
{
switch (key)
{
case '8':
k=k+0.15;
66
break;
case '2':
k=k-0.15;
break;
case '5':
freno=1;
break;
case '4':
idl=1;
d=d+0.4; //dirección a izquierda llantas delanteras
break;
case '6':
idr=1;
d=d-0.4; //dirección a derecha llantas delanteras
break;
default:
break;
}
}
//-------------------------------------------------------------------------------------------------------------
int main ( int argc, char** argv )
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize ( 640, 480);
glutCreateWindow ( "V_Drive 1.0" );
init();
glutTimerFunc(20, update, 0);
glutKeyboardFunc ( keyboard );
glutDisplayFunc ( display );
glutIdleFunc ( idle_func );
glutMainLoop ( );
return 0;
}
67
Simulación Virtual Interactiva
.
Para que el auto tenga un comportamiento más realista, se necesita
desprenderlo de la inflexibilidad de las ecuaciones y someterlo a
fuerzas que modifiquen tal comportamiento. Se requiere que el auto
salte, gire y se deslice en su ruta, que simule el movimiento de
arranque y frenado, que colisione, etc.
68
Capítulo 3
Física real para Simulación Virtual
3.1 Introducción
En este capítulo se tratará en su forma más elemental, la aplicación de
la física mecánica en los ambientes virtuales; se debe verificar que los
objetos sigan los patrones de conductas más allá del simple trazo
geométrico. Ahora el cuerpo tiene una masa, un peso, unas
dimensiones y su comportamiento está vinculado al tiempo.
9
Isaac Newton (1642 –1727) físico, filósofo, teólogo, inventor, alquimista y
matemático inglés.
Leonhard Paul Euler ((1707 - 1783), matemático y físico suizo.
69
Simulación Virtual Interactiva
.
3.3 El cálculo aplicado en la física
En la práctica la mayoría de problemas de simulación están
enmarcados dentro de las teorías de los límites, la derivada, las
integrales, cálculo vectorial y las ecuaciones diferenciales y aquí se
hará uso del sentido práctico de estos tratados.
3.3.1 Límites
lím f(x) = L
x→c
10
Euclides, matemático griego, del siglo III a.C.
70
modelado tridimensional, las líneas curvas están trazadas con rectas
pequeñas (n) que siguen la tendencia. Las superficies curvas, están
definidas por planos diminutas que las conforman.
A B
71
Simulación Virtual Interactiva
.
integral. Todo programa de simulación es de hecho una solución a una
derivada, a una integral o a una ecuación diferencial. Por eso es tan
importante entender los conceptos y principios de estos temas.
∆t = t – to
72
3.3.4 Ecuaciones diferenciales
dx/dt = f(x,t)
73
Simulación Virtual Interactiva
.
3.3.5 Transformaciones
El vector P‟(x’, y’, z’) es el vector transformado. Los términos mij son
los valores de la matriz de transformación. Lo anterior puede ser
expresado como:
P’ = M·P
3.3.6 Rotación
1 0 0 cos 0 sen
Rx = 0 cosϕ -senϕ Ry = 0 1 0
0 senϕ cosϕ -sen 0 cos
cosψ -senψ 0
Rz = senψ cosψ 0
0 0 1
74
cos cosψ -cosϕ sinψ + sinϕ sin cosψ sinϕ sinψ +cosϕ sin cosψ
cos sinψ cosϕ cosψ + sinϕ sin sinψ -sinϕ cosψ +cosϕ sin sinψ
-sin sinϕ cos cosϕ cos
Ye
Z Ze Xe
O
Y
X Pitch
ϕ Sway
Roll YMvq
ψ
Surge Yaw
XKup Heave
ZNwr
11
DOF (Degrees of Freedom) Un cuerpo en el espacio, libre de cualquier atadura,
puede desplazarse en un movimiento que se puede descomponer en 3 rotaciones y
3 traslaciones geométricas e independientes, respecto a los ejes fijos del sistema de
referencia.
75
Simulación Virtual Interactiva
.
El movimiento de un barco se describe respecto a un eje de referencia
inercial. Un sistema de referencia situado en tierra (Xe,Ye,Ze) es un
sistema inercial.12 La dinámica aplicada en el barco precisa de un
cuerpo rígido (no deformable) con 6 grados de libertad y un sistema
referencial. Las velocidades lineales y angulares, las fuerzas y los
momentos, masas e inercias, se definen normalmente en relación al
sistema de coordenadas del buque (no-inercial) cuyo origen puede ser
el centro de gravedad, CG, pero con relación a un sistema inercial.
Para la translación se aplican fuerzas y para la rotación se aplican
momentos.
12
Realmente es aproximado, puesto que se considera la tierra en movimiento
constante.
76
del eje z con el punto (0,0) del rectángulo. Cada punto es multiplicado
por la matriz Rz. Combinando con la matriz Rz se puede escribir:
rx = x cos(θ) – y sin(θ);
ry = x sin(θ) + y cos(θ);
11,0 10,0
5,0
4,0
0,0 5,0
-10,0
3.3.7 Quaternions
q = (n, v)
77
Simulación Virtual Interactiva
.
q = (qo q1 q2 q3)
q = w + xi + yj + yk
siendo,
i = (0 1 0 0)
j = (0 0 1 0)
k = (0 0 0 1)
ii = -1 jj = -1 kk = -1 ijk = -1
v = x/t
78
Matemáticamente se habla de la primera relación como un espacio
recorrido entre un tiempo dado. Pero en la segunda ecuación, se
relaciona una diferencia de espacio sobre una diferencia de tiempo.
Para que esas ecuaciones sean iguales, tanto xo como to deben ser 0.
x = xo + vot + ½ at2
x – xo = vot + ½ at2
t = to + ∆t
x = xo + vot + ½ at2
79
Simulación Virtual Interactiva
.
Pero el valor xo es fijo (desde reposo) como vo. A continuación una
forma de entender el comportamiento de este procedimiento: En un
acumulador de la forma x = x +1:
0 0 + 0
1 0 + 1
2 1 + 1
3 2 + 1
4 3 + 1
5 4 + 1
6 5 + 1
x = xo + v t
1 1 + 1 x 0
2 1 + 1 x 1
3 1 + 1 x 2
4 1 + 1 x 3
5 1 + 1 x 4
6 1 + 1 x 5
t = t + ∆t
0 0 + 0
1 0 + 1
2 1 + 1
3 2 + 1
4 3 + 1
5 4 + 1
80
Afortunadamente ∆t hace parte de otro proceso que suministra el
tiempo a las ecuaciones de la simulación. Los ejemplos que se han
demostrado a través de Excel en este libro, ilustran este tratamiento
del factor tiempo. Téngase en cuenta que lo anteriormente expuesto se
aplica también a una gráfica, lo cual representa o explica el
movimiento de un punto en ella, pero que de igual forma se aplica al
movimiento de un objeto en el plano y en el espacio donde se puede
describir cualquier trayectoria pero independiente a la sincronización
con el tiempo-real, es decir, todo se mueve a la velocidad de la
computadora. Si la computadora es lenta, la simulación será lenta. Por
otro lado ∆t no siempre será un valor entero sino de fracciones de
segundos y en algunos casos será diferente para cada proceso de
integración.
En una simulación de una bola que cae de una mesa al piso, el tiempo
que toma en hacerlo es un tiempo no dependiente de la realidad
aunque se esté aplicando las ecuaciones del tiempo y espacios
correspondientes. Sólo se cuantifica el paso de un tiempo a otro, pero
no sincronizado con tiempo-real. Entonces, se desea hacer que el
tiempo-real de una bola real que pesa 1 kg y cae al piso, sea el mismo
tiempo-virtual de una bola virtual que supuestamente pesa 1 kg y cae a
la misma distancia real. Necesariamente hay que valerse de una
simple función que suministre el tiempo real para las simulaciones.
Esta función de compilador en su forma nemónica es:
t = get_time( )
mientras efec_simulation()
{
t = get_time();
∆t = t – ultime;
mientras que (ultime < t)
{
efectuar procesos;
81
Simulación Virtual Interactiva
.
integrar v, a, etc., con ∆t;
efectuar otros procesos;
ultime = ultime + ∆t;
t = get_time();
∆t = t – ultime;
actualizar v, x, etc;
}
dibujar( );
}
Ax + By + Cz + D = 0
82
origen. Las variables x, y, z, pueden ser reemplazadas por el valor xo,
yo, zo de la posición de la pelota la cual se encuentra a una distancia d
del plano, como se aprecia en la figura.
n
v’
v d
n (A,B,C) = Ai + Bj + Ck
d = (n.p) + D = (A xo + B yo + C zo ) + D
u = v – (2vn)n
83
Simulación Virtual Interactiva
.
Se puede determinar el ángulo de incidencia definido por el vector
velocidad y la normal del plano:
to
tc
to + ∆t
El tiempo de colisión (tc) en que la bola toca el piso cae entre (to) y (to
+ ∆t), lo que indica los tiempos en que la bola se encontraba antes
84
sobre el piso y luego debajo del piso, respectivamente. Con cierta
tolerancia se puede resolver para (tc) con el método de solución
numérica denominada bisección, regresando desde el tiempo (to) y
resolviendo para (to + ∆t / 2). Si se detecta que no hay penetración
cuando se llegue a (to + ∆t / 2), entonces se puede determinar que la
colisión está en el otro intervalo de tiempo comprendido entre (to + ∆t
/ 2) y (to + ∆t). Suponiendo que (tc) < (to + ∆t / 2), se vuelve a dividir
entre (to) y (to + ∆t / 4), hasta obtener el tiempo (tc), con cierta
tolerancia λ. Esta tolerancia puede ser determinada para una mejor
exactitud con un valor mayor y menor que el punto de colisión en el
piso, esto es, por encima y por debajo del piso.
to
tc
λ
λ
to + ∆t
85
Simulación Virtual Interactiva
.
3.3.10 Sobre el concepto de inercia
A B C
Figura 3.8 Los tres objetos pueden tener la misma masa pero diferentes momentos
de inercia. En este caso Ic > Ib > Ia
86
3.4 Mecánica
Es el estudio de cuerpos en reposo, en movimiento, de los efectos de
las fuerzas o interacciones que producen dicho movimiento.
87
Simulación Virtual Interactiva
.
3.4.1 Cinemática de la partícula
t
∆x = x – xo = ∫ vdt
to
realizado en el intervalo de tiempo:
∆t = t – to
vm = ∆x/∆t
88
Dos autos pueden tener la misma velocidad media al final de un
trayecto, aunque uno de los dos se haya detenido y acelerado en dicho
trayecto. Si se necesita describir el movimiento de la partícula en cada
instante de tiempo en un programa, se debe entonces preparar las
funciones de tiempos (temporizadores) para la simulación.
89
Simulación Virtual Interactiva
.
No hay que hacer cálculos para establecer las funciones del reloj en la
simulación. Simplemente se asigna el valor correspondiente para el
evento que se quiere simular, pero, como se explicó, con el cuidado de
saber escoger el tiempo adecuado para que no existan saltos de la
partícula demasiado grandes hasta el punto en que la computadora no
pueda registrar un procedimiento en cierto período de tiempo.
x = xo + v t
am = ∆v/∆t
90
Cuando la partícula se mueve en la dirección positiva de un eje y la
velocidad está creciendo, entonces se está acelerando al igual que si se
mueve en la dirección negativa del eje con velocidad decreciente.
x = xo + v t
91
Simulación Virtual Interactiva
.
t x xo v
0.00 5.00 5.00 3.00
x = xo + vt
0.20 5.60 5.00 3.00
12.00
0.40 6.20 5.00 3.00
10.00
0.60 6.80 5.00 3.00
8.00
0.80 7.40 5.00 3.00
6.00
1.00 8.00 5.00 3.00
4.00
1.20 8.60 5.00 3.00
2.00
1.40 9.20 5.00 3.00
0.00
1.60 9.80 5.00 3.00
0.00 0.50 1.00 1.50 2.00
1.80 10.40 5.00 3.00
∆t= 0.20
Figura 3.9 Representación de la ecuación x = xo + v. t
x = xo + vot + ½ at2
v2 = vo2 + 2ax.
92
a=5
v = 5t v = vo + at
2
x = ½ 5t x = xo + vot + ½ at2
2
v = 2(5)(160) = 1600 v2 = vo2 + 2ax
velocidad de despegue v = 40 m/s
tiempo de recorrido de la pista t = 8s
93
Simulación Virtual Interactiva
.
100
80
60
40
Posición
20
Velocidad
0
0 2 4 6 8 10
-20
-40
-60
94
x = vot + ½ at2, x = ½ (–9.8)22 + (40)2, x ≈ 60m
Siendo ésta la misma posición que alcanzó a los 2s, lo que indica que
la piedra después de pasar por la altura máxima, cae regresando a su
posición inicial.
v = vo + at
x = vot + ½ at2
El signo menos indica que la piedra debería estar por debajo del suelo
a 100 metros. Estas ecuaciones son válidas para movimientos con
aceleración constante. Esta aceleración puede ser 0 o incluso negativa
en caso de que el cuerpo desacelere. De aquí, se pueden despejar
ciertas ecuaciones que ayuden en la construcción de simulaciones:
a = (v – vo) / ∆t
a = (2∆s – 2v ∆t) / ((∆t)2)
∆s = (∆t/2) (v + vo)
∆t = (v – vo) / a
vo = (v – a∆t)
95
Simulación Virtual Interactiva
.
3.4.1.7 Movimiento en el plano
s
∆s
so
o x
96
3.4.1.9 Velocidad media e instantánea
y
y v
vm
B
∆y A
∆x
o x o
x
Figura 3.12 Gráficas correspondientes a las componentes de la
velocidad media e instantánea
vm = ∆s/∆t
vx = dx/dt vy = dy/dt
tan θ = vy / vx
97
Simulación Virtual Interactiva
.
s=xi+yj
por lo tanto,
y ∆v y
vo v v
B
B
A
a A
a
o
o x
x
a = dv/dt
v = vo – ∆v
98
Se puede notar en la gráfica que a siempre se encuentra en la parte
cóncava de la curva definida por A y B.
dv = a dt
v t
∫ dv = ∫ a dt
vo to
t
∆v = v – vo = ∫ a dt
to
v dv = a ds
99
Simulación Virtual Interactiva
.
f = ma
ay = fy /m = –mg /m = –g
a = –g j
ax = 0 ay = –g
vx = vo cos θo vy = –gt + vo sen θo
x = vo cos θo t y = vo sen θo t – ½ gt2
ax = 0 ay = –9.8
vx = 10(0.8) vy = –9.8 t + 10(0.6)
x = 10(0.8) t y = –1/2(9.8)t2 + 10(0.6)t
100
t = 6/10 = 0.6s, y la ordenada y, proporciona la altura máxima:
Movimiento de proyectiles.
t g Vo Theta Theta rad Vx Vy X Y
0.2 9.8 10 37 0.645771823 7.9863551 4.06 1.60 1.01
0.4 9.8 10 37 0.645771823 7.9863551 2.10 3.19 1.62
0.6 9.8 10 37 0.645771823 7.9863551 0.14 4.79 1.85
0.8 9.8 10 37 0.645771823 7.9863551 –1.82 6.39 1.68
1 9.8 10 37 0.645771823 7.9863551 –3.78 7.99 1.12
1.2 9.8 10 37 0.645771823 7.9863551 –5.74 9.58 0.17
1.4 9.8 10 37 0.645771823 7.9863551 –7.70 11.18 –1.18
1.6 9.8 10 37 0.645771823 7.9863551 –9.66 12.78 –2.91
∆t= 0.2
2.00
1.50
1.00
0.50
0.0
12
-0.50 - 2 4 6 8 10
-1.00
-1.50
Una vez más haciendo caso omiso a los efectos aerodinámicos del
proyectil, a continuación se describen algunas cualidades del
movimiento cinético de estos cuerpos:
101
Simulación Virtual Interactiva
.
- El máximo rango se alcanza a un ángulo de 45º para una velocidad
dada.
x = (vo cos θ )t
y = (vo sen θ)t – (gt2)/2
vx = vo cos θ
vy = vo sin θ – gt
v = sqrt(vo2 – 2gt vo sin θ + g2t2)
h = (vo2 sin2θ) / (2g)
r = vo t cos θ
t = (2vo sin θ) / g
102
y
vo
h b
---------------------------------- r ------------------------------------
103
Simulación Virtual Interactiva
.
----------------------------- r ----------------------
------
Figura 3.16 El proyectil parte con la velocidad del sistema en movimiento que lo
lanza
x = vo t
y = h – (gt2)/2
vx = vo
vy = – gt
v = sqrt(vo2 + g2t2)
h = (gt2) / 2
r = vo t
t = sqrt(2h / g)
104
3.4.1.13 Explosiones con partículas
tiempo = tiempo + ∆t
105
Simulación Virtual Interactiva
.
La partícula necesitaría una parte de ese tiempo en milisegundos para
ser dibujada,
t = tiempo / 1000
x = vo cosθ t
y = vo senθ t + ½ gt2
s=xi+yj+zk
por lo tanto,
106
l
x
y vs
α
β
Figura 3.18 Orientación del cañón por medio de ángulos y las componentes
vectoriales
Pero con respecto a la longitud l del cañón, los valores para los
cosenos directores están definidos por:
p = l cos ( 90º – α )
107
Simulación Virtual Interactiva
.
También se definen las componentes de la longitud l del cañón para
los ejes coordenados:
ax = 0
vsx = vx = vs cosθx
x = vx t = vs cosθx t
vsy = vs cosθy
ay = –g
vy = vsy + at = vs cosθy – gt
yo = yp + l cos α
y = yo + vsyt + ½ at2
reemplazando,
az = 0
vsz = vz = vs cosθz
z = vz t = vs cosθz t
108
s = ( (vs cosθx ) t ) i + ( (yb + l cos α ) + (vs cosθy ) – ½ gt2 ) j +
((vs cosθz t )) k
a = –g j
y B
S
O A
r
Figura 3.19 Movimiento que realiza la partícula sobre una circunferencia de radio r
109
Simulación Virtual Interactiva
.
3.4.3.2 Movimiento circular uniforme
3.4.3.3 Velocidad
3.4.3.4 Aceleración
∆v/∆s = v / r
∆v = v/r ∆s
a = v2 / r
110
Ejemplo elemental: Un punto gira sobre una circunferencia de radio r
= 2m a razón de n = 10 vueltas por segundo. En un segundo el punto
recorre una distancia igual a su rapidez.
La aceleración es
a = 0.0336 m/s2
θ=s/r
13
Si r=1 y s=1, s/r = 1, de aquí la circunferencia de longitud de arco máximo
6.283185 o 2π radianes.
111
Simulación Virtual Interactiva
.
s=θr
s = 2πr
θ = s / r = 2πr
θ = 2πr / 2r = π rad
ω = Δθ / Δt (Δt→0)
112
Las unidades son expresadas en vps, vueltas por segundo o rpm
revoluciones por minuto. Siendo una vuelta igual a un ángulo de 2π
radianes, entonces la velocidad angular está dada por:
ω = 2π 3 vps = 6π rad/s
113
Simulación Virtual Interactiva
.
Además, si Δt tiende a 0, la relación Δs/Δt es la velocidad de un punto
del cuerpo, cuya dirección es tangente a la circunferencia. La
magnitud es:
v= rω
114
Su aceleración angular media fue:
Uniforme
v cte ω cte
x = vt θ = wt
Uniformemente acelerado
a cte α cte
v = vo + at ω = ωo + α t
x = vot + ½ a.t2 θ = ωot + ½ α.t2
v2 = vo2 + 2ax ω2 = ωo2 + 2αθ
ac = ω2r at = α r
115
Simulación Virtual Interactiva
.
La aceleración total sería la suma de ambas:
a = ac + at
n = ω /2 π
ζ = ω 2/2α
ζ = (2 π n) 2 /2α
ζ = (4 * π2 * 25/π2 ) /2*5 = 100/10 = 10 rads
ω2 = ωo2 + 2αζ
ω = sqrt (0 + 2 * 5 * 10 ) = 10 rad/s
ω = ωo + α t
t=ω/α
t = 10 / 5 = 2 s
v=rω
v= 12 * 10 = 120 cm/s
ac = v2 / r ac = ω 2 r
ac =1202 /12 = 1200 cm/s2 ac =102 *12 = 1200 cm/s2
116
La aceleración tangencial del mismo punto es:
at = α r
at =12 * 5 = 60 cm/s2
La magnitud de la aceleración es:
117
Simulación Virtual Interactiva
.
permanentemente sobre dicho punto. Tomando el radio de la tierra R
de 6380 Km (6,380,000 m), se determina el período o vueltas para el
punto que gira sobre la tierra y equivale a 1 día, lo que a su vez
equivale a 86400 segundos (24 x 60 x 60). Entonces, la rapidez está
dada por:
v = 2π R / 86400
v = 463.97 m/s
ac = v2 / R = ω2 R
ac =0.0337 m/s2
ω2 = ac / R = 0.0337 / 6,380,000
ω2 = 0.0000727 rad/s
v = 2π d / 86400
ac = v2 / d = ω2 d
ac =0.0353 m/s2
118
A continuación se determina la velocidad angular del satélite:
ω2 = ac / d = 0.0353 / 6,680,000
ω2 = 0.0000727 rad/s
Sea entonces:
119
Simulación Virtual Interactiva
.
VBA = 80 km/h – 60 km/h
VBA = 20 km/h
120
Viento a 8 nudos
20 nudos
hacia el Norte Rumbo
a corregir
Entonces sea
121
Simulación Virtual Interactiva
.
con una dirección de:
3.4.4.1 Fuerza
122
Fuerza electromagnética – Se refiere a la fuerza de atracción o
repulsión entre dos cuerpos debido a sus cargas eléctricas. La fuerza
electromagnética se refiere entonces al instante en que las cargas están
en movimiento.
123
Simulación Virtual Interactiva
.
Es posible averiguar la tensión en cada cuerda si los ángulos formados
son de 25º.
= 25º
= 25º
T1 y T2 = 1103.4 lbs
124
D 2m 6m
B
5m Flujo
A
C
Figura 3.24 Fuerza de resistencia
TAD α β
TAB
FD 50lb
80lb
TAC
tan α = 2m / 5m α = 21.8
tan β = 6m / 5m β = 50.2
Condición de equilibrio:
125
Simulación Virtual Interactiva
.
FD = – FD i
FR = 38i – 0.37 TAD i – FD i + 32j – 80j – 0.92 TAD j = 0
F
F´
126
En el caso de las fuerzas externas que se mantienen invariables, se
puede apreciar en el ejemplo del camión que es empujado o tirado por
una fuerza aplicada en la defensa o en la parte posterior del mismo.
F´ F
O r
d
A
Mo = r x F
127
Simulación Virtual Interactiva
.
Si se tiene en cuenta el ángulo formado entre la línea de acción del
vector de posición r y de la fuerza F, la magnitud del momento de F
con respecto a O es:
Mo = r F senθ = Fd
Mx = yFz – zFy
My = zFx – xFz
Mz = xFy – yFx
i j k
Mo = x y z
Fx Fy Fz
A B
60º
15 m CG 20 m
20 m 40 m
128
En un diagrama de cuerpo libre, se descomponen cada una de las
fuerzas.
FA
-866 j FB
-1000 j
500 i
La resultante es:
R = ΣF
R = 500 i – 1866 j
Mo = – 30,180 Nm
La magnitud de la resultante es
129
Simulación Virtual Interactiva
.
En el ejemplo anterior se puede reconfirmar que cualquier fuerza que
actúe en un punto de un cuerpo rígido se puede sustituir por un
sistema fuerza par en un punto arbitrario, formado por una fuerza y
un momento. La fuerza y el momento son perpendiculares.
R= ΣF = 0 y ΣMo = Σ( r x F )= 0
Descomponiendo luego cada fuerza y cada momento en sus
componentes rectangulares. Para 2D:
Ejemplo elemental 2D: Una grúa que tiene una masa de 500 kg
levanta una carga de 1000 kg. Está fija en su lugar por un perno en el
punto PA y reposa en un punto de apoyo PB. El centro de gravedad
de la grúa está en el punto CG. Se determinan entonces las
componentes a las reacciones en los puntos.
130
CG
PA
2m
PB
1000 kg
3m 4m
Ay
CG 9800 N
Ax PA
2m 4900 N
PB
B
3m 4m
131
Simulación Virtual Interactiva
.
En este ejemplo, en el punto PA la reacción es una fuerza de dirección
desconocida, representada por sus componentes Ax y Ay. La reacción
en el punto PB se ha determinado que la reacción es perpendicular a la
superficie del mismo, por lo que se considera una fuerza horizontal.
ΣMA = 0
2m x B – 3m x (4900) – 4m x (9800) = 0
B = 26950 N
ΣFx = 0
Ax + B = 0
Ax = – 26950 N
ΣFy = 0
Ay – 4900 – 9800 = 0
Ay = 14700 N
A = sqrt (–269502 + 147002)
A = 30698.4 N a 28º
Para verificar que los datos son exactos, se resuelve la siguiente
sumatoria para los momentos donde
132
cualquier relación matemática. Es sabido que el peso y la masa son
valores que se relacionan debido a la gravedad, pero deben ser
definidamente tratados de forma independiente – para todo problema
en simulación se deben especificar tanto la masa como la gravedad.
y
10”
F
10” 2”
8”
A 30º
z
10”
B
4” x
100 lbs
y
10”
10”
2”
8”
A 30º
F
z
10”
100 lbs B
4” x
133
Simulación Virtual Interactiva
.
Se comprueba que en el punto A se involucran dos componentes de
fuerza de articulación y tres en B, F y la carga de 100 lbs. Las
ecuaciones de equilibrio se establecen así:
ΣF = 0
Ax i + Ay j + Bx i + By j + Bz k – F – 100 = 0
F = 30 i + 8.66 j – 5 k
C = 10 i + 4 k
B = Bx i + By j + Bz k
ΣMA = 0
–400 + 5P = 0 P = 80 lbs
134
3.4.4.8 Palancas
F
F
R O
O R O R
135
Simulación Virtual Interactiva
.
3.4.4.9 Fuerzas de rozamiento
Fs ≤ μsN
Fk = μkN
Ejemplo elemental: Un bloque que pesa 20N es tirado por una cuerda
con una tensión que puede aumentar hasta 6N antes de que empiece a
moverse y para mantenerlo en movimiento se necesita una fuerza de 4
N.
F T
136
Antes de moverse En movimiento
ΣFy = 0 ΣFy = 0
ΣFx = 0 ΣFx = 0
ΣFx = T – Fs = 6N – Fs = 0 ΣFx = T – Fk = 4N – Fk = 0
Fs ≤ κsN Fk = κkN
ka = F/m
F = ma
137
Simulación Virtual Interactiva
.
Fx = max Fy = may Fz = maz
w = mg
138
3.4.5.3 Centro de gravedad
W = w1 + w2 + ... = Σw
El momento total en el objeto corresponde a la suma de los momentos
independientes de las partículas:
139
Simulación Virtual Interactiva
.
3.4.5.4 Fuerza centrípeta y centrífuga
F = ma = m (v2/r) = m (ω2r )
14
Johannes Kepler (1571-1630), astrónomo alemán.
140
T2 = k r3
F = G mM / r2
g' = (6,673 x 10–11 N m2 / kg2) x (5.98 x 1024 kg) / (6.38 x 106 + 3.0 x
105 ) 2
141
Simulación Virtual Interactiva
.
3.4.5.6 Campo gravitacional
Eg = F/m N kg
w = Eg m
Eg = g
mg = w2 /w1
142
F
F cos
W = (Fcosθ )s
W = Fs
1 J = 107 erg
143
Simulación Virtual Interactiva
.
-F
Fr
s
W = F∆s cosθ
S2
W= F ∫ ds
S1
144
x
F F
F = kx
x x
W= F ∫dx = ∫ kx dx = ½ kx2
o o
W = ½ kxo2 – ½ kx2
145
Simulación Virtual Interactiva
.
3.4.5.10 Potencia
P=W/t
P = lim ∆w / ∆t
∆t→ 0
Si ∆t→ 0 entonces
P = Fv cos θ
146
P = Fv = (15000 N)(268.2 m/s) = 4 x 106 W
F = ma
Fs = mas
as = ½ ( v2 – vo2 )
Por lo tanto:
Fs = m ½ ( v2 – vo2 )
Es decir:
W = ½ m v2 – ½ m vo2
W = Ec – Eco
Ec = ½ m v2
Julios = kg x m/s2
147
Simulación Virtual Interactiva
.
ergios = gr x cm/s2
W = mgs
148
W = mg (ho – h)
W = mgho – mgh
Ep = mgh
donde,
W= Epo – Ep
Después de caer 8 m,
v2 = vo2 + 2as
Ec = ½ m v2 = ½ x 10 kg x 156.8 m2/s2
Ec = 784 J
149
Simulación Virtual Interactiva
.
3.4.5.15 Energía potencial elástica
W = ½ kxo2 – ½ kx2
Ep = ½ kx2
W= Epo – Ep
- Es independiente de su trayectoria.
- Es recuperable en su totalidad.
150
3.4.5.17 Conservación de la energía
Ep – Ec = Epo – Eco
Et = Ep + Ec
x*n
151
Simulación Virtual Interactiva
.
3.4.6 Rotación del cuerpo rígido
m = ∫ρdv = ρ ∫dv
xc = ( ∫ xo dm ) / m
yc = ( ∫ yo dm ) / m
zc = ( ∫ zo dm ) / m
donde xc, yc, zc corresponden a las coordenadas del centro de masa y
xo, yo, zo corresponden al centro de masa de cada masa elemental. Los
valores xodm, yodm, zodm, representan el primer momento de las masas
elementales para los ejes respectivos. En la práctica se forman
números finitos de masa:
152
xc = (Σ xo m ) / Σ m
yc = (Σyo dm ) / Σ m
zc = (Σ zo dm ) / Σ m
m t =Σ m i
CG = (Σcgi mi) / mt
r2 r1 m1 k
∆ m2
A A
‟ ‟
153
Simulación Virtual Interactiva
.
Si un cuerpo está formado por las masas m1, m2, etc., a distancias r1,
r2, etc., del eje de rotación, su momento de inercia I con respecto a
éste viene dado por:
Y Y Y
Z
M ry
dm dm
dm
rx
rz dm
X X Z X
rx
Z
Figura 3.43 Cuerpo rígido en 3D
I = r2m
donde r es:
r = sqrt ( I / m)
154
Ixx = ∫ r2x dm = ∫ (y2 + z2) dm
Y
2.5 in
1 in
2 in
3 in
X 6 in
Z
2 in
2 in
155
Simulación Virtual Interactiva
.
Volumen = 6 x 2 x 2 = 24 in3
Peso = (24 in3)(490 lb/ft3) = 6.81 lbs
Masa = 6.81 lbs / 32.2 ft /s2 = 0.211 lbs. s2/ft
Momentos de Inercia
Prisma
Cilindro
156
Cuerpo compuesto
I = Io + md2
r = sqrt ( ro2 + d2 )
157
Simulación Virtual Interactiva
.
Como Icm = MR2/2
Ip = MR2/2 + MR2
donde el momento de inercia está definido por Ixx, Iyy, Izz y los
restantes términos Ixy, Ixz, Iyz son los componentes del producto de
inercia.
158
Ixy = Iyx = ∫(xy) dm
L = Iω
dW = F ds
159
Simulación Virtual Interactiva
.
El caso más común es el de una fuerza que se aplica a una rueda de
radio R el cual gira una porción de ángulo dζ. Esta fuerza no tiene
normal. Si el ángulo es lo bastante pequeño la fuerza se puede
considerar constante durante el pequeño intervalo de tiempo.
F
R d
F
Figura 3.46 Trabajo realizado por una fuerza sobre un cuerpo que gira
dW = FR dζ
dW = Γ dζ
dW = Γ ∆ζ
dW/dt = Γ dθ /dt
160
dθ/dt que es la velocidad angular en rad/s. Se puede expresar esta
ecuación como:
P = Γω
El ángulo es:
n = ζ /2π = 4 rev
Como 1 HP = 745.7 W
161
Simulación Virtual Interactiva
.
Γ = Iα
E= Σ ½ mivi2
Para un cuerpo que gira:
vi = ri ω
Reemplazando:
162
E= Σ ½ mi ri2ω2 = ½ ω2 Σ mi ri2
Por lo que:
E = ½ I ω2
El desplazamiento es:
ω = sqrt(900) = 30 rad/s
163
Simulación Virtual Interactiva
.
3.4.6.8 Fuerza de Coriolis
Fc = -2mω x v
Trayectoria deseada
Trayectoria real
15
Gaspard-Gustave de Coriolis (1792-1843). Ingeniero y matemático francés.
16
León Foucault (1819-1868), físico francés.
164
3.4.7 Impulso y momento lineal
La III ley de Newton afirma que “si un cuerpo ejerce una fuerza sobre
un segundo cuerpo, éste ejercerá una fuerza igual y opuesta sobre el
primero.” Una de las fuerzas se denomina acción y la otra reacción.
3.4.7.2 Impulso
mv = m vo + mat
es decir
mv = m vo + Ft
Ft = mv – m vo
t2
J = F (t2 – t1 )= ∫ F dt
t1
165
Simulación Virtual Interactiva
.
p = mv
Ft = m(v – vo)
166
m1 u1 + m2 u2 = m1 v1 + m2 v2
20 cm
v = ((m + M)/m)vs
167
Simulación Virtual Interactiva
.
El conjunto bala–pistola esta inicialmente en reposo, luego su
cantidad de movimiento es 0. Después del disparo, la bala de 20g y la
pistola de 1000g tienen cada una, una cantidad de movimiento que
satisface la siguiente ecuación:
A VA2
A VA1 A
B B
VB
(0.5 kg)(2 m/s)+(0.45 kg)(0)= (0.5 kg)(1 m/s)(cos 30) + (0.45 kg) VBx
En y:
168
(0.5 kg)(0) + (0.45 kg)(0) = (0.5 kg)(1 m/s)(sen 30) + (0.45 kg) VBy
3.4.8.1 Colisiones
169
Simulación Virtual Interactiva
.
A
B
vA = vB
170
3.4.8.4 Coeficiente de restitución
m1 u1 + m2 u2 + m1 v1 + m2 v2
(0.5 kg)(2 m/s) + (0.45 kg)(–1.34 m/s) + (0.45 kg) v1 + (–1.34 m/s) v2
171
Simulación Virtual Interactiva
.
velocidad de los cuerpos se encuentra a lo largo de la línea de acción
de impacto, se le conoce como impacto directo. Cuando la línea de
acción pasa a través del centro de masa de los cuerpos, la colisión se
denomina de impacto central, como en el caso de partículas o de las
esferas de masa uniformemente distribuida. Cuando la línea de acción
pasa a través del centro de masa de los cuerpos y sus velocidades
están a lo largo de esa línea, se conoce como impacto central directo.
Por último, cuando las velocidades de los cuerpos no están a lo largo
de la línea de acción, el impacto se denomina impacto oblicuo.
n
u después i t
de impacto
2 26º j
v después de impacto
1
v antes de impacto
172
La línea de acción de impacto está a lo largo de la línea que conecta
los centros de gravedad de ambas bolas, la cual es normal para ambas
superficies. Se puede escribir el vector unitario normal n como:
n = 0.866 i – 0.5 j
vr n = (u1 – u2 ) n
vr n = 5.196 m/s
m1 u1 + m2 u2 = m1 v1 + m2 v2
e u1 = v2 – v1
e u1 = v2 – u1 + v2
e u1 = 2 v2 – u1
173
Simulación Virtual Interactiva
.
2 v2 = e u1 + u1
v2 = u1 (e+1) /2
v2 = 4.9362 m/s
Reemplazando:
v1 = u1 – v2
v1 = 0.25 m/s
v1 =(0.866 m/s) cos 26º i + 2.63 m/s sen 26º i + (–0.866 m/s) sen 26º j
+ 2.63 m/s cos 26º j
v1 = 2.0 m/s i + 1.984 j
174
m
r v
ω O
L = mvr
v=ωr
mvr = mω r2
Σ mω r2 = ω Σ m r2
por lo que el momento angular se escribe como:
L = Iω
Γ = I α = I (ω2 – ω1 ) / ( t2 – t1 )
175
Simulación Virtual Interactiva
.
Γ ( t2 – t1 ) = Iω2 – Iω1 = L2 – L1
t2
Jθ = Γ (t2 – t1 ) = ∫ Γ dt
t1
176
Como
Jθ = Iω – Iωo
Supóngase ahora que el disco grande tiene una masa de 3 kg, radio 0.5
m y velocidad angular inicial de 20 rad/s.
I = ½(3kg)(0.5m)2 = 0.75 kg m2
I’ = ½(2kg)(0.2m)2 = 0.2 kg m2
177
Simulación Virtual Interactiva
.
La energía cinética final es:
Ko = 643 J
Γ=rxF
178
Lo mismo ocurre para el momento angular. Una partícula de masa m,
cuyo vector de posición respecto al origen es r, que se mueve con
velocidad v y cuyo momento lineal es p = mv, el momento angular se
define como:
L = r x p = r x mv
ΣΓ = dL/dt
donde Γ y L pueden tener direcciones diferentes, en cuyo caso la
dirección del eje de rotación puede variar.
17
Inventado por León Foucault.
179
Simulación Virtual Interactiva
.
Γ
ϕ L + L
O L = Γ
t
L
R
∆L = Γ ∆t
180
L + ∆L
∆ϕ = |∆L| / | L|
Ω = ∆ϕ / ∆t= ( |∆L| / | L| ) / ∆t
J = m1 (v1 – u1)
181
Simulación Virtual Interactiva
.
– J = m2 (v2 – u2)
Para el cuerpo 2:
v2 = – ( J / m2 ) + u2
Sustituyendo en e:
e vr + vr = –J (1/ m1 + 1/ m2 )
J = – vr ( e +1 ) / (1/ m1 + 1/ m2 )
v1 = (Jn / m1 ) + u1
v2 = – ( Jn / m2 ) + u2
182
3.4.8.10 Efectos angulares del cuerpo rígido
v1 v2 C2
vPc = vg + (ω x r)
Las velocidades angulares ω’1 y ω’2 después del impacto son las
incógnitas en estas ecuaciones lo cual indica que se requiere de dos
nuevas ecuaciones:
Para el cuerpo 1:
(r1 x J ) = I1 (ω1 – ω’1 )
Para el cuerpo 2:
(r2 x –J ) = I2 (ω2 – ω’2 )
183
Simulación Virtual Interactiva
.
El momento se halla resolviendo a través del producto cruz vectorial
entre el impulso y la distancia del CG del cuerpo al punto de aplicación
del impulso.
v1 = (Jn / m1 ) + u1
v2 = – ( Jn / m2 ) + u2
184
Es difícil calcular esta fuerza de fricción de colisión debido a que
dicha fuerza no permanece constante y no se desarrolla más allá de
una fuerza de fricción estática. Por otra parte, los objetos tienden a
deformarse cuando chocan, por lo que se genera una resistencia.
μ = Ff /Fn
t u ut n
α
vt
v
φ
resultante
Figura 3.58 Colisión entre la pelota y el palo de golf
Si fuera una colisión sin fricción, vt y ut serían iguales, tal como los
ángulos α y β. Pero con fricción, la velocidad tangencial de la bola es
reducida, haciendo ut menor que vt, al igual que α < β. La ecuación
que relaciona el ángulo φ con el coeficiente de fricción es:
tan φ = μ = Ff /Fn
185
Simulación Virtual Interactiva
.
Si cambia la velocidad de la bola en la dirección tangencial, también
cambia la velocidad angular. La fuerza de fricción está actuando en
la superficie de la bola a cierta distancia del CG. Por lo tanto, esta
fuerza crea un momento alrededor del CG lo que causa que la bola gire.
Se puede utilizar una ecuación para la nueva velocidad angular en
términos del impulso o impacto normal.
J = Icg / (μ r) ( ω – ω’ )
ω = J (μ r) / Icg + ω’
v1 = (Jn + (μ J ) t ) / m1 + u1
v2 = (– Jn + (μ J ) t ) / m2 + u2
186
t = ( n x vr ) x n
t=t/|t|
Además del impulso lineal, los efectos angulares dan una mejor
sensación visual del efecto real de una colisión puesto que al no
tratarse de una esfera a la cual se le aplica el impulso en el CG, ahora
se aplica en el punto de contacto.
187
Simulación Virtual Interactiva
.
vértice. Para colisiones cara-cara es un punto cualquiera en la cara de
A. Además, sea x(t) la posición del CG del cuerpo en el espacio.
Aunque pA(to) y pB(to) coinciden en el tiempo (to), la velocidad de los
dos puntos a ese tiempo podrían ser completamente diferentes. Para
calcular la velocidad de los puntos de la siguiente forma, se tiene:
donde d/dt pA(to) y d/dt pB(to), son las velocidades que corresponden a
las derivadas de los respectivos puntos.
A
A
PA(t)
B PA(t) B
PB(t) PB(t)
vrel = n(to)
188
A
d/dt pA(to) – d/dt pB(to)
n
p
A
d/dt pA(to) – d/dt pB(to)
n
p
A
d/dt pA(to) – d/dt pB(to)
n
p
189
Simulación Virtual Interactiva
.
Ahora se debe determinar el cambio de velocidad. Se puede imaginar
una fuerza actuando en p, la cual requiere una porción del tiempo para
detener completamente el movimiento relativo entre los cuerpos. Para
esto se utiliza la ecuación del impulso J.
∆v = J/m
∆P = J
τImpulsivo = (p – x(t)) x J
∆L = τImpulsivo
∆ω = τImpulsivo / I(to)
190
Cuando dos cuerpos colisionan, se aplica un impulso entre el cambio
de sus velocidades. Para cuerpos sin fricción, la dirección del impulso
estará en la dirección normal n(to). Entonces:
J = j n(to)
A + j n(to)
n
p
B – j n(to)
v+rel =– e v–rel
191
Simulación Virtual Interactiva
.
Para e = 1, v+rel = –v–rel, perfectamente elástica y no hay pérdida de
energía cinética.
rB = p – xB (to)
192
d/dt+pA(to) – d/dt+pB = (d/dt+pA(to) – d/dt+pB ) + j ( (n(to) / mA ) +
(n(to) / mB ) +
(rA x n(to)) / IA(to)) x rA + (rB x n(to)) / IB(to)) x rB )
entonces:
v+rel = n(to).( d/dt+pA(to) – d/dt+pB )
= v–rel + j ( (1 / mA ) + ( 1 / mB ) +
n(to). (rA x n(to)) / IA(to)) x rA + n(to).(rB x n(to)) / IB(to)) x rB )
–e v–rel = v–rel + j ( (1 / mA ) + ( 1 / mB ) +
n(to). (rA x n(to)) / IA(to)) x rA + n(to).(rB x n(to)) / IB(to)) x rB )
donde,
3.5. Elasticidad
193
Simulación Virtual Interactiva
.
interacciones moleculares”. Es incluso el modelo utilizado en la
simulación de tela y objetos flexibles.
Fs = Ks ( |l| – lo )
Fd = Kd (v1 – v2)
194
Figura 3.66 Resorte -amortiguador
F2 = – F1
195
Simulación Virtual Interactiva
.
Estas partículas están influenciadas entre otros factores por la fuerza
de la gravedad, fuerzas aerodinámicas, resistencia al doblamiento,
colisiones y características como la deformación y el rasgado.
v p = mv
a
g
196
Una vez determinadas las fuerzas en el sistema, se recurre a la II ley
de Newton para calcular la aceleración:
an = 1/m Fn
Fg = mg
vn+1 = vn + an ∆t
xn+1 = xn + vn+1 ∆t
Este proceso se repite para cada partícula. Para cada sistema resorte-
amortiguador también son calculadas las fuerzas. Para cada triángulo
se le aplican las fuerzas aerodinámicas.
r
2
v
2
r
1
v
1
197
Simulación Virtual Interactiva
.
Fresorte = - ks x = - ks (lo – l)
Famortig = - kd v = - kd ( v1 –v2 )
Fsd = - ks (lo – l) – kd ( v1 – v2 )
f2 = - f1
Los resortes en la tela deben colocarse de tal manera que no haya nada
que prevenga la tela de flexionarse. La resistencia a la flexión es lo
que determina la clase de tela, si es de seda o un paño. Existen tres
tipos de fuerzas en los resortes los cuales permiten la flexibilidad o
rigidez de la tela:
198
Fuerza de doblamiento – Proporcionada por un resorte que une dos
partículas no adyacentes de forma horizontal o vertical.
Fa = ½ ρ |v|2 Cd a n
Para el caso de una tela formada por triángulos, cada triángulo conecta
tres partículas. Como la densidad del fluido y la constante de
resistencia no varían, se debe hallar la velocidad, la normal y el área
del triángulo.
199
Simulación Virtual Interactiva
.
vt = (v1 + v2 + v3 ) / 3
a = at vn / |v|
de aquí que:
200
3.6 Mecánica de fluidos
3.6.2 Densidad
201
Simulación Virtual Interactiva
.
P = dF/dA
18
Arquímedes, 287 – 212 a.C., científico griego.
202
3.6.5 Boyancia
Fb = -g ρV
203
Simulación Virtual Interactiva
.
Ejemplo elemental: Cuál es el valor de la fuerza de resistencia de un
misil de 50 cm de diámetro que vuela con una velocidad de 250m/s.
La densidad del aire es de 1.0 kg/m3. Asumir que CD=0.75
FL = ½ CLAρv² ῠ
FL = ½ CLAρv² Cos a
Lift
Drag
AoA
204
3.6.7 Ecuación de Bernoulli
19
Daniel Bernoulli, 1700-1782, matemático suizo.
205
Simulación Virtual Interactiva
.
última hacia abajo produciéndose una fuerza de reacción adicional
hacia arriba. La suma de estas dos fuerzas es lo que se conoce por
fuerza de sustentación.
3.6.8 Viscosidad
206
υ = μ/ρ
NR = ρvD/μ
equivalente a:
NR = vD/υ
donde:
21
En honor al físico irlandés George Gabriel Stokes (1819-1903).
22
En honor de Osborne Reynolds (1842-1912), ingeniero británico.
207
Simulación Virtual Interactiva
.
Turbulento
Laminar
208
3.7 Cinemática inversa
Es posible pensar en este término como la forma de enseñarle a un
modelo a recordar la última posición que ocupó en el espacio 3D.
Muy utilizado en la robótica para almacenar los ángulos de rotación y
las cantidades de traslación que realiza el brazo mecánico para que
luego los reproduzca en el mismo orden (programar cómo debe
moverse).
L2
L1
180-ϴ2 (x, y)
Y
ϴ1 ϴT
X
Figura 3.76 Actuadores
209
Simulación Virtual Interactiva
.
210
Capítulo 4
Ecuaciones del movimiento
4.1 Introducción
La cinética se define como la ciencia que estudia las causas que
provocan el movimiento de un objeto. Es utilizada para predecir el
movimiento causado por fuerzas dadas o para determinar las fuerzas
requeridas para producir un movimiento. Ahora se mezclan todos los
conceptos tratados en capítulos anteriores lo cual para muchos
propósitos, es la base fundamental del desarrollo de simulaciones
virtuales. Recordando las leyes de Newton, se retoman las ecuaciones
más importantes para la translación de los cuerpos. La fuerza F que
actúa sobre un cuerpo es la variación instantánea de su momento
lineal:
F = dp/dt
p = mv
F = m dv/dt
siendo,
a = dv/dt
F = ma
211
Simulación Virtual Interactiva
.
Se debe considerar además que las fuerzas actuantes en el cuerpo
tienden a causar rotación. La relación básica que denota la rotación
es:
τ = M = Iα
Donde M es el vector suma de todos los momentos o torques actuando
en el objeto, I es el momento de inercia o tensor y α es la aceleración
angular.
212
Existen dos formas para resolver problemas de cinética: el primer
caso, cuando se conoce la aceleración del cuerpo y se debe resolver
para las fuerzas que actúan en el objeto y el segundo caso, cuando se
conocen las fuerzas actuando en el objeto y el problema se debe
resolver para la velocidad, aceleración y posición. Por conveniencia y
por ser lo más normal en el planteamiento de problemas cinéticos, se
utilizará el segundo caso. El procedimiento real y comúnmente
aplicado para resolver problemas de cinética en las simulaciones
virtuales se describe a continuación:
213
Simulación Virtual Interactiva
.
cuerpo rígido diferente al CG, puede causar una variación del momento
angular:
dL/dt = r x F = M
Recordando que:
214
I = R(t) I(0)CR R(t)T
L=Iω
M = d(Iω)/dt
M = I dω/dt + dI/dt ω
M = I dω/dt +ω x Iω + Iω x ω
M = I dω/dt +ω x Iω
215
Simulación Virtual Interactiva
.
y se reemplaza en la ecuación anterior se obtienen en realidad seis
ecuaciones (ver sección 3.3.6) que para conveniencia en la simulación
se deben escribir entonces de la siguiente manera:
Fx = m dvx/dt
Fy = m dvy/dt
Fz = m dvz/dt
Vn+1 = Vn + F/m dt
xn+1 = xn + v dt
θn+1 = θn + ω dt
216
Izz = 5 utm.m2
F = 10 kp
r = 0,7 m
α = F x r / Izz = 1,4 rad/s2
dt = 0,2 s
ω = ωo + αt
θ = θo + ωot + ½ αt2
217
Simulación Virtual Interactiva
.
Lo primero que se visualiza en el listado anterior es la tendencia del
cuerpo a rotar cada vez más conforme pasa el tiempo. A los 3
segundos había completado una vuelta, pero se necesitó de 1 segundo
más para completar la segunda vuelta. La curva es una parábola. En la
simulación, los valores de la velocidad angular, así como el ángulo
descrito por el objeto son acumulativos debido al efecto continuo del
tiempo pero es posible determinar una velocidad y una posición
cuando los programas se limitan a ejecutarse hasta cierto tiempo. Para
el caso de la simulación en C++, un bucle WHILE en programación
deja abierta la posibilidad de que el objeto pueda desplazarse o rotar
hasta que termine dicha simulación. Otro aspecto a considerar es que
se trata el caso como el de una partícula donde obviamente no se tiene
en cuenta el valor de la masa. Para tener una forma más clara de los
modelos que se desarrollarán en un futuro, se presenta el caso
siguiente:
r
Z
Como
τ = F x r = 10 x 0.7 = 7 Kpm
218
y además, el momento de inercia de un disco está definido como
Izz = ½ m r2
entonces,
2 2
1/12 m (3r + h ) 0 0
I = 2 2
0 1/12 m (3r + h ) 0
2
0 0 1/2 m r
donde,
Ixx = Iyy = 1/12 m (3r2 + h2) = 1/12 x 20.4 x (3(0.7)2 + 0.01 2) = 2.5
utm.m2
219
Simulación Virtual Interactiva
.
El segundo punto dice identificar y cuantificar todas las fuerzas y
momentos que actúan sobre el cuerpo (describir la situación de la
fuerza). Para el caso cuando el tiempo ha transcurrido en 6 segundos,
las fuerzas que actúan en el disco corresponde a la componente de F
en el eje x, en los ejes y y z no se presentan fuerzas y el momento
generado es aplicado con respecto a z.
M = Iα = 7 kg m2 rad/s
v = rω
dv/dt = r dω /dt
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void init()
{
masa = 20.4; //u.t.m
r = 0.7; //m - radio del disco
I = masa*r*r/2; //u.t.m./m*m - Inercial
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
220
void handleKeypress(unsigned char key, int x, int y)
{
switch(key)
{
case '+':
F=10; //fuerza aplicada en un sentido
break;
case '-':
F=-10; //fuerza aplicada en sentido contrario
break;
case '*':
F = 0; //fuerza no aplicada
break;
case 27:
exit(0);
}
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void drawScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
time = glutGet(GLUT_ELAPSED_TIME);
dt = (time-oldtime); //define delta T
oldtime=time;
221
Simulación Virtual Interactiva
.
glTranslatef (0.0 , 0.0, -15); //ubicación retirado de pantalla
glRotatef (20, 0.0, 1.0, 0.0); //rotación de la vista ortogonal
glRotatef(angle, 0.0f, 0.0f, 1.0f); //ángulo de rotación del disco
glPushMatrix();
glColor3f(1.0f, 1.3f, 0.0f);
Cylinder = gluNewQuadric(); //simula el grosor del disco
gluCylinder(Cylinder, 4.0, 4.0, 0.5, 18, 1);
glutSwapBuffers();
glFlush();
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
222
con él ejerce una resistencia (fuerza de resistencia) lo que es
proporcional a la densidad del fluido en este caso el aire, a la forma
del cuerpo (distribución de la masa), a la superficie que golpea contra
el viento y a la velocidad. De la ecuación conocida:
Fr = mar
FD
mg
ΣF = mg - FD
Conociendo la densidad de la bola, su masa es entonces
223
Simulación Virtual Interactiva
.
m = δV
V = 4/3 π R3
m = 19.5 kg
FD = ½ CDAρv²
Resolviendo:
FD = 0.022 v²
La ley de Stokes proporciona la ecuación de fuerza de rozamiento para
una esfera:
Fr = 6πRμ v
Fr = 6 x π x 0.17 x 0.01 x v
224
V
2,0 Objeto más pesado
pesado
1,0
Objeto más liviano
liviano
0,0
#define PI 3.141592654
switch(key)
{
case '+':
h=10;
v=0;
FD=0;
FR=0;
break;
case 27:
225
Simulación Virtual Interactiva
.
exit(0);
} }
void init()
{
masa = 2.0; //kg
h=20; //m
r= 0.5; //m
ro = 1.29;
cd = 0.5;
visc = 1.3923; //kg/ m s
glEnable(GL_DEPTH_TEST);
}
time = glutGet(GLUT_ELAPSED_TIME);
dt = (time - oldtime)/1000; // define delta T
oldtime=time;
if (h<=-8)
{h =-8;
v = 0;
}
else
{
A=PI*r*r;
vt = sqrt((masa*9.8)/(ro*A*cd));
FW = masa*(-9.8);
226
else FR=0;
sFuerzas = FW + FD + FR;
v = v + ay*dt;
glPushMatrix();
glColor3f(1.0f, 1.3f, 0.0f);
Sphere = gluNewQuadric(); //define la bola
gluSphere( Sphere, 0.5, 10, 3);
glPopMatrix();
glutSwapBuffers();
glFlush();
}
227
Simulación Virtual Interactiva
.
t v a h H
0,00 0,00 0,00 0,00 20,00
0,05 0,49 0,02 0,02 19,98
0,10 1,47 0,17 0,15 19,83
0,15 2,90 0,61 0,44 19,39
0,20 4,64 1,53 0,96 18,43
0,25 6,41 3,14 1,70 16,73
0,30 7,79 5,47 2,58 14,14
0,35 8,53 8,46 3,50 10,64
0,40 8,76 11,96 4,46 6,18
0,45 8,80 15,92 5,57 0,61
0,50 8,80 20,32 6,94 -6,33
0,55 8,80 25,16 8,64 -14,98
Vt = sqrt(2mg/ρCDA) = 8.80
9,0
8,0
7,0
6,0
5,0
4,0
3,0
2,0
1,0
0,0
228
4.2.1 Mecánica del vuelo
2
L = CL (1/2)ρV S
D
T
CL = Coeficiente de sustentación
ρ = Densidad del aire
V = Velocidad
S = Superficie de sustentación W
229
Simulación Virtual Interactiva
.
Presionando en el teclado la letra “p”, se suministra arranque a un
motor que alcanza a proporcionar una fuerza de 450 Newtons. Luego,
al presionar la “+” se puede dar vuelo al modelo teniendo en cuenta el
ángulo de ataque, el cual hace que se levante por efectos supuestos de
entrada contra el viento. Es posible estabilizar el nivel de vuelo
deseado presionando “-” y asegurar la altura, presionando “*”.
#define PI 3.141592654
void handleKeypress(unsigned char key, int x, int y)
{
switch(key){
case 'p':
E=450.0;
break;
case '+':
F=25.0; T=1;
break;
case '-':
F=-25.0; T=-1;
break;
case '*':
F=0; T=0;
break;
case 27:
exit(0);
}}
230
En otras palabras, al presionar “+” es posible ejercer una fuerza
(momento) en la parte posterior del avión (elevadores), a la distancia
de r, con una fuerza de 25 N, lo que hace que el modelo rote según la
dirección de la fuerza ejercida.
void init()
{
masa = 120; //kg
r = 10; //m
Izz = masa*r*r; // Inercial
glEnable(GL_DEPTH_TEST);
}
void drawScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
time = glutGet(GLUT_ELAPSED_TIME);
dt = (time-oldtime)/500;
oldtime=time;
//fuerzas en ejes
Fx = E*cos(aoa);
Fy = E*sin(aoa);
//fuerza de resistencia
FDx = -0.5*vx*vx*sin(aoa);
FDy = -0.5*vy*vy*cos(aoa);
231
Simulación Virtual Interactiva
.
Las primeras dos fuerzas enfrentadas en el cuerpo rígido corresponden
a las fuerzas aplicadas en el eje axial, tales como el empuje E y la
fuerza que lo contrarresta, llamada de Resistencia.
//peso
Wx = 9.8*masa*sin(aoa);
Wy = -9.8*masa*cos(aoa);
//fuerza de sustentación
FLx = -Wx;
FLy = -Wy;
//sumatoria de fuerzas
sFuerzasx = Fx + FDx + FLx + Wx;
sFuerzasy = Fy + FDy + FLy + Wy;
//aceleraciones
ax = sFuerzasx / masa;
ay = sFuerzasy / masa;
//velocidad lineal
vx = vx + ax*dt;
vy = vy + ay*dt;
//traslación
x = x + vx*dt;
y = y + vy*dt + 0.5 * ay* dt*dt;
//aceleración angular
aang = sMoments / Izz;
232
La aceleración angular se deriva de la relación entre la suma de
momentos aplicados y el valor del momento de inercia, el cual
también se supone un valor fijo en el modelo.
//velocidad angular
vang = vang + aang*dt;
//espacio virtual
glColor3f(0.3f, 0.5f, 0.3f);
glPushMatrix(); //pista de despegue
glBegin(GL_QUADS);
glVertex3f(-500.0, -2.5, -500 );
glVertex3f( 500.0, -2.5, -500);
glVertex3f( 500.0, -3.5, -500);
glVertex3f(-500.0, -3.5, -500);
glEnd();
glPopMatrix();
//fuselaje (perfil)
glColor3f(1.0f, 0.5f, 0.2f);
glPushMatrix();
233
Simulación Virtual Interactiva
.
glVertex2f( 8.0, -1.5);
glVertex2f(-20.0, -1.5);
glEnd();
glBegin(GL_QUADS);
glVertex2f(-20.0, -1.5);
glVertex2f(-25.5, 5.0);
glVertex2f(-21.0, 5.0);
glVertex2f(-18.0, 1.5);
glEnd();
glPopMatrix();
glutSwapBuffers();
glFlush();
}
void update(int value)
{
glutPostRedisplay();
glutTimerFunc(25,update,0);
}
234
aplicado, trasladarse por efecto del empuje a pesar de la resistencia.
Estos valores definen el movimiento en el eje lateral (z, pitch) del
vehículo.
Y
L
F
D
X
Z Y
X ϕ Z
ψ
Figura 4.8 Modelo de avión y movimiento alrededor de los ejes y,x respectivamente.
235
Simulación Virtual Interactiva
.
4.2.1.2 Movimiento alrededor del eje longitudinal
m ac = F = mVt2/R
ac = Vt2/R
R = Vt2/g tan ϕ
L cos ϕ
f centrípeta
Y
L
ϕ
Z
L sin ϕ ac
W a
f centrífuga
Figura 4.9 Modelo de avión y fuerza centrífuga.
236
La fuerza neta horizontal está dada por:
L sin ϕ = mVt2/R
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void handleKeypress(unsigned char key, int x, int y)
{
switch(key) {
case '4':
F=20.0;T=-1;
break;
case '6':
F=-20.0;T=1;
break;
case '5':
F=0;
z=0;
T=0;
break;
case 27:
exit(0);
}
}
237
Simulación Virtual Interactiva
.
El valor que se imprime a los alerones permite generar un momento
(roll moment) el cual hace girar el avión alrededor del eje longitudinal.
Debido a que se han invertido las coordenadas, ahora el eje
longitudinal no se aprecia en pantalla. T indica si el giro es a babor o a
estribor. Las nuevas coordenadas son z,y y el momento de inercia es
con respecto a x.
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void init()
{
masa = 150; //kg
r = 6; //m
Ixx = masa*r*r; //Inercial
W = masa*9.8;
v = 1.0;
T = 0.00001; //dirección lateral (I-D)
glEnable(GL_DEPTH_TEST);
}
Aquí se supone que el avión está en pleno vuelo y por eso se asigna el
valor de v > 0.0.
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void drawScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
time = glutGet(GLUT_ELAPSED_TIME);
dt = (time-oldtime)/100;
oldtime=time;
//radio de giro
R = v*v/9.8;
238
//fuerza de sustentación
FLz = W*sin(roll);
FLy = W*cos(roll);
//fuerzas en ejes
Fz = FLz - T*(masa*v*v)/R; //centrífuga
Fy = W-FLy; //mantiene en altura
//sumatoria de fuerzas
sFuerzasz = Fz ;
sFuerzasy = Fy;
//aceleraciones
az = sFuerzasz/masa;
ay = sFuerzasy/masa;
//velocidad lineal
vz = vz + az*dt;
vy = vy + ay*dt;
//velocidad total
v = sqrt (vy*vy + vx*vx);
//traslación
z = z + vz*dt;
y = y + vy*dt;
//aceleración angular
aang = sMoments/Ixx;
//velocidad angular
vang = vang + aang*dt;
//escenario suelo
glColor3f(0.3f, 0.5f, 0.3f);
239
Simulación Virtual Interactiva
.
glPushMatrix();
glTranslatef (0 , -100.0, -350);
glBegin(GL_QUADS);
glVertex3f(-100.0, -1.5, 0.0 );
glVertex3f( 100.0, -1.5, 0.0);
glVertex3f( 100.0, -2.5, 0.0);
glVertex3f(-100.0, -2.5, 0.0);
glEnd();
glPopMatrix();
//fuselaje (vista posterior)
glColor3f(1.0f, 0.5f, 0.2f);
glPushMatrix();
glTranslatef (z, y, -350);
glRotatef(roll*180/PI, 0.0f, 0.0f, 1.0f); // ángulo roll
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
glBegin(GL_POLYGON);
glVertex3f ( 0.00 , -10.00 , 0.00 );
glVertex3f ( -5.00 , -10.00 , 0.00 );
glVertex3f ( -8.00 , -8.00 , 0.00 );
glVertex3f ( -10.00 , -4.00 , 0.00 );
glVertex3f ( -70.00 , 0.00 , 0.00 );
glVertex3f ( -70.00 , 1.00 , 0.00 );
glVertex3f ( -10.00 , 0.00 , 0.00 );
glVertex3f ( -10.00 , 5.00 , 0.00 );
glVertex3f ( -8.00 , 9.00 , 0.00 );
glVertex3f ( -5.00 , 10.00 , 0.00 );
glVertex3f ( -2.00 , 10.00 , 0.00 );
glVertex3f ( -1.00 , 19.00 , 0.00 );
glVertex3f ( -20.00 , 20.00 , 0.00 );
glVertex3f ( -20.00 , 21.00 , 0.00 );
glVertex3f ( 0.00 , 21.00 , 0.00 );
glVertex3f ( 0.00 , -10.00 , 0.00 );
glVertex3f ( 5.00 , -10.00 , 0.00 );
glVertex3f ( 8.00 , -8.00 , 0.00 );
glVertex3f ( 10.00 , -4.00 , 0.00 );
glVertex3f ( 70.00 , 0.00 , 0.00 );
glVertex3f ( 70.00 , 1.00 , 0.00 );
glVertex3f ( 10.00 , 0.00 , 0.00 );
glVertex3f ( 10.00 , 5.00 , 0.00 );
glVertex3f ( 8.00 , 9.00 , 0.00 );
glVertex3f ( 5.00 , 10.00 , 0.00 );
240
glVertex3f ( 2.00 , 10.00 , 0.00 );
glVertex3f ( 1.00 , 19.00 , 0.00 );
glVertex3f ( 20.00 , 20.00 , 0.00 );
glVertex3f ( 20.00 , 21.00 , 0.00 );
glVertex3f ( 0.00 , 21.00 , 0.00 );
glEnd();
glBegin (GL_LINES);
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f ( 0.00 , 21.00 , 1.00 );
glVertex3f ( 0.00 , -10.00 , 1.00 );
glEnd();
glPopMatrix();
//borrar acumuladores
Fz=0.0;
Fy=0.0;
vz=0.0;
vy=0.0;
az=0.0;
ay=0.0;
R =0.0;
glutSwapBuffers();
glFlush();
}
241
Simulación Virtual Interactiva
.
No todos los objetos en el ambiente tridimensional se comportan
igual. Para que lo haga justamente como en la vida real, hay que
centrarse en el modelo que se está tratando, pues aunque corresponden
a los llamados cuerpos rígidos y tal como se ha reiterado, no hay
problema en poner a volar una lavadora, una plancha o un camión. El
hecho de respetar el modelo en su estructura y diseño ayuda a
comprender mejor las fuerzas que se apliquen sobre dicho modelo.
242
estructura o partes del avión viene acompañada de los valores de masa
del cuerpo, cuya fuerza es la que se opone al movimiento lineal y del
momento de inercia de la masa, (distribución de masa inercial) que es
la fuerza que se opone al movimiento de rotación. Incluyendo otros
valores como la velocidad lineal, velocidad angular, estos valores
permiten realizar las sumatorias o integración correspondientes de
fuerzas y momentos, los cuales determinan el movimiento y giro del
avión.
243
Simulación Virtual Interactiva
.
4.2.2 Cinética del auto
244
comportamiento global desde el punto donde ocurre un evento, bien
sea por ejemplo, porque golpeó una piedra con una llanta o cayó en un
hueco, lo que hace que todo el auto sienta el efecto. Todo modelo de
esta naturaleza cumple con los principios del cuerpo rígido y
justamente es lo que se requiere para entender el vehículo en cuestión.
245
Simulación Virtual Interactiva
.
se expresa generalmente en términos de resistencia. Las fuerzas
aerodinámicas interactúan con el vehículo causando resistencia,
sustentación, fuerzas laterales, momentos y ruidos.
T
W
246
dinámica por una superficie de referencia. La resistencia se expresa
generalmente en términos de coeficientes no-dimensionales.
CD = FD / ½ Aρ v2
v = sqrt(vx2 + vz2);
fdx = - CD vx v;
fdz = - CD vz v;
Fr = - Cr v
Fl = FT + F D + Fr
247
Simulación Virtual Interactiva
.
sobre un cuerpo es igual a la tasa de variación del momento lineal
(cantidad de movimiento) del cuerpo. Esto se puede escribir en forma
de ecuación:
P=mv
F = d(mv)/dt = m dv/dt
v = v + a dt
p = p + v dt
248
menos que se diseñe un sistema diferencial. La dirección entonces es
el conjunto de mecanismos que tienen la misión de orientar las ruedas
directrices para que el auto tome la trayectoria deseada por el
conductor. Siendo theta el ángulo de dirección, los valores necesarios
para la dirección en relación al CG, son:
x = xo + V(sin(θ))dt
z = zo + V(cos(θ))dt
P = T x rpm
Fw = Tw / r
249
Simulación Virtual Interactiva
.
Relación Peso/Potencia - Se divide el peso del auto entre la potencia
para conocer la respuesta del motor lo que se refleja en la velocidad
alcanzada.
Frl = μW
Ahora, teniendo en cuenta la longitud L entre los ejes del auto, las
distancias a y b del CG a cada uno de los ejes comunes de las llantas
frontales f y posteriores p, se tiene que:
Wf = (a/L)W
Wp = (b/L)W
250
Capítulo 5
Escenario 3D
5.1 Introducción
En este capítulo se describe de manera elemental todo lo relacionado
con los modelos geométricos en 3D y sus propiedades, así como su
comportamiento en el entorno 3D utilizando un editor como 3DsMax
y la API de OpenGL. Se definen los diversos términos que entran a
formar parte del modelo y su entorno en la programación del mismo.
Se explica cómo está conformado un archivo y la jerarquía de un
modelo completo.
251
Simulación Virtual Interactiva
.
Entre otras cosas, si bien es posible mantenerlos entre ellos, el módulo
compilado (.exe) crecerá en semejante proporción. El mesh o la malla
del objeto, normalmente está formado por caras y estas a su vez
definidas por vértices y un material con el cual recubrirlos o por
textura, la cual está definida por puntos de coordenadas. Pero este
material simplemente puede ser una textura que sale de partes de un
bitmap, grabado en formato .raw, .jpg, .bmp, etc.
#
# object Box01
#
v -500.0000 500.0000 -500.0000
v -500.0000 500.0000 500.0000
v 500.0000 500.0000 500.0000
v 500.0000 500.0000 -500.0000
v -500.0000 -500.0000 -500.0000
v 500.0000 -500.0000 -500.0000
v 500.0000 -500.0000 500.0000
v -500.0000 -500.0000 500.0000
# 8 vertices
g Box01
f123
f341
f567
f785
f146
f651
f437
f764
f328
f873
f215
252
f582
# 12 faces
Normal
1 4
2 Cara
3
Cara
5 6
8 Vértice
7
OFF
8 12 0
-500 500 -500
-500 500 500
500 500 500
500 500 -500
-500 -500 -500
500 -500 -500
500 -500 500
-500 -500 500
3210
3032
3654
3476
3530
3045
3623
253
Simulación Virtual Interactiva
.
3356
3712
3267
3401
3174
254
Face 5: A:5 B:4 C:0 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 6: A:3 B:2 C:6 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 7: A:6 B:5 C:3 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 8: A:2 B:1 C:7 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 9: A:7 B:6 C:2 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 10: A:1 B:0 C:4 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 11: A:4 B:7 C:1 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Otro formato que permite hacer estas lecturas desde el disco, pero con
cierta complejidad para su programación es el formato (.3ds). La
estructura no lineal y jerárquica de este formato está organizada por
medio de bloques denominados “chunks”. Un chunk está compuesto
por tres campos:
255
Simulación Virtual Interactiva
.
Main chunk 0X4D4D
3d editor chunk 0X3D3D
Object block 0X4000
Triangular mesh 0X4100
Vertices list 0X4110
Faces description 0X4120
Faces material 0X4130
Mapping coordinates list 0X4140
Smoothing group list 0X4150
Local coordinates system 0X4160
Light 0X4600
Spotlight 0X4610
Camera 0X4700
Material block 0XAFFF
Material name 0XA000
Ambient color 0XA010
Diffuse color 0XA020
Specular color 0XA030
Texture map 1 0XA200
Bump map 0XA230
Reflection map 0XA220
[sub chunks for each map]
Mapping filename 0XA300
Mapping parameters 0XA351
Keyframer chunk 0XB000
Mesh information block 0XB002
Spot light information block 0XB007
Frames (start and end) 0XB008
Object name 0XB010
Object pivot point 0XB013
Position track 0XB020
Rotation track 0XB021
Scale track 0XB022
Hierarchy position 0XB030
256
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
char Carga_3DS (obj_type_ptr p_object, char *p_filename)
{
int i;
FILE *l_file;
unsigned short l_chunk_id;
unsigned int l_chunk_length;
unsigned char l_char;
unsigned short l_qty;
unsigned short l_face_flags;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
switch (l_chunk_id)
{
case 0x4d4d:
break;
case 0x3d3d:
break;
case 0x4100:
break;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case 0x4110: //vértices
fread (&l_qty, sizeof (unsigned short), 1, l_file);
257
Simulación Virtual Interactiva
.
p_object->vertices_qty = l_qty;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case 0x4140: // Coordenadas de texturas
fread (&l_qty, sizeof (unsigned short), 1, l_file);
for (i=0; i<l_qty; i++)
{
fread (&p_object->mapcoord[i].u, sizeof (float), 1, l_file);
fread (&p_object->mapcoord[i].v, sizeof (float), 1, l_file);
}
break;
default:
fseek(l_file, l_chunk_length-6, SEEK_CUR);
}
}
fclose (l_file); // Cierra el archivo
return (1);
}
258
Si es un archivo independiente a algún formato, entonces, con el fin de
estructurar al contenedor que debe tener el archivo para almacenar el
modelo, los puntos de éste se deben tratar como matrices de datos. Se
pueden almacenar los vértices, normales y coordenadas de textura en
una matriz con base en la siguiente estructura:
259
Simulación Virtual Interactiva
.
datos a cargar ocupan un espacio en memoria por lo que se debe
contabilizar y dimensionar de forma precisa los vértices y caras del
objeto, así como los puntos de coordenadas de textura y en algunos
casos los valores de las normales.
#include <GL/glut.h>
#include <stdlib.h>
float angle;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void init(void)
{
glEnable (GL_DEPTH_TEST );
glClearDepth (1.0);
glClearColor (0.0, 0.0, 0.0, 0.0);
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
260
gluPerspective (45, 1.0, 1.0, 50.0 );
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
glPushMatrix();
glTranslatef (0.0, 0.0, -10.0); //el cubo está a 10 unidades
glTranslatef (0.0, -2.0, 0.0); //y a 2 unidades hacia abajo
glRotatef (angle, 0.0f, 1.0f, 0.0f); //hace que el cubo gire
261
Simulación Virtual Interactiva
.
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glFlush ();
glutSwapBuffers ();
}
void idle_func (void)
{
angle=angle + 0.2;
if (angle>=360) angle=0;
glutPostRedisplay();
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode ( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
262
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutIdleFunc (idle_func);
glutMainLoop();
return 0;
}
263
Simulación Virtual Interactiva
.
5.3.1 Texturizado
264
La textura del fuselaje del A-37 es retocada en cualquier editor de
fotos, luego de haber sido dibujada vectorialmente para definir sus
distancias internas.
La teoría dice que cada par de coordenadas u,v, deben tener una
relación directa con las coordenadas x,y,z de cada vértice del modelo.
Pero esto debe hacerse de tal manera que se entienda que hay que
recubrir una porción de la geometría de la malla compuesta por varias
caras y una porción de textura en casi igual proporción y forma en la
textura.
265
Simulación Virtual Interactiva
.
Si la textura es de 1024 x 1024, los primero que se debe tener en
cuenta es que los valores de los píxeles están comprendidos entre 0 y
1023, para un total de 1024 píxeles.
266
Entonces, para OpenGL el valor de 1023 x 1023 (caso de imagen
cuadrada), es equivalente a 1.0 x 1.0. Así, se debe dividir la textura en
las porciones de píxeles que se necesiten y llevarlas al formato que
exige OpenGL.
1023 = 1.0
1023 = 1.0
A
B
G
v1 … v7
F
D C
E
u1 … u7
Figura 5.7 Porción de textura en la imagen con coordenadas u,v
267
Simulación Virtual Interactiva
.
vértices corresponde directamente con los puntos (A..G) de
coordenadas u,v en la textura.
(C)3Dium
268
(C)3Dium
Figura 5.9 Detalle del tablero de control del modelo del A-37B
269
Simulación Virtual Interactiva
.
Por supuesto que existen plug-ins integrados a los programas
modeladores de 3D que toman el mesh (y vértices), normales y
coordenadas de texturas e incluso el material o colores del modelo, los
cuales envían los modelos a un archivo como .3ds, .obj, . asc, .X, .wrl
y otros, que usted no tendrá que hacer todos estos cálculos y
programaciones, tal como se ha explicado anteriormente sino dibujar
el modelo en el editor correspondiente (3DsMax, Maya, Blender).
Sólo la experiencia le dirá qué es lo mejor y cuándo utilizar uno u otro
método para almacenar los datos.
270
Uno de los procesos más sencillos es el de cargar archivos (.raw)
desde la ubicación en discos.
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
float angle;
GLuint texture_id[1];
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void load_texture ( char *file_texture, int width, int height, int depth, GLenum
colour_type, GLenum filter_type )
{
GLubyte *raw_bitmap ;
FILE *filetx;
if ((filetx = fopen(file_texture, "rb"))==NULL)
271
Simulación Virtual Interactiva
.
{
printf("File Not Found : %s\n",file_texture);
exit (1);
}
raw_bitmap = (GLubyte *) malloc ( width * height * depth * ( sizeof ( GLubyte )));
if ( raw_bitmap == NULL )
{ printf ( "Cannot allocate memory for texture\n" );
fclose ( filetx );
exit ( 1 ); }
fread ( raw_bitmap , width * height * depth, 1 , filetx );
fclose ( filetx);
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter_type );
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter_type );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
gluBuild2DMipmaps ( GL_TEXTURE_2D, colour_type, width, height, colour_type,
GL_UNSIGNED_BYTE, raw_bitmap );
free ( raw_bitmap );
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void init(void)
{
glEnable (GL_DEPTH_TEST );
glClearDepth (1.0);
glClearColor (1.0, 1.0, 1.0, 0.0);
glGenTextures (2,texture_id);
glBindTexture (GL_TEXTURE_2D, texture_id[2]);
load_texture ( "textur1.raw", 512, 512, 3, GL_RGB, GL_LINEAR);
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective (45, 1.0, 1.0, 50.0 );
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
glPushMatrix();
glTranslatef (0.0, 0.0, -10.0); //el cubo está a 10 unidades
272
glTranslatef (0.0, -2.0, 0.0); //y a 2 unidades hacia abajo
glRotatef (angle, 0.0f, 1.0f, 0.0f); //hace que el cubo gire
glEnable (GL_TEXTURE_2D );
glBegin(GL_QUADS); //dibujar cubo
273
Simulación Virtual Interactiva
.
glDisable (GL_TEXTURE_2D );
glPopMatrix();
glFlush ();
glutSwapBuffers ();
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void idle_func (void)
{
angle=angle + 0.2;
if (angle>=360) angle=0;
glutPostRedisplay();
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode ( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutIdleFunc (idle_func);
glutMainLoop();
return 0;
}
274
5.5 Terreno
Un terreno por lo general es un tipo de objeto en malla como cualquier
otro modelo, es decir, compuesto de vértices, caras, polígonos,
texturas, etc., pero distribuidos de tal forma que los hace únicos en su
especie. Antes de diseñar un terreno, se debe tener una idea de cómo
un punto o una línea trazada de manera irregular afecta el
comportamiento de otro objeto que supuestamente está sobre el
modelo de tierra. En el numeral 3.3.8, se trató el aspecto básico de la
geometría de la colisión, lo cual permite entender que los objetos que
reposan en una superficie, además de tener un supuesto contacto,
obedecen a un proceso de colisión e incluso de respuesta. A diferencia
de la tela, el terreno es raramente sometido a variaciones de los puntos
que lo definen.
X
d
275
Simulación Virtual Interactiva
.
5.6 Simulación de la superficie del mar
Tal como una gran tela extendida en el espacio, una malla plana que
mantiene sus puntos equidistantes, bien sea formando triángulos o
rectángulos, puede ser sometida a una variación continuada de sus
vértices. Las ecuaciones de la trigonometría proporcionan los puntos
necesarios para que la malla represente el movimiento y las ondas que
por ejemplo suceden en el mar o en una superficie como ciertos
líquidos.
Los valores son tomados de las curvas que arroja la onda sin(), y
modificadas para que al ser combinadas con otras curvas de su misma
especie, generen entre sí una ola más uniforme y que pueda
combinarse con otras en un orden alterno.
276
0,3
0,2
0,1
0,0
-0,1
0 6 12
Figura 5.14 Modelo de 2 de 12 ondas senoidales utilizadas en la simulación
#define PI 3.14159265359
//-------------------------------------------------------------------------------------------------------------
void display(void)
{
// ESPACIO VIRTUAL
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glClearColor(0.9, 0.9, 0.9, 0.0);
glViewport(0,0,640-1,480-1);
277
Simulación Virtual Interactiva
.
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
aspect_r=640/480;
gluPerspective (80, aspect_r , 0.1, 5000.0 );
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
278
//-------------------------------------------------------------------------------------------------------------
void init(void)
{
glEnable (GL_DEPTH_TEST);
divi = 8;
vez = 4;
279
Simulación Virtual Interactiva
.
punto [3][6] = 0.195 ; punto [4][6] = 0.230 ; punto [5][6] = 0.265 ;
punto [3][7] = 0.185 ; punto [4][7] = 0.220 ; punto [5][7] = 0.255 ;
punto [3][8] = 0.155 ; punto [4][8] = 0.185 ; punto [5][8] = 0.215 ;
punto [3][9] = 0.105 ; punto [4][9] = 0.125 ; punto [5][9] = 0.145 ;
punto [3][10] = 0.050 ; punto [4][10] = 0.060 ; punto [5][10] = 0.070 ;
punto [3][11] = 0.009 ; punto [4][11] = 0.010 ; punto [5][11] = 0.011 ;
punto [3][12] = 0.010 ; punto [4][12] = 0.005 ; punto [5][12] = 0.000 ;
punto [3][13] = 0.035 ; punto [4][13] = 0.025 ; punto [5][13] = 0.015 ;
punto [3][14] = 0.075 ; punto [4][14] = 0.055 ; punto [5][14] = 0.035 ;
punto [3][15] = 0.135 ; punto [4][15] = 0.100 ; punto [5][15] = 0.065 ;
punto [3][16] = 0.195 ; punto [4][16] = 0.145 ; punto [5][16] = 0.095 ;
punto [3][17] = 0.235 ; punto [4][17] = 0.175 ; punto [5][17] = 0.115 ;
punto [3][18] = 0.240 ; punto [4][18] = 0.180 ; punto [5][18] = 0.120 ;
punto [3][19] = 0.235 ; punto [4][19] = 0.175 ; punto [5][19] = 0.115 ;
punto [3][20] = 0.195 ; punto [4][20] = 0.145 ; punto [5][20] = 0.095 ;
punto [3][21] = 0.120 ; punto [4][21] = 0.090 ; punto [5][21] = 0.060 ;
punto [3][22] = 0.040 ; punto [4][22] = 0.040 ; punto [5][22] = 0.025 ;
punto [3][23] = 0.000 ; punto [4][23] = 0.000 ; punto [5][23] = 0.000 ;
280
punto [6][21] = 0.030 ; punto [7][21] =-0.015 ; punto [8][21] =-0.032 ;
punto [6][22] = 0.015 ; punto [7][22] =-0.006 ; punto [8][22] =-0.020 ;
punto [6][23] = 0.000 ; punto [7][23] = 0.000 ; punto [8][23] = 0.000 ;
281
Simulación Virtual Interactiva
.
{
punto [pi][pj]= punto [pi-(24+pasa)][pj];
}
//-------------------------------------------------------------------------------------------------------------
void idle_func (void)
{
glutPostRedisplay ();
}
//-------------------------------------------------------------------------------------------------------------
void update(int value) //sincroniza con el tiempo
{
for (pi=0; pi<tam; pi++)
{
aux = punto [pi][0];
for (pj=0; pj<tam; pj++)
{
punto [pi][pj]=punto[pi][pj+1];
}
punto[pi][tam-1]=aux;
}
glutTimerFunc(100, update, 0);
glutPostRedisplay ();
}
//-------------------------------------------------------------------------------------------------------------
void keyboard ( unsigned char key, int m, int n )
{
switch (key)
{
case '+':
282
tide = tide + 2; //genera altura de olas
if (tide>=50) tide=50;
break;
case '-':
tide = tide - 2;
if (tide<=0) tide=0;
break;
//-------------------------------------------------------------------------------------------------------------
int main ( int argc, char** argv )
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize ( 640, 480);
glutCreateWindow ( "Waves" );
init();
glutTimerFunc(100, update, 0);
glutKeyboardFunc ( keyboard );
glutDisplayFunc ( display );
glutIdleFunc ( idle_func );
glutMainLoop ( );
return 0;
}
283
Simulación Virtual Interactiva
.
Cuando se presiona “+” en el teclado, se aumenta el valor de la altura
de las olas que va desde 0 a 50 unidades de 2 en 2. Al presionar “R”
minúscula, es posible rotar la escena para que se pueda apreciar el
comportamiento de las ondas en la dirección de la corriente por
defecto, lo cual se puede modificar con nuevas instrucciones de
rotación en el programa. Es posible cubrir la malla con una textura de
la imagen del océano o darle un color adecuado y trasparencia si se
prefiere.
284
Capítulo 6
Consolas y Controles
6.1 Introducción
285
Simulación Virtual Interactiva
.
int code;
GLuint texture_id[30];
char linea[30];
char texto[30];
char backword[30];
//--------------------------------------------------------------
void printx (GLfloat posx, GLfloat posy, GLfloat x1, GLfloat x2, GLfloat y1, GLfloat
y2)
{
glEnable (GL_TEXTURE_2D );
glPushMatrix();
glTranslatef (posx, posy, -1.1);
glBindTexture (GL_TEXTURE_2D, 7);
glScalef (0.29, 0.29,0.0);
glBegin(GL_QUADS);
glTexCoord2f (x1, y1); glVertex3f ( 0.0, 0.0, 0.0);
glTexCoord2f (x1, y2); glVertex3f ( 0.0, 0.160, 0.0);
glTexCoord2f (x2, y2); glVertex3f ( 0.078, 0.160, 0.0);
glTexCoord2f (x2, y1); glVertex3f ( 0.078, 0.0, 0.0);
glEnd();
glDisable (GL_TEXTURE_2D );
glPopMatrix ( );
}
//-------------------------------------------------------------
void print_string(GLfloat x, GLfloat y, char *string)
{
int len, i;
len = l;
for (i = 0; i < len; i++)
286
{
code = int( string[i]);
if (code==32) printx (i*0.0202+x, y, 0.00, 0.05, 0.0, 0.1);
if (code==33) printx (i*0.0202+x, y, 0.00, 0.05, 0.9, 1.0);
if (code==34) printx (i*0.0202+x, y, 0.05, 0.11, 0.9, 1.0);
287
Simulación Virtual Interactiva
.
if (code==74) printx (i*0.0202+x, y, 0.16, 0.21, 0.7, 0.8);
if (code==79) printx (i*0.0202+x, y, 0.42, 0.47, 0.7, 0.8);
if (code==82) printx (i*0.0202+x, y, 0.58, 0.63, 0.7, 0.8);
288
if (code==105) printx (i*0.0202+x, y, 0.79, 0.84, 0.6, 0.7);
if (code==106) printx (i*0.0202+x, y, 0.84, 0.89, 0.6, 0.7);
if (code==107) printx (i*0.0202+x, y, 0.89, 0.95, 0.6, 0.7);
if (code==108) printx (i*0.0202+x, y, 0.95, 1.00, 0.6, 0.7);
//-------------------------------------------------------------
289
Simulación Virtual Interactiva
.
//-------------------------------------------------------------
void keyboard (unsigned char key, int x, int y)
{
tecla=0;
switch (key) {
case ' ': code=32; strcat_s(linea," "); tecla=1; break;
case '!': code=33; strcat_s(linea,"!"); tecla=1;break;
case '"': code=34; strcat_s(linea,"\""); tecla=1;break;
case '#': code=35; strcat_s(linea,"#"); tecla=1;break;
case '$': code=36; strcat_s(linea,"$"); tecla=1;break;
case '%': code=37; strcat_s(linea,"%"); tecla=1;break;
case '&': code=38; strcat_s(linea,"&"); tecla=1;break;
case '\'': code=38; strcat_s(linea,"\\"); tecla=1;break;
case '(': code=40; strcat_s(linea,"("); tecla=1;break;
case ')': code=41; strcat_s(linea,")"); tecla=1;break;
case '*': code=42; strcat_s(linea,"*"); tecla=1;break;
290
case '~': code=126; strcat_s(linea,"~"); tecla=1;break;
case '0': code=48; strcat_s(linea,"0"); tecla=1;break;
case '1': code=49; strcat_s(linea,"1"); tecla=1;break;
case '2': code=50; strcat_s(linea,"2"); tecla=1;break;
case '3': code=51; strcat_s(linea,"3"); tecla=1;break;
case '4': code=52; strcat_s(linea,"4"); tecla=1;break;
case '5': code=53; strcat_s(linea,"5"); tecla=1;break;
case '6': code=54; strcat_s(linea,"6"); tecla=1;break;
case '7': code=55; strcat_s(linea,"7"); tecla=1;break;
case '8': code=56; strcat_s(linea,"8"); tecla=1;break;
case '9': code=57; strcat_s(linea,"9"); tecla=1;break;
291
Simulación Virtual Interactiva
.
case 'a': code=97; strcat_s(linea,"a"); tecla=1;break;
case 'b': code=98; strcat_s(linea,"b"); tecla=1;break;
case 'c': code=99; strcat_s(linea,"c"); tecla=1;break;
case 'd': code=100; strcat_s(linea,"d"); tecla=1;break;
case 'e': code=101; strcat_s(linea,"e"); tecla=1;break;
case 'f': code=102; strcat_s(linea,"f"); tecla=1;break;
case 'g': code=103; strcat_s(linea,"g"); tecla=1;break;
case 'h': code=104; strcat_s(linea,"h"); tecla=1;break;
case 'i': code=105; strcat_s(linea,"i"); tecla=1;break;
case 'j': code=106; strcat_s(linea,"j"); tecla=1;break;
case 'k': code=107; strcat_s(linea,"k"); tecla=1;break;
case 'l': code=108; strcat_s(linea,"l"); tecla=1;break;
case 'm': code=109; strcat_s(linea,"m"); tecla=1;break;
case 'n': code=110; strcat_s(linea,"n"); tecla=1;break;
case 'o': code=111; strcat_s(linea,"o"); tecla=1;break;
case 'p': code=112; strcat_s(linea,"p"); tecla=1;break;
case 'q': code=113; strcat_s(linea,"q"); tecla=1;break;
case 'r': code=114; strcat_s(linea,"r"); tecla=1;break;
case 's': code=115; strcat_s(linea,"s"); tecla=1;break;
case 't': code=116; strcat_s(linea,"t"); tecla=1;break;
case 'u': code=117; strcat_s(linea,"u"); tecla=1;break;
case 'v': code=118; strcat_s(linea,"v"); tecla=1;break;
case 'w': code=119; strcat_s(linea,"w"); tecla=1;break;
case 'x': code=120; strcat_s(linea,"x"); tecla=1;break;
case 'y': code=121; strcat_s(linea,"y"); tecla=1;break;
case 'z': code=122; strcat_s(linea,"z"); tecla=1;break;
case 'ñ': code=164; strcat_s(linea,"ñ"); tecla=1;break;
default:
break;
}
if (tecla==1) l=l+1;
if (tecla==2) l=l-1;
if (l<0) l=0;
if (code==13){
l=0;
strcpy_s(texto, linea);
292
strcpy_s(linea, "");
}
if (l>=29) {
l=0;
strcpy_s(texto, linea);
strcpy_s(linea, "");
}
if (code==8){
strncpy_s (backword, linea, l);
strncpy_s(linea, backword, 30);
linea[l] = '\0';
code=0;
}
}
Letras en Bold o Itálica pueden hacer que lo anterior varíe pero por lo
general para dispositivos digitales virtuales, es probable que con la
fuente Consola pueda desarrollar sus modelos u optar por algo más
sencillo como es la visualización por medio de LEDs de 7 segmentos.
293
Simulación Virtual Interactiva
.
294
Estos tipos de elementos de la interfaz gráfica del dispositivo
simulado normalmente se accionan con el puntero del mouse, cuando
al hacer click o arrastrar el puntero sobre ellos pueden hacer que
cambie la textura, roten, se enciendan, etc.
//-------------------------------------------------------------------------------------
void oneclick()
{
// TECLA01
295
Simulación Virtual Interactiva
.
a simular. La imaginación y la creatividad deben llevar a la creación
de modelos matemáticos que permitan interactuar con los dispositivos
virtuales y que no solamente se encuentran en el campo de la
Simulación Virtual Interactiva, sino de la automatización real
asistida por computador. El siguiente listado describe un modelo que
representa un botón, el cual, al ser pulsado, activa un mecanismo
compuesto de un par de engranajes a velocidad plena y velocidad
media respectivamente.
#include "stdafx.h"
#include<windows.h>
#include <GL/glut.h>
#include<iostream>
#include <stdlib.h>
296
GLUquadricObj *Cylinder;
GLUquadricObj *Disk;
//--------------------------------------------------------------------------------------------------------------
void interruptor (void)
{
glColor3f(0.6f, 0.6f, 0.6f); //panel del botón
glPushMatrix();
glBegin (GL_QUADS);
glVertex3f (-4.0, 3.0, -10);
glVertex3f (-1.0, 3.0, -10);
glVertex3f (-1.0, -3.0, -10);
glVertex3f (-4.0, -3.0, -10);
glEnd();
glPopMatrix();
//--------------------------------------------------------------------------------------------------------------
void motor(void) // Mecanismo compuesto por dos engranajes de diferentes radios
{
glColor3f(0.4f, 0.4f, 0.4f);
glTranslatef (6.4, 0.0, -10.0);
glPushMatrix();
glRotatef (angle1, 0.0, 0.0, 1.0);
Cylinder = gluNewQuadric();
gluCylinder(Cylinder, 2.5, 2.5, 1.5, 12, 1);
glPopMatrix();
297
Simulación Virtual Interactiva
.
glPushMatrix();
glTranslatef (5.0, -3.2, -10.0);
glRotatef (angle2, 0.0, 0.0, 1.0);
Cylinder = gluNewQuadric();
gluCylinder(Cylinder, 1.25, 1.25, 1.5, 12, 1);
glPopMatrix();
}
//--------------------------------------------------------------------------------------------------------------
void init()
{
glEnable(GL_DEPTH_TEST);
}
//--------------------------------------------------------------------------------------------------------------
void handleResize(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,(double)w/(double)h,1.0,100.0);
}
//--------------------------------------------------------------------------------------------------------------
void drawScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor (0.9, 0.9, 0.9, 0.0);
interruptor();
motor();
glutSwapBuffers();
glFlush();
}
//--------------------------------------------------------------------------------------------------------------
void update(int value)
298
{
if (pulsador==1) {
angle1 = angle1 + 10.0;
angle2 = angle2 + 20.0;
}
glutPostRedisplay();
glutTimerFunc(25,update,0);
}
//--------------------------------------------------------------------------------------------------------------
void mouse(int button, int state, int mx, int my)
{
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
moving = 1;
startx = mx;
starty = my;
}
if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) {
moving = 0;
}
//--------------------------------------------------------------------------------------------------------------
void motion(int mx, int my)
{
299
Simulación Virtual Interactiva
.
if (moving) {
startx = mx;
starty = my;
}
glutPostRedisplay();
}
//--------------------------------------------------------------------------------------------------------------
void handleKeypress(unsigned char key, int x, int y)
{
switch(key)
{
case ' ':
break;
case 27:
exit(0);
}
}
//--------------------------------------------------------------------------------------------------------------
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(640,480);
glutCreateWindow("Push");
init();
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(drawScene);
glutKeyboardFunc(handleKeypress);
glutReshapeFunc(handleResize);
glutTimerFunc(25,update,0);
glutMainLoop();
return 0;
}
300
6.4 Modelos interactivos
En algunos casos se tendrá que escribir códigos que involucren
ecuaciones para determinar coordenadas ubicando el puntero del
mouse. En el programa anterior se apreciaba como el puntero es
ubicado en un limitado sector de la pantalla, el cual está
correlacionado con el modelo virtual, en este caso un botón. Si la
lectura del puntero supera el límite inferior y no sobrepasa el límite
superior en píxeles, entonces se puede decir que hay reconocimiento
del puntero. Esta particularidad es hecha directamente por OpenGl, a
través de la función respectiva glutMouseFunc(mouse);
301
Simulación Virtual Interactiva
.
Figura 6.5 Modelo que permite rotar y trasladar un objeto a voluntad con el mouse.
//--------------------------------------------------------------------------------------------------------------
void dibujagrid(void) //dibuja el grid donde reposa el objeto
{
glColor3f(0.2, 0.2, 0.2);
glBegin(GL_LINES);
302
glVertex3f( -20, 0.0, 20); glVertex3f( 20, 0.0, 20);
glVertex3f( -20, 0.0, 10); glVertex3f( 20, 0.0, 10);
glVertex3f( -20, 0.0, 0); glVertex3f( 20, 0.0, 0);
glVertex3f( -20, 0.0, -10); glVertex3f( 20, 0.0, -10);
glVertex3f( -20, 0.0, -20); glVertex3f( 20, 0.0, -20);
glEnd();
//--------------------------------------------------------------------------------------------------------------
void dibujacilindro(void)
{
glPushMatrix();
glColor3f(0.8f, 0.1f, 0.1f);
glRotatef (-90.0, 1.0, 0.0, 0.0); //posición vertical
Cylinder = gluNewQuadric();
gluCylinder(Cylinder, 4.0, 4.0, 10.0, 18, 1);
glPopMatrix();
}
//--------------------------------------------------------------------------------------------------------------
void init()
{
glEnable(GL_DEPTH_TEST);
}
//--------------------------------------------------------------------------------------------------------------
void handleResize(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,(double)w/(double)h,1.0,1000.0);
303
Simulación Virtual Interactiva
.
}
//--------------------------------------------------------------------------------------------------------------
void drawScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor (1.0, 1.0, 1.0, 1.0);
glPushMatrix();
dibujacilindro(); //dibuja el cilindro
glutSwapBuffers();
glFlush();
}
void update(int value)
{
304
glutPostRedisplay();
glutTimerFunc(25,update,0);
}
//--------------------------------------------------------------------------------------------------------------
void mouse(int button, int state, int mx, int my)
{
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
moving = 1;
startx = mx;
starty = my;
}
if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) {
moving = 0;
}
}
startx = mx;
starty = my;
glutPostRedisplay();
}
}
//--------------------------------------------------------------------------------------------------------------
void handleKeypress(unsigned char key, int x, int y)
{
switch(key)
{
case 'r':
rota=1;
305
Simulación Virtual Interactiva
.
trasl=0;
break;
case 't':
rota=0;
trasl=1;
break;
case 'o':
glutSetCursor(GLUT_CURSOR_NONE);
break;
case 'p':
glutSetCursor(GLUT_CURSOR_LEFT_ARROW);
break;
case 27:
exit(0);
}
}
//--------------------------------------------------------------------------------------------------------------
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(640,480);
glutCreateWindow("TyR");
init();
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(drawScene);
glutKeyboardFunc(handleKeypress);
glutReshapeFunc(handleResize);
glutTimerFunc(25,update,0);
glutMainLoop();
return 0;
}
306
relación del mouse con el toque virtual del cilindro se aprecia mejor si
se desactiva el puntero (flecha) del mouse. Notará como la sensación
de estar manipulando el objeto con el mouse ya no recae sobre el
puntero, sino sobre el mismo objeto 3D. Los valores x,y del mouse se
relacionan con el plano (xz), lo cual se define en la funciones mouse y
motion del programa.
6.5 Controladores
Lejos del teclado, mouse (y del trackball) para introducir datos,
existen otros interesantes dispositivos de manipulación de objetos
virtuales. Un joystick (palanca de mandos), el steering wheel
(volante) y otros de su especie, permiten modificar el estado de un
objeto en el espacio, simplemente proporcionando un valor numérico
del ángulo o valores que corresponden a los ejes x, y, z estudiados
anteriormente. Estos dispositivos traen botones que pueden ser
programables.
307
Simulación Virtual Interactiva
.
En primera instancia se ha cambiado el valor de retorno de la cámara,
puesto que la rapidez con que puede moverse ahora el volante, amerita
una respuesta rápida de retorno de cámara.
if (k!=0){
if (dcar<0) dcar=dcar + 0.08 ; //regresa cámara
if (dcar>0) dcar=dcar - 0.08 ;
}
if (k!=0){
//if (d>0) d=d+(-0.15*k); //retorna dirección timón (no necesaria)
//if (d<0) d=d+(+0.15*k);
}
glutPostRedisplay ();
}
//--------------------------------------------------------------------------------------------
void update(int value)
{
if (d>5) d= 5; //dirección del auto
if (d>0.0) b = b + 1.0*d*k;
if (d<0.0) b = b + 1.0*d*k;
if (d<-5) d=-5;
if (d>0) idl=1;
if (d<0) idr=1;
idr=0;
idl=0;
308
x = x-sin(b*PI/180)*k; //funciones de velocidad en x,y
z = z-cos(b*PI/180)*k; //y trayectoria del vehículo
//--------------------------------------------------------------------------------------------
void joystick(unsigned int buttonMask, int x, int y, int z)
{
d = -x*5/1000; //único valor
}
//--------------------------------------------------------------------------------------------
int main ( int argc, char** argv )
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize ( 640, 480);
glutCreateWindow ( "V_Drive 1.0" );
init();
glutJoystickFunc(joystick, 10);
309
Simulación Virtual Interactiva
.
Obsérvese que los valores de giro a izquierda y derecha que eran
entregados al presionar “4” y “6” en el teclado, ahora se necesita
solamente un valor suministrado por el volante y se encuentra en el
rango de -1000 a 1000 entregado por x. Los modelos de joystick para
simuladores de vuelo, funcionan de igual forma, aprovechando el
valor de las coordenadas y,z, para un control total al rotar o
desplazarse en el espacio tridimensional.
310
J1
1
U1 VBUS
2 D+
C1 3 D-
X1 4 GND
C2
14
13
23
24
RB0 33
PIC18F4550 19 D0
+5V
R1
RB7 40 30 D7
1 R2
18
C3
PIC18F4550
311
Simulación Virtual Interactiva
.
Los PICs (Peripheral Interface Controller)s o microcontroladores
son dispositivos constituidos por diferentes circuitos internos que al
ser programados pueden cumplir diversas tareas, entre esas, la de
convertir datos de forma análoga a digital y viceversa. Además
pueden recoger datos a través de las entradas predispuestas con el fin
de procesarlos y entregarlos al medio que los requiera, interconectados
con multiplexores e incluso transmitir sin necesidad de cables
(wireless). En el mercado existen diferentes clases y capacidades de
PICs con los cuales es posible programar cualquier dispositivo para el
control de las simulaciones.
312
Entre los elementos electrónicos que se pueden conectar a un PIC
están los switches comunes para encendido o apagado, los cuales
solamente entregan un bit de información, los potenciómetros, los
cuales pueden graduarse según la resistencia que se requiera y
los encoders que permiten entregar la posición de rotación de un
dispositivo.
Entre los dispositivos más comunes para representar datos del espacio
virtual están los LCD, como se dijo, los cuales muestra información
relacionada con el software y la finalidad del simulador, los motores
paso-a-paso, los cuales pueden decirnos la posición o dirección de un
elemento y por supuesto los LEDs o diodos de luz los cuales se
activan o desactivan con un bit de información.
313
Simulación Virtual Interactiva
.
314
6.7 Tarjetas gráficas
23
Método para mejorar la calidad de texturas vista desde un ángulo con respecto al
ángulo de proyección de la textura sobre la superficie.
315
Simulación Virtual Interactiva
.
Depth Blur: efecto de difuminado o desenfoque adquirido por la
lejanía de un objeto.
Lens flare: imitación de los destellos producidos por las fuentes de luz
sobre las lentes de la cámara.
316
Figura 6.9 Modelo Cliente - Servidor
317
Simulación Virtual Interactiva
.
El procedimiento que debe seguir un programa cliente se inicia con la
apertura del socket, y como en el servidor, se hace por medio de la
función socket(). Se solicita conexión con el servidor por medio de la
función connect(), la cual quedará en stand by hasta que el servidor
acepte nuestra conexión o generar el error si no hay servidor. En este
paso entrega la dirección IP del servidor y el número de servicio que
se desea. Las funciones write() y read() permiten entregar y obtener
datos. Y finalmente el cierre de la conexión con la función close().
Bajo Windows se encuentran normalmente dos tipos de Sockets:
318
//CLIENTE UDP
// client.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
SOCKET SendSocket;
sockaddr_in RecvAddr;
int Puerto = 2345;
WSAStartup(MAKEWORD(2,2), &wsaData);
SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Puerto);
RecvAddr.sin_addr.s_addr = inet_addr(ip);
sendto(SendSocket,SendBuf,strlen(SendBuf)+1,0,(SOCKADDR *)
&RecvAddr,sizeof(RecvAddr));
WSACleanup();
return 0;
}
319
Simulación Virtual Interactiva
.
//SERVIDOR UDP
// Serv.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
320
6.9 Sonido
#include <windows.h>
case 'e':
PlaySound(TEXT("Bmgearup.wav"),NULL, SND_LOOP | SND_ASYNC);
u=1;
break;
case 'g':
PlaySound(TEXT("Bmgearup.wav"),NULL, SND_LOOP | SND_ASYNC);
u=0;
break;
321
Simulación Virtual Interactiva
.
Los sonidos se ejecutan una vez se cumple una condición, por lo que
al cargar el respectivo sonido, se debe buscar una opción para que la
reproducción del mismo no sea repetitiva, a menos que así se desee.
if (e==12 || e==6)
PlaySound(TEXT("Bmgearup.wav"),NULL, SND_LOOP | SND_ASYNC);
322
Capítulo 7
Métodos numéricos
7.1 Introducción
Los métodos numéricos son técnicas que permiten formular de manera
aproximada la solución de problemas matemáticos realizando cálculos
y operaciones algebraicas de manera lógica y sencilla. Las leyes de la
física se expresan normalmente en forma de ecuaciones diferenciales,
las cuales relacionan una variable con sus derivadas respecto a alguna
otra variable y en este caso, con el tiempo. Las ecuaciones del
movimiento de los cuerpos, acorde a la II ley de Newton, son
ecuaciones diferenciales de segundo orden.
F=ma
323
Simulación Virtual Interactiva
.
redondeo en las cifras. Por ejemplo, el procedimiento normal
matemático para obtener las ecuaciones del movimiento en caída libre
es:
F = ma
mg = ma
mg = m dv/dt
dv = g dt
Integrando:
∫dv = g∫dt
v = gt + C
Si C = vo = 0
dx/dt = gt + vo
x = xo + vot + ½gt2
324
7.2 Método de Euler
En varios ejemplos presentados anteriormente se buscaba determinar
la velocidad en función del tiempo de un objeto que se mueve bajo la
acción de una fuerza F conocida. En un tiempo inicial t0 su velocidad
es v0.
a = dv/dt = F/m
cuya condición inicial es:
v(t0) = v0
a = F/m
vn+1 = vn + a dt
xn+1 = xn + vn+1 dt
325
Simulación Virtual Interactiva
.
7.3 Método de Taylor
En este método, el valor numérico aproximado está basado en la
aplicación del teorema de Taylor24 en cada intervalo (tk, tk+1), de
forma que el paso del método de orden N sería:
k1 = f(tn, yn)
k3 = f(tn+h/2, yn+h/2k2)
k4 = f(tn + h, yn + hk3)
326
Promediando la pendiente entonces:
327
Simulación Virtual Interactiva
.
h=(tf-ti)/n;
t[0]=ti;
y[0]=yi;
for (i=0; i<n; i++)
{
k1=h*f(t[i], y[i]);
k2=h*f(t[i]+h/2.0, y[i]+k1/2.0);
k3=h*f(t[i]+h/2.0, y[i]+k2/2.0);
k4=h*f(t[i]+h, y[i]+k3);
void init(void)
{
RK4(0.0, 5.0, 0.0, MAX);
}
init ();
328
t v a h H
0 0 0,00 0,00 20,00
0,01 0,01225 0,00 0,00 20,00
0,03 0,110244 0,00 0,00 20,00
0,05 0,306126 0,03 0,02 19,97
0,07 0,599317 0,10 0,04 19,90
0,09 0,988051 0,25 0,09 19,75
0,11 1,468341 0,53 0,16 19,46
0,13 2,032754 1,00 0,27 18,98
0,15 2,669224 1,73 0,42 18,21
0,17 3,360262 2,78 0,61 17,09
0,19 4,083015 4,23 0,85 15,52
0,21 4,810552 6,13 1,15 13,38
0,23 5,514433 8,54 1,49 10,57
0,25 6,168159 11,48 1,90 6,98
0,27 6,750622 14,99 2,37 2,48
0,29 7,248562 19,05 2,90 -3,05
0,31 7,657381 23,66 3,51 -9,75
0,33 7,980246 28,80 4,20 -17,80
0,35 8,226015 34,44 4,99 -27,37
0,37 8,406732 40,55 5,89 -38,68
0,39 8,535371 47,10 6,91 -51,97
0,41 8,624189 54,07 8,08 -67,53
0,43 8,683772 61,44 9,41 -85,67
0,45 8,722661 69,19 10,93 -106,75
0,47 8,747383 77,32 12,65 -131,16
0,49 8,762704 85,82 14,60 -159,35
0,51 8,771965 94,68 16,79 -191,80
0,53 8,777428 103,89 19,24 -229,02
0,55 8,780573 113,46 21,99 -271,59
0,57 8,782342 123,38 25,05 -320,12
0,59 8,783314 133,66 28,45 -375,27
0,61 8,783834 144,29 32,20 -437,75
0,63 8,784107 155,27 36,35 -508,32
0,65 8,784247 166,60 40,90 -587,80
0,67 8,784317 178,28 45,90 -677,05
0,69 8,784351 190,32 51,37 -776,99
0,71 8,784367 202,70 57,33 -888,60
0,73 8,784375 215,44 63,82 -1012,92
0,75 8,784379 228,53 70,86 -1151,05
0,77 8,78438 241,97 78,50 -1304,15
0,79 8,784381 255,76 86,75 -1473,45
0,8 8,784381 262,79 91,12 -1564,57
329
Simulación Virtual Interactiva
.
<página en blanco>
330
Anexo A
Resumen de magnitudes y unidades
Aceleración angular α rad/s2
Aceleración lineal a m/s2
Densidad ρ kg/m3
Fuerza F N
Impulso angular J kg m2/s
Longitud l m
Masa m kg
Momento (Torque) M Nm
Momento angular L kg m2 rad/s
Momento de Inercia I kg/m2
Presión P N/m2
Tiempo t s
Velocidad angular ω rad/s
Velocidad lineal v m/s
Viscosidad cinemática υ m2/s
Viscosidad dinámica κ N s/m2
Alfabeto griego
Αα Alfa Ηη Iota Ρξ Ro
Ββ Beta Κθ Kapa ζ Sigma
Γγ Gama Λι Lambda Ση Tau
Γδ Delta Μκ Mi Τυ Ipsilon
Δε Epsilon Νλ Ni Φϕ Fi
Εδ Zeta Ξμ Xi Υχ Yi
Ζε Eta Ον Omicron Φθ Psi
Θζ Theta Ππ Pi Χω Omega
331
Simulación Virtual Interactiva
.
<página en blanco>
332
Anexo B
Momento de inercia de algunas figuras
y
y
2 2 2
Iy = 1/12mL Ix = m/6(b + c )
L 2 a 2 2
Iz = 1/12mL x Iy = m/6(3a + c )
z z 2 2
x Iz = m/6(3a + b )
y
c y
b 2
2 2 Ix = 1/2ma
Ix = 1/12m(b +c ) a 2 2
z x Iy = 1/12m(3a + L )
2
Iy = 1/12mc 2 2
z x Iz = 1/12m(3a + L )
2
Iz = 1/12mb
y
c a y
z h
2
b 2 2
a Ix = 3/10ma
Ix = 1/12m(b +c ) x 2 2
2 2 Iy = 3/5m(1/4a + h )
z x Iy = 1/12m(c +a ) 2 2
2 2 Iz = 3/5m(1/4a + h )
Iz = 1/12m(a +b )
y
y
2
2 a Ix = 2/5ma
Ix = 1/2mr
z x
2
2 z x Iy = 2/5ma
Iy = 1/4mr
2
2
Iz = 1/4mr Iz = 2/5ma
y
y
2 2 2
Iy = mr Ix = 5/8m(r + 1/2R )
z x 2 2
2 2 z x Iy = m(3/4r + R )
Iy = 1/2mr +1/12r
2 2
2 2 Iz = 5/8m(r + 1/2R )
Iz = 1/2mr +1/12r
333
Simulación Virtual Interactiva
.
<página en blanco>
334
Bibliografía
Roger D. Smith , Interactive Simulation, © Copyright 2002-2003.
Roger D. Smith, Simulation, The Engine Behind The Real Word. Chief Scientist,
(1999) ModelBenders, LLC.
Jackie Neider (1994) The Red Book. Programming Guide. Silicon Graphics Inc.
335
Simulación Virtual Interactiva
.
Brian Beckham, Physics of Racing Series.
http://phors.locost7.info/
Resnick, R., Holliday, D. Física Vol. I, 4ta Edición, Ed. CECSA, México, 12006.
OpenGL.org
http://www.opengl.org
Gamasutra
http://www.gamasutra.com
GameDev.net
http://www.gamedev.net
Game Tutorials
http://www.gametutorials.com
NeHe Productions
http://nehe.gamedev.net
336
Acerca del Autor
e-mail: [email protected]
https://www.facebook.com/jaiuparella
Cartagena D.T. y C. – Colombia - S.A.
337
Simulación Virtual Interactiva
.
<página en blanco>
338
Índice
/
¿Qué pasa sí.. ?, 29 Bisección, 85
18F2x50, 310 Bitmap, 252, 263, 285, 286, 293
18F4x50, 310 Blender, 244
3DsMax, 60, 244, 251 Blutooth, 311
3Dstudio file (.3ds), 255, 270 Bmp file (.bmp), 252, 270, 285
6DOF, 75, 242 Boyancia, 203
Bytes, 255
A
A velocidad de acción, 82 C
Abstracción del modelo, 24 C++, 260
Aceleración, 25, 56, 61, 69, 87, 90, 91, 92, Caballo de fuerza, 146
93, 95, 98, 99, 105, 108, 109, 110, 111, 114, Caballo de vapor, 146
115, 116, 117, 118, 122, 126, 137, 138, 140, Caída de proyectiles, 103
142, 147, 161, 162, 163, 164, 181, 196, 197, Caída libre, 93, 94, 99, 103, 324
205, 211, 212, 213, 216, 218, 223, 224, 227, Cálculo vectorial, 70
232, 233, 236, 244, 245 Cambio en el tiempo, 72
Aceleración angular, 109, 114, 115, 116, Cambio en la velocidad, 69, 153, 182, 190
161, 162, 163, 212, 213, 218, 233 Campo gravitacional, 142
Aceleración angular instantánea, 114 Canales alfa, 270, 271
Aceleración angular media, 114, 115 Cantidad de movimiento, 165, 168, 176, 248
Aceleración centrípeta, 114, 115, 116, 140 Caracteres y fuentes, 285
Aceleración de la gravedad, 93, 205 Cara, 187, 188, 252, 253, 256, 259, 260,
Aceleración instantánea, 91, 98,110 265, 275
Aceleración media, 90, 91, 98, 110 Centro de gravedad, 76, 128, 130, 139, 152,
Aceleración normal, 118 153, 181, 214, 242, 244, 245, 284
Aceleración tangencial, 115, 117 Centro de masa, 152, 154, 172, 213, 214,
Actuadores, 209, 210 219, 244
Ambiente 3D, 22, 26, 37, 43, 59, 60, 61, 78 CG, 128, 153, 159, 183, 184, 186, 188, 219,
Ángulo de ataque, 204, 230, 233, 235, 243 234, 242, 243, 245
Ángulos de Euler, 74, 75, 77 Choques inelásticos, 170
Anisotropía, 315 Choques elásticos, 169
Antialiasing, 315 Chunk, 255
API (Application Programming Interface), Cilindro, 27, 57, 86, 155, 219, 284, 307
251, 321 Cinemática, 87, 88, 92, 109, 209,212, 245
Arquitectura cliente-servidor, 317 Cinemática de la partícula, 88
Arquitectura shader superescalable, 315 Cinemática del cuerpo rígido, 109
ASCII fie (.asc), 254 Cinemática directa, 209
ATI, 315 Cinemática inversa, 209
Atmósfera (atm), 202 Cinética, 25, 87, 211, 212, 213, 244
Avatar, 29 CMYK, 270, 271
Coeficiente de resistencia, 199, 203, 224,
B 246, 247
Backspace, 293 Coeficiente de restitución, 171, 172, 173
Base de datos, 25 Coeficiente de Rozamiento Cinético, 136
Bibliotecas gráficas, 76, 285 Coeficiente de Rozamiento Dinámico, 136
BIOS, 315 Coeficiente de Rozamiento Estático, 136
339
Simulación Virtual Interactiva
.
/
Coeficiente de sustentación, 204, 246 Disparo de partículas, 106
Colisiones, 51, 52, 90, 169, 171, 185, 188, Displays de 7 segmentos, 294
191, 196, 244 Distancia entre puntos, 54
Condición inicial, 73, 325 Drag / Lift, 203
Conservación de la energía, 151, 169, 205
Conservación del momento angular, 176 E
Conservación del momento lineal, 166, 168, Ecuación canónica, 41, 43
170, 173 Ecuación de Bernoulli, 205
Consolas, 285 Ecuación diferencial de segundo orden, 73,
Constante de amortiguación, 194 323, 327
Constante de estiramiento, 194 Ecuación diferencial ordinaria lineal, 323
Contacto de reposo, 84, 189 Ecuación diferencial ordinaria no lineal,
Controladores, 307, 310 323
Controles, 263, 264, 285, 311 Ecuación general de la recta, 41
Coordenadas cilíndricas, 58 Ecuaciones cinemáticas angulares, 109
Coordenadas esféricas, 58 Ecuaciones cinemáticas del movimiento, 92,
Coordenadas polares, 37,48, 49 138
Coordenadas u,v, 265, 268 Ecuaciones de Newton-Euler, 216
Coordenadas x,y,z, 245, 265 Ecuaciones de primer grado, 41
Coprocesador dedicado, 315 Ecuaciones del movimiento, 73, 100, 115,
Cosenos directores, 54, 55, 107 211, 235, 323, 324
CPU, 315 Ecuaciones diferenciales, 29, 70, 73, 99,
Cuentarrevoluciones análogo, 313 323, 324, 327
Cuerpo rígido, 69, 76, 87, 88, 109, 126, 127, Ecuaciones diferenciales cinemáticas, 99
128, 130, 137, 152, 154, 158, 159, 175, 183, Ecuaciones dinámicas del movimiento, 138
190, 213, 214, 215, 217, 219, 220, 222, 229, Ecuaciones Newton-Euler, 69
232, 241, 243, 244, 245 Ecuaciones paramétricas de la recta, 47
Curvas de segundo grado, 42 Ecuaciones paramétricas, 45, 46, 47
Efecto diente de sierra, 315
D Efecto dinámico, 122
Dead–reckoning, 20 Efecto estático, 122
Deformación, 122,151, 196 Efecto Fresnel, 316
Delta de t , 72, 78 Eje longitudinal, 236, 237, 238
Densidad, 152, 199, 201, 203, 204, 205, Eje polar, 49
206, 207, 208, 223, 224, 227, 246, 247 Eje transversal, 229
Depth Blur, 316 Elasticidad, 193, 197
Derivada, 70, 71, 72, 73, 88, 91, 188, 214, Electrónica digital, 310
323, 325, 326 Encoders, 310, 313
DES Sistemas de Eventos Discretos, 18 Energía cinética, 147, 148, 149, 151, 162,
Desarrollo de la cognición, 30 163, 169, 170, 177, 178, 192
Detección de colisiones, 51, 52, 90 Energía cinética de rotación, 162
Diferencial, 72, 249, 250 Energía potencial, 148, 149, 150, 151
Dinámica, 68, 87, 137, 179, 206, 245, 246 Energía potencial elástica, 150
Dinámica del cuerpo rígido, 69, 137 Energía potencial gravitacional, 148
Dinas, 138 Entidad, 17, 20, 21, 22, 25, 29
Diodos de luz, 313 Equilibrio, 87, 123, 125, 130, 133, 134, 168
Dirección IP, 316, 317, 318 Espacio dimensional, 33
DIS Simulación Distribuida Interactiva, 19 Estática, 15, 87, 122, 123, 185, 205, 206
/
340
Estática de la partícula, 123 Fuerza electromagnética, 123
Eventos discretos, 18, 19 Fuerza gravitacional, 122, 142, 148
Excel, 45, 49, 81, 216, 220 Fuerza neta, 86, 211, 237
Explosiones con partículas, 105 Fuerza normal, 123, 136, 185, 186, 202
Fuerza nuclear, 123
F Fuerzas aerodinámicas en la tela, 199
Filtrado de textura HDR, 315 Fuerzas conservativas, 150, 151
Fluido, 69, 158, 199, 201, 202, 203, 204, Fuerzas de rozamiento, 136, 226
205, 206, 207, 208, 223, 224, 226, 227, 245 Fuerzas disipativas, 150
Fluidos en reposo, 201 Fuerzas elásticas, 193
Flujo Laminar, 208 Fuerzas equivalentes, 126
Flujo Turbulento, 208 Función playsound, 321
Forma normal, 41 Funciones lineales, 46
Forma punto-intersección, 40 Funciones trigonométricas, 33, 34, 36, 37,
Forma punto-pendiente, 90 68
Formato (.gif), 270
Formato (.tga), 270 G
Fps frames per second, 82 General Simulation Program GSP, 19
Frecuencia del núcleo, 315 Generatriz, 57
Fricción, 68, 69, 150, 171, 172, 181, 184, Geometría analítica, 25, 29, 33, 51, 82, 187
185, 186, 191, 208, 227, 247 G-FORCE, 315
Fuente Consolas, 285 Gimbal Lock, 77
Fuerza 69, 84, 86, 122, 123, 125, 126, 127, GPU (Graphics Processing Unit), 315
128, 129, 130, 131, 132, 133, 134, 135, 136, Gráficas raster, 263
137, 138, 139, 140, 142, 143, 144, 145, 147, Gráfico XY (dispersión), 45, 49
148, 149, 150, 151, 152, 153, 159, 160, 161, GUI (Graphics User Interface), 263
163, 164, 165, 166, 168, 175, 176, 178, 180,
181, 184, 185, 186, 190, 193, 194, 195, 196, H
197, 198, 199, 201, 202, 203, 204, 205, 206, Haptic, 24
208, 211, 212, 213, 214, 216, 218, 220, 222, Heading, 241
223, 224, 226, 227, 229, 230, 231, 232, 234, Heartbeat, 20
236, 237, 241, 242, 243, 244, 245, 246, 247, Heave, 75
248, 249, 324, 325 HID (Human Interface Device), 311
Fuerza centrífuga, 140, 236 Host, 318
Fuerza centrípeta, 140
Fuerza de amortiguación, 194 I
Fuerza de contacto, 84, 123 I2C, 311, 313
Fuerza de Coriolis, 164 Identificador, 255
Fuerza de doblamiento, 199 Iluminación, 315
Fuerza de extensión, 198 Imagen virtual, 21, 301
Fuerza de flotación o empuje, 202 Ímpetu, 165
Fuerza de inclinación, 198 Impulsión, 165
Fuerza de resistencia, 124, 125, 199, 203, Impulso, 165, 166, 174, 176, 181, 182, 183,
204, 223, 227, 241, 246 184, 185, 186, 187, 190, 191, 192
Fuerza de rozamiento cinético, 136 Impulso angular, 174, 176, 181
Fuerza de rozamiento estático, 136 Impulso angular del torque, 176
Fuerza de sustentación, 204, 206, 232, 247 Impulso lineal, 176, 181, 187
Fuerza de tensión, 123 Inercia, 56, 75, 76, 86, 126, 138, 212, 213,
Fuerza elásticas, 193 214, 215, 229, 241
/
341
Simulación Virtual Interactiva
.
Inercia Lineal, 86 Matriz dimensionada, 74
Inercia rotacional, 86 Matriz inversa, 212, 214
Inteligencia Artificial AI, 19, 32 Matriz ortogonal, 74
Interacción, 203, 206, 244 Maya, 244
Interacciones, 33, 87, 122, 194 Mecánica, 27, 29, 69, 72, 87, 151, 169, 201,
Interacciones moleculares, 150, 194 229, 244, 245, 249, 308, 324
Interactividad, 23, 310, 311 Mecánica de fluidos, 201, 245
Interruptores, 294, 296 Mecánica de la partícula, 87
Investigación de Operaciones, 18, 19 Mecánica de los sistemas de partículas, 87
Mecánica del vuelo, 229, 324
J Mesh (malla), 251, 252, 253, 270
Jerarquía de objetos, 25 Método de Euler, 197, 248, 324, 325, 326,
John Von Neuman, 18 327
Joystick, 61, 307, 309 Método de Runge-Kutta, 73, 324, 326, 327
Jpg file (.jpg), 252, 270 Método de Taylor, 73, 324, 326
Métodos numéricos, 29, 73, 216, 323, 324
K Microcontroladores PIC, 26, 310, 312
Kilopondios, 138 Modelado 3D, 21, 25, 244
Modelado y Simulación, 20
L Modelo, 17, 18, 19, 20, 21, 22, 23, 24, 25,
Latitud, 36, 141 26, 30, 31, 32, 33, 42, 43, 45, 52, 59, 60, 70,
LCD, 285, 312, 313 71, 193, 194, 209, 212, 218, 222, 225, 227,
LEDs, 293, 294, 310, 313, 314 229, 230, 231, 233, 234, 242, 244, 245, 246,
Lens flare, 316 248, 249, 251, 252, 253, 254, 259, 263, 264,
Ley de Acción y Reacción, 165 265, 266, 268, 270, 271, 275, 276, 293, 296,
Ley de Hook, 194 301, 307, 310, 315, 317, 325
Ley de la Dinámica, 137 Modelos determinísticos, 20
Ley de la Gravitación Universal, 140 Modelos dinámicos, 20
Ley de la Inercia, 86, 126 Modelos estáticos, 20
Ley de los Cosenos, 37 Modelos estocásticos, 20
Ley de los Senos, 37 Modelos interactivos, 301
Ley de Poiseuille, 207 Modelos matemáticos, 20, 25, 31, 33, 296
Ley de Stokes, 208, 224 Momento angular, 159, 170, 174, 175, 176,
Leyes empíricas de Kepler, 140 177, 179, 190, 213, 214
Libras, 138, 249 Momento de inercia, 86, 153, 154, 157, 158,
Límites, 70,71, 89, 98, 114, 160 159, 161, 162, 176, 212, 213, 214, 216, 219,
Línea recta, 38, 39, 42, 46, 51, 86, 90, 92, 231, 233, 238, 243
123, 164 Momento del momento lineal, 175
Momento lineal, 165, 166, 167, 168, 170,
M 173, 174, 175, 176, 179, 181, 190, 196, 211,
Mapas de bits, 263 248
Masa, 56, 68, 69, 86, 87, 105, 122, 130, 132, Momento o torque, 127, 129, 233
137, 138, 140, 141, 142, 147, 148, 149, 152, Momento, 76, 86, 127, 128, 129, 130, 132,
153, 154, 155, 156, 157, 163, 166, 168, 169, 133, 135, 139, 152, 153, 154, 155, 156, 157,
172, 174, 175, 177, 179, 181, 190, 192, 196, 158, 159, 160, 161, 162, 165, 166, 167, 168,
201, 211, 212, 213, 214, 218, 219, 223, 224, 170, 173, 174, 175, 176, 177, 178, 179, 180,
229, 231, 234, 243, 244, 245, 248 181, 184, 186, 190, 196, 211, 212, 213, 214,
Masa gravitacional, 142 215, 216, 219, 220, 222, 229, 230, 231, 233,
Masa inercial, 142, 243 234, 237, 238, 242, 243, 246, 248, 249
342
Momentum, 165 Plano, 33, 35, 37, 38, 39, 45, 46, 48, 51, 52,
Motherboard, 315 53, 56, 60, 61, 70, 71, 76, 81, 82, 83, 84, 91,
Motion Blur, 315 96, 102, 107, 120, 139, 149, 157, 164, 174,
Motores paso-a-paso, 310, 313 175, 179, 186, 205, 234, 238, 241, 245, 275,
Mouse, 43, 45, 49, 295, 301, 307 276, 284, 307
Movimiento circular, 109, 179 Plug-ins, 270
Movimiento Circular Uniforme, 110 Polígonos, 275
Movimiento de partículas en 3D, 106 Posición angular, 36, 51, 109, 111, 112
Movimiento de proyectiles, 99, 101, 102 Potencia, 142, 146, 159, 161, 250
Movimiento de un satélite, 117 Potencia de rotación, 159, 161
Movimiento en el plano, 96 Potencia instantánea, 146
Movimiento en el plano en 3D, 61 Potencia media, 146
Movimiento Rectilíneo, 92, 99, 115, 119, Potencia y velocidad, 146
126, 161 Potenciómetros, 313
MRUA, Movimiento rectilíneo Precesión, 181
uniformemente acelerado, 91, 93, 99, 115 Presencia, 31, 32
Movimiento relativo, 119, 190, 245 Presión dinámica, 206, 247
Presión en un fluido, 201
N Presión estática, 205, 206
Newton, 68, 69, 73, 86, 99, 126, 132, 137, Principio de Arquímedes, 202
138, 140, 142, 143, 160, 165, 194, 197, 202, Problema directo, 29, 30
211, 216, 229, 245, 247, 323 Problema inverso, 29, 30, 43
Nivel de Transporte, 316 Protocolo de red IP, 316
Normal, vector, 41, 82, 83, 84, 173, 182, Protocolo de transporte, 316
186, 187, 188, 191, 199, 200, 204, 245, 284 Protocolos de comunicación, 316
Número de Reynolds, 207,208, 246 Pulsadores, 294, 296
Números directores, 53, 82
NVIDIA, 315 Q
Quaternions, 72, 74, 76, 77
O
Object file (.obj), 252, 270 R
Object file format (.off), 253 R,G,B y A, 263
Octante, 51 RAM (GDDR), 315
Ondas senoidales, 277 Rapidez, 110, 118, 174, 207, 308
OpenAL (Open Audio Library), 321 Raw file (.raw), 252, 271, 272
OpenGL, 74, 76, 233, 251, 259, 263, 267, Realidad Virtual Distribuida, 19
289, 301, 315, 321 Renderización, 263
Oscilador (cristal), 312, 314 Resistencia, 69, 86, 99, 124, 135, 138, 153,
185, 194, 196, 198, 199, 203, 204, 206, 213,
P 222, 224, 226, 227, 232, 235, 241, 243, 246,
Palancas, 135 247, 249, 310, 313
Paquete, 313, 318 Resistencia viscosa, 194
Pendiente, 34, 39, 40, 42, 46, 90, 92, 275, Resolución de colisión, 52
325, 326, 327 Resolución del tiempo, 72
PICs (Peripheral Interface Controller)s, Resolución, 45, 49, 50, 52, 72, 73, 84, 263
310, 312, 313 Resorte-amortiguador, 195, 196, 197, 198
Pitch, 75, 235 Respuesta de colisión, 84, 187
Píxel, 263, 266, 267, 268, 301, 315 Retroalimentación táctil, 23
Plano cartesiano, 38, 39, 48, 49 Revoluciones por minuto, 112
/
343
Simulación Virtual Interactiva
.
Rigging 3D, 210 Sombra, 315
Robótica, 27, 209 Sonido, 21, 24, 25, 321, 322
Roll, 75, 235, 236, 237 Stanislau Ulam, 19
Rotación, 61, 65, 66, 72, 74, 75, 76, 77, 78, Steering wheel, 24, 248, 307, 308
86, 87, 115, 152, 153, 154, 159, 161, 162, Superficie cilíndrica, 57
164, 176, 178, 179, 209, 212, 213, 214, 215, Superficie del mar, 276
217, 229, 236, 241, 243, 245, 250, 284, 301, Surge, 75
307, 309, 313 Sustentación, 69, 203, 204, 206, 232, 238,
Rotación del cuerpo rígido, 152, 217 243, 246, 247
Rpm, 112, 113, 114, 161, 249 Sway, 75
RS-232 (serial), 312 Switches, 313
S T
Self-Contained Entity Based, 20 Targa, 270
Serious Games, 17 Tarjeta gráfica, 315, 316
Shader, 315 TCP Protocolo de Control de Transmisión,
Simulación Analítica de Sistemas, 18 318
Simulación basada en la física, 69 TCP, Stream Socket, 318
Simulación Caótica, 20 Teclado, 45, 61, 63, 229, 284, 285, 289, 293,
Simulación Constructiva, 18 307, 310, 321
Simulación Continua, 19 Tensor de inercia, 158, 159, 192, 212, 214,
Simulación de Monte Carlo, 18 245
Simulación de Nivel Virtual, 18 Teorema de Steiner, 157
Simulación de tela, 194, 195 Teorema de Taylor, 326
Simulación Local, 29 Teorema del eje paralelo, 158, 159
Simulación Urbana, 28 Teoría del Juego, 29
Simulación Virtual del Combate, 19 Terna ordenada, 51
Simulación Virtual Interactiva, 17, 23, 24, Terreno, 28, 61, 275
26, 29, 52, 296, 310 Texto en 3D, 285
Simulación Virtual, 18, 19, 23, 31, 72, 76, Textura, 25, 251, 252, 254, 256, 259, 260,
78, 86, 195 264, 265, 266, 267, 268, 270, 275, 284, 286,
Sistema CAD/CAM, 27 293, 295, 315
Sistema CGS, 138, 166, 207 Tiempo de giro, 116
Sistema de coordenadas euclidianas, 75 Tiempo-real, 32, 78, 81, 82
Sistema de coordenadas, 36, 37, 38, 40, 48, Timón, 47, 248, 308
49, 51, 52, 54, 57, 75, 76, 159, 215 Toque virtual, 21, 23, 24, 52, 307
Sistema derecho, 51 Trabajo, 142, 143, 144, 145, 146, 147, 148,
Sistema fijo de coordenadas, 119 150, 151, 159, 160, 161, 163, 220, 249
Sistema fuerza par, 130 Trackball, 307
Sistema geo referencial, 36 Transformaciones, 72, 74, 76
Sistema inercial, 76 Traslación, 66, 76, 86, 87, 209, 211, 229,
Sistema MKS, 138, 166 245, 301, 307, 309
Sistema no inercial, 75
Sistema Técnico, 138, 143, 166 U
Sistema, 21 UDP Protocolo de Datagramas de Usuario,
Sistemas Expertos, 19 318
Sistemas inmersivos y no inmersivos, 23 Unidades MKS, 143, 146
Sistema referencial, 36,76 Unidades CGS, 143, 206
Socket, 316, 317, 318, 319, 320 USB 2.0, 311
344
UTM Unidad Técnica de Masa, 138
V
Vectores unitarios, 97
Velocidad angular, 86, 109, 112, 113, 114,
116, 117, 118, 119, 153, 159, 161, 163, 175,
176, 177, 178, 181, 186, 190, 212, 213, 214,
218, 220, 243
Velocidad angular de precesión, 181
Velocidad instantánea, 89, 91, 97
Velocidad media, 88, 89, 90, 97, 296
Velocidad relativa, 119, 120, 171, 173, 182,
184, 185, 186, 187, 188, 189, 191, 194, 195,
200, 204, 227, 245
Velocidad terminal, 208, 228, 328
Vértice, 187, 188, 191, 252, 253, 256, 259,
260, 265, 268, 270, 275, 276, 284, 315
Vida de la partícula, 105
Videojuegos, 229, 263, 315
Virtual Environment VE, 22
Viscosidad, 206, 207, 208, 224, 246
W
Wav file, 321, 322
W.R. Hamilton, 77
What if...?, 29
Win32, 321
Wireless, 312
World file (.wrl), 270
X
X file, (.X), 270
Y
Yaw, 75, 235, 241
345
Simulación Virtual Interactiva
.
<página en blanco>
346
347