Está en la página 1de 347

Portada

<página en blanco>
.

<página en blanco>
Jairo Uparella

3Dium
.

No está permitida la reproducción parcial o total de este libro, ni su


tratamiento informático, ni la transmisión de ninguna forma o por cualquier
medio, ya sea electrónico, fotocopia o cualquier otro sin el permiso de los
titulares del Copyright.

Simulación Virtual Interactiva


Jairo Uparella
ISBN 978-958-46-2899-2
juparella@yahoo.com
Copyright © 2013– Jairo Uparella – 3Dium
CARTAGENA – COLOMBIA 2013
Diagramación, diseño de carátula e ilustraciones de Jairo Uparella
Todos los derechos reservados
Contenido
Prefacio xi
Simulación basada en la física xiv

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

Capítulo 2 Modelos matemáticos

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 4 Ecuaciones del movimiento

4.1 Introducción 211


4.2 Cinética en tres dimensiones 212
4.2.1 Mecánica del vuelo 229
4.2.1.1 Movimiento alrededor del eje transversal 229
4.2.1.2 Movimiento alrededor del eje longitudinal 236
4.2.2 Cinética del auto 244

Capítulo 5 Escenario 3D

5.1 Introducción 251


5.2 El modelo como archivo en disco 251
5.3 Imágenes, bitmaps y texturas 263
5.3.1 Texturizado 264
5.4 La imagen en memoria 270
5.5 Terreno 275
5.6 Simulación de la superficie del mar 276

Capítulo 6 Consolas y Controles

6.1 Introducción 285


6.2 Caracteres y fuentes 285
6.3 Pulsadores, interruptores y LEDs 294
6.4 Modelos interactivos 301
6.5 Controladores 307
6.6 Electrónica digital 310
6.7 Tarjetas gráficas 315
6.8 Sockets, protocolos de comunicación 316

ix
Simulación Virtual Interactiva
.
6.9 Sonido 321

Capítulo 7 Métodos numéricos

7.1 Introducción 323


7.2 Método de Euler 325
7.3 Método de Taylor 326
7.4 Método de Runge-Kutta 326

Anexo A Resumen de magnitudes y unidades 331


Anexo B Momento de inercia de algunas figuras 333

Bibliografía 335
Acerca del Autor 337
Índice 339

x
Prefacio
“!No es un juego… es Simulación!” (David Carradine, AIRWOLF)

La simulación es un tema muy amplio como para recopilar todas sus


definiciones y conceptos en un solo libro, pero esta es una ayuda que
simplemente abre las posibilidades para introducirlo en este
espectacular mundo o afianzar lo que ya conoce. Tuve la oportunidad
de aprender muchos temas para el desarrollo de simuladores para
entrenamiento y ahora usted podrá utilizarlos para reproducir sus
propias ideas. Este tipo de simuladores, en palabras elementales se
refieren precisamente a lo que se conoce como simulador de vuelo,
carrera de autos, navegación, manejo y control de máquinas,
automatización y muchos más, cuyo aspecto primordial y común es el
ambiente tridimensional en el que se programan.

En el tiempo que pasé aprendiendo algunos conceptos de material


militar, entendí que existen al menos tres tipos de simulaciones. La
primera se ha denominado Live Rehearsal, un simulacro de guerra
que tiene lugar en la misma escuela militar, en una base o en un buque
de guerra. Es el tipo de simulación en el que se entrena gente en un
escenario real sin ningún equipo letal.

Otro tipo de simulación está representada por los Wargames "Juegos


de Guerra", que en el conocimiento formal de la ciencia se denomina
"Simulación Constructiva", los cuales tienen lugar en una región
virtual en el mundo, tal como un modelo de mapa a escala o maqueta
(mock-up). En este tipo de simulación se entrena gente real y
personas virtuales, también con equipos virtuales, esto último se
conoce como Computer Generated Entities.

El más alto tipo de simulación constructiva se derivó de la


"Simulación Estratégica Global", la cual puede tener lugar en todo el
escenario del mundo virtual. El otro tipo de simulación se refiere a
simuladores tácticos locales y se denomina "Simulación Virtual", en
la que se puede entrenar a personas reales con equipos y armas
virtuales.

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.

Por lo tanto, este no es un libro para expertos. No se tiene en


consideración escribir un libro para personas expertas en la simulación
desde hace muchos años y que tienen la práctica de producir
dispositivos para personas en formación, bajo ciertas normas que
provienen específicamente de las más grandes empresas establecidas
para tal efecto. No se escribió este libro tampoco para los estudiantes
exclusivamente. Mi única intención es poner en este libro ideas,
ejemplos y conceptos que he estudiado sobre Simulación basada en
la física, pero de manera más sencilla y explícitamente esas
características y funcionalidades que se refiere a la Simulación Virtual
en el que las personas pueden ser entrenadas en dispositivos
simulados. En este libro encontrará esas ideas sencillas que usted
necesita para desarrollar un simulador. No importa qué tipo de
simulador desea producir, pero es importante tener el conocimiento
adecuado del área de la ciencia que quiere ilustrar de manera virtual.
Esto es cierto desde el punto de vista en que un simulador puede
trabajar sin ningún problema técnico o computacional, pero no

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.

Ciertos temas se complementan con las referencias bibliográficas que


pueden dar al lector otro gran aporte en un tema, pues el tratado de
Simulación Virtual se extiende de tal manera y con respecto a su
campo de acción, que la diferencia entre crear una simulación de la
anatomía humana y un modelo de aviación está bien delimitada. La
finalidad del libro, en el cual se comparte lo que pudo ser un cuaderno
de tareas donde se agruparon conceptos de la simulación y que en la
actualidad reproducen un documento de gran valor, se verá
lógicamente reflejada en la contribución que ofrezca al lector. Está
estructurado de tal manera que puede seguirse secuencialmente o si
conoce el tema, de acuerdo con los capítulos en que se esté más
interesado. A pesar del apoyo dado por la Simulación Virtual en los
campos de la ciencia, el libro está muy lejos de la toma de decisiones,
método de Monte Carlo, investigación de operaciones y de algunos
otros temas que hacen parte de la definición general de la simulación.

En resumen este libro está dirigido a los aprendices, a profesionales y


programadores 3D de las múltiples áreas de la ciencia, incluso a un
gerente, director, rector, investigador, que pueda ver en él una
oportunidad para disminuir el coste en la formación de alumnos o
empleados. Además, se dirige al ingeniero que quiere ver sus ideas
moldeadas en un ambiente que permita a sus clientes entender los
servicios o productos que promueve.

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.

Simulación basada en la física

La palabra "Virtual" significa "casi", "irreal", "no físico" y se utiliza


para describir algo que existe pero es intocable, contrario a las cosas
reales que se pueden tocar por métodos convencionales. Pero también
se dice que un dispositivo virtual es un prototipo que tiene la función
de trabajar como el equipo real, pero que por definición no es su
propósito. El propósito válido de un dispositivo virtual es permitir a la
gente entrenarse o aprender como si fuera en el equipo real.

Aunque muchos libros dicen que es una manera de evitar daños en el


equipo real, es más que seguro de que su propósito es formar personas
por más tiempo en que lo hacen en el equipo real. La Realidad Virtual,
la simulación y materias como las matemáticas, la física y muchas
otras de las que usted puede tomar ventaja, pueden darle las
herramientas para construir el simulador correcto, ese que no se puede
encontrar en el mercado común.

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.

El primer tema a evocar es la física. Esta rama de la ciencia tiene las


ecuaciones para mover un cuerpo en el espacio 3D. La cinética, la
cinemática, la estática y la dinámica aplicadas en los cuerpos virtuales
permitirán entender el modelo real. Se debe ser capaz de poner ese
conocimiento en el mundo virtual con ayuda de la física a través de
lenguajes que pueden ensamblar las ecuaciones en líneas de la
computación. Normalmente cuando se falla en la creación de un
simulador, no es debido a las herramientas que se estén utilizando. Se
debe más que todo a los pocos conocimientos que se tenga de los
tópicos que se estén tratando de simular. No es nada fácil hacer un
simulador de vuelo cuando no se tiene idea de lo que es la fuerza de
resistencia o la sustentación. Así que si se tiene la buena intención de
desarrollar un simulador se debe empezar con tener el conocimiento
adecuado en física primero. La buena noticia es que no se tiene que
convertir en un físico-matemático para hacer simuladores. Además, si
se es bueno en hacer dibujos a mano, este es un gran talento a
explotar, porque entender el mundo a través del papel puede ayudarle
a hacer lo mismo en el mundo virtual, aunque no todas las personas
que saben cómo dibujar en papel encuentran fácil el aprender a dibujar
en computadoras.

Entonces, la primera herramienta que se debe aprender es OpenGL en


la que se puede desarrollar aplicaciones con gráficos en tiempo real.
Estas bibliotecas permiten crear mundos virtuales y modelos que más
tarde pueden ser utilizados en los simuladores o en un videojuego.
Bajo C++, OpenGL y sus extensiones permitirán que usted programe
el motor 3D correcto para aquellos modelos que necesite. OpenGL
GLUT Utility Toolkit, es una API (Application Programming

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.

OpenGL es fácil de aprender y se puede configurar en diferentes


plataformas en el contexto de Windows, con WIN32 o consola, MAC
OS X y Linux. Otros tipos de software que realmente se deben tener
en cuenta son los de foto edición, donde se puede preparar las texturas
para construir o revestir el aspecto del simulador o partes de él. La
aplicación de texturas es esencialmente el primer proceso que se debe
aprender a realizar. Para la creación de mallas, puede utilizar
3DsMax.

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é.

Jairo Uparella, Agosto de 2013

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.

1.2 Conceptos básicos de simulación


“Serious Games” o Juegos Serios, son “una prueba mental, de
acuerdo con unas reglas específicas, que usa la diversión como modo
de formación gubernamental o corporativo, con objetivos en el ámbito
de la educación, sanidad, política pública y comunicación
estratégica.” - Mike Zyda (Septiembre 2005)."De la Simulación
Visual a la Realidad Virtual a los juegos". IEEE Computer.

Por muchos años se ha mantenido un aparente desacuerdo de la


definición única de simulación. Hoy en día sigue aumentando sus
significados debido al crecimiento de los diferentes niveles o
categorías que presenta. Se puede asentar que así como la ingeniería
se basa en la capacidad creativa del hombre para diseñar o desarrollar
sistemas reales a favor de la humanidad, soportado por las diferentes

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.

La Simulación Virtual o de nivel Virtual no necesariamente debe


estar unida en experimentación al sistema real pues su finalidad es el
entrenamiento independiente. A continuación se esclarece entonces las
diferentes concepciones de la llamada simulación.

Lo que se denomina el método de la investigación de operaciones, y


que se considera uno de los paradigmas de la simulación constructiva,
se utilizó en el análisis de la incursión de submarinos alemanes en la
Bahía de Biscane y buscaba resolver el problema logístico de la
guerra nuclear. De aquí nacieron los Sistemas de Eventos Discretos
DES. Tal es el caso de la “Simulación de Monte Carlo”1 la cual hace
parte de la Simulación Analítica de Sistemas, que a su vez, es capaz
de producir simulaciones con similitud a las constructivas y permitir la
evaluación y análisis inmediato de eventos. Estas simulaciones no se
enfocan en el intercambio interactivo con gente durante su ejecución.
Se puede así, ejecutar un proceso más rápido o más lento que el
tiempo-real sin chocar adversamente con el factor humano. Las
simulaciones analíticas se utilizan para estudiar problemas como la
composición de la fuerza, la eficacia de las armas, y las ediciones de
la logística. Uno de los pioneros de la simulación fue John Von
Neuman (1903–1957), quien a finales de 1940 estaba convencido de
que al ejecutar repetitivamente un modelo, se recogerían datos
estadísticos y conductas resultantes del sistema real, basada en esos

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.

La Simulación de Eventos Discretos DES, se considera así, una de las


técnicas fundamentales que se utilizan para reducir el riesgo en los
procesos de toma de decisiones. El primer lenguaje DES específico
fue desarrollado a finales de los 50s por la General Electric (K.D.
Tocher – D.G. Owen) denominado General Simulation Program
GSP, creado para estudiar problemas de manufactura y fue publicado
en la Segunda Conferencia Internacional sobre Investigación de
Operaciones.

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.

La Simulación Distribuida Interactiva DIS, es un protocolo estándar


para la denominada Realidad Virtual Distribuida (IEEE 1278.1a).
DIS está enfocada a unir simulaciones de nivel virtual y se le conoce
como Simulación Virtual del Combate. La arquitectura de DIS no
cuenta con un servidor central, es decir, es totalmente descentralizada

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.

1.2.1 Modelado y Simulación

El término modelo también tiene su variada definición dentro del


contexto de la simulación. Inicialmente aparecen los “modelos
matemáticos”, con lo que los sociólogos podían experimentar en un
laboratorio como lo hacen los físicos. Un modelo también es un
“simulador” o una representación de un sistema. Por ejemplo, los
modelos estocásticos dan lugar a la técnica del análisis de Monte
Carlo. Junto a los modelos determinísticos, definen la simulación
caótica y los modelos dinámicos y estáticos3 tienen o no en cuenta el
factor tiempo. El modelado es el proceso de construcción de un
modelo.

Hoy en día se define también con el término “modelo” a aquellos


diseños tridimensionales4 que tienen una conducta propia o no dentro
del ambiente virtual. Un buque o barco puede ser controlado por la
intervención humana, luego se necesitan algunos “modelos
matemáticos” para que se puedan manipular a gusto los “modelos
tridimensionales” o “modelos geométricos”. Ahora, modelos como la
niebla, nubes y el estado del mar pueden estar sincronizados con el

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.

El término sistema se define como un conjunto de elementos


interrelacionados entre los que existe cierta cohesión y unidad de
propósito. En él se puede considerar un sistema de cómputo, el
sistema digestivo, la embotelladora de líquidos, el aeropuerto, el
sistema solar, entre otros.

Cuando se habla de entidad se refiere a su definición de colectividad,


es decir aquello que denota un conjunto de personas o cosas, por
ejemplo, el ejército o un avión.

Por su parte, el término fenómeno, se puede definir de dos formas:


Como una cosa o hecho que puede percibirse por los sentidos y como
una manifestación de una actividad que se produce en la naturaleza.
Ejemplo de esto es el “toque virtual”, los fenómenos atmosféricos y el
sonido.

Por último, el término proceso, el cual consiste en el desarrollo o las


fases sucesivas de un fenómeno. También se define como un método o
sistema adoptado para llegar a un determinado fin. Un modelo
entonces puede ser representado físicamente, matemáticamente o en
una forma lógica y visual a la que se puede llamar representación
virtual. Lo cierto es que en la práctica no todo modelo que se
represente virtualmente, se puede representar matemáticamente y
viceversa, pero uno complementa al otro. El término virtual se aplica
a aquello que tiene existencia aparente o potencial pero no real o

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.

El término virtual se aplica a los dispositivos o ambientes simulados


no al entrenamiento, el cual es real. Un radar virtual de navegación
físicamente construido, permite determinar la distancia a la que se
encuentra un objeto en el espacio 3D virtual en un programa de táctica
naval o maniobras de buques, tal como sucede en la realidad.

El término sintético se refiere al hecho de resumir en un ambiente los


aspectos de la realidad (método de sintetizar) aunque en la práctica se
mantiene el sinónimo de artificial. Un ejemplo es cuando se dice que
la simulación proporcionar una percepción de ciertos problemas donde
la evaluación matemática de un modelo no es posible, pero se puede
representar tridimensionalmente. Entonces se define así al ambiente
sintético. Semánticamente, síntesis es la operación inversa del
análisis.

Otro término que se ha venido utilizando muy reiteradamente es


ambiente, el cual se puede definir como el conjunto de circunstancias
físicas que rodean a un ser vivo y que influyen en su desarrollo.
Entonces, dentro de éste ambiente sintético se encuentran resumidos
los modelos que representan un sistema, entidades, fenómenos y
procesos. Se habla entonces de ambiente 3D o Virtual Environment
VE.

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.

El término que enfatiza y acompaña a la definición de Simulación


Virtual se refiere al concepto interactividad. No todos los
entrenamientos son interactivos, es decir, existen modelos y
simulaciones con los cuales no es posible extraer y/o compartir
sensaciones o comunicarnos en el tiempo. La interactividad significa
“con acción”, “por efecto”, “acción recíproca entre objetos, fuerzas o
funciones”. El toque virtual, consiste precisamente en poder sentir de
cierta forma un objeto que pertenece al mundo virtual sintético. En
una cirugía de corazón, se podría sentir el palpitar del mismo, con un
objeto que simule la sensación recibida – retroalimentación táctil. Tal
procedimiento se dice que es interactivo. Pero en otras palabras, se
busca compartir sensaciones y comunicarse en el ambiente virtual al
transcurrir el tiempo. Los sentidos son excitados o estimulados por
efectos que proceden del ambiente virtual, sea cual sea su naturaleza.
Un juego en la red entre varios jugadores se dice que es interactivo.
Estos son ejemplos de la Simulación Virtual Interactiva. Pero la
tendencia va más allá. Con la ayuda de la electrónica, es posible crear
sistemas que permitan interactuar y navegar en el ambiente virtual. La
Realidad Virtual, por lo tanto, proporciona los conocimientos y
tecnologías para el desarrollo de sistemas inmersivos y no inmersivos.
Para el propósito establecido, los sistemas son inmersivos porque
permiten estar directamente relacionados o interactuar a través de los
sentidos con un mundo virtual. Un guante o un casco, e incluso el
simulador de periscopio de un submarino o simulador de vuelo para el

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).

En resumen, la Realidad Virtual está enfocada a la creación de


interfaces de navegación (en el espacio 3D), visuales, táctiles y
auditivas (incluso olfativas). La simulación y la Realidad Virtual se
desarrollan en un medio de soportes recíprocos de combinación
natural la cual en ciertos aspectos una es complemento de la otra. Por
último se acentúa una vez más que la Simulación Virtual Interactiva
es para propósitos de entrenamiento.

1.2.2 Pasos para diseñar una Simulación Virtual


Interactiva

Para llegar a un completo sistema (hardware y software) desarrollado


bajo las tecnologías propias y agregadas de la Simulación Virtual
Interactiva, se deben seguir los siguientes pasos:

Abstracción del modelo – Cualquier sistema puede ser representado


en múltiples niveles de abstracción. El más natural y accesible es la
representación visual en 3D. Los modelos matemáticos son muy
abstractos y se tornan difíciles de representar en 3D, lo que los hace
menos accesibles a las personas y el entendimiento será mínimo.

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.

Jerarquía de objetos – Establece el orden jerárquico de los modelos,


definiendo el movimiento de general a especifico y grados de libertad
que se necesite, para cada objeto o conjunto de objetos.

Modelado 3D – Consiste precisamente en la creación de los modelos


en 3D, aplicándoles texturas de materiales diversos, para luego
ubicarlos en el ambiente virtual.

Aplicación de la física – Esto es, aplicar modelos matemáticos para


crear la conducta que tendrá cada modelo 3D acorde con su
especialidad. Hay que aclarar que no todos los modelos tienen un
comportamiento basado puramente en la física aunque ésta lo explique
mejor, por lo tanto debe aplicarse patrones de conductas en relación
con la finalidad y funcionamiento del modelo. La trigonometría
permite crear patrones de desplazamiento en relación con la velocidad
o aceleración del objeto. Así que, la aplicación de la trigonometría y
la geometría analítica de forma independiente permiten la recreación
de otros modelos matemáticos que afectan la conducta de los modelos
tanto como la física.

Animación – Con base en el concepto anterior, consiste en ejecutar


los modelos que permitan representar la cinética de cada uno, con el
fin de integrarlos en el ambiente con sus respectivos scripts o
estructuras de control por software. Estos scripts pueden ser remotos o
locales.

Establecimiento de Interface o Protocolo – Definir las reglas de


comunicación y sonido que tendrá el software con los sistemas
distribuidos, electrónicos u otros módulos en software o hardware que
transmiten información o procesan datos entre modelos del ambiente
3D.

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

Figura 1.1 Elementos de la Simulación Virtual Interactiva.

1.2.3 Propósitos de la Simulación Virtual


Interactiva

Una vez definida la Simulación Virtual Interactiva y establecer su


nivel en la simulación y sus fundamentos, es posible citar una
innumerable lista de propósitos que esta categoría proporciona. En
otras palabras, citar otros escenarios. Es inevitable mencionar dentro
de este campo al simulador de vuelo, al parecer el producto que
encabeza la lista y seguramente el más común de los sistemas
virtuales jamás creado. Precisamente es uno de los propósitos que se
tienen al construir modelos de vuelo ya que permiten el entrenamiento
en aviación. Pero hay una gran cantidad de productos que se pueden
tratar bajo esta categoría y no necesariamente deben ser tan extensos
como un simulador de vuelo. Se trata de crear prototipos que

26
reemplacen al real con el fin de proporcionar más tiempo de
entrenamiento a menor costo.

En una escuela de mecánica automotriz, usted tendría que por lo


menos tener una serie de piezas mecánicas, un motor y muchos otros
accesorios que conforman un auto. Además, debe invertir en la
gasolina que se necesita para explicar el funcionamiento del motor, si
es que ya esto es un lujo que no puede permitirse. Por otra parte, usted
dicta cursos y expide la licencia de conducción y otros documentos
necesarios para que su cliente pueda transitar por las carreteras. Un
sistema virtual interactivo, le puede ahorrar muchos de los elementos
que usted requiere para llevar un negocio de entrenamiento.
Virtualmente usted puede contar con un motor de cuatro o seis
cilindros, funcionando y sonando como el motor más afinado. Tendría
la posibilidad de desarmarlo y armarlo en menos de una hora. Con un
sistema electrónico completo, podría encender el auto y por sistemas
mecánico-virtuales, explicar el funcionamiento de la caja de embrague
y el sistema de frenos. Todo esto sin untarse las manos de grasa.
Virtualmente, puede tener la carretera y la ciudad con todos los
símbolos de tránsito, para que pueda exponerlos a su cliente. Su
alumno puede practicar más horas que si lo hiciera en un auto real.

En una escuela técnica o universidad, para la producción de piezas


metálicas, se hace una inversión en la adquisición de máquinas de
manufactura, ensamblado, troqueles, moldes o fresado. Un sistema
virtual puede generar estas piezas bajo el mismo esquema de
entrenamiento. El sistema funciona de la misma forma que el equipo
real, sólo que las piezas son vistas en la pantalla de un monitor o
impresas y no necesariamente se deba invertir en la creación de la
pieza real. Varios sistemas de estos darían un soporte educativo de
mayor capacidad. Otras herramientas virtuales pueden ser, el torno,
rectificadoras, mesa de cepillado, taladros o perforadoras y simulación
3D del proceso de mecanizado, que ofrecen un entrenamiento y
aplicabilidad a los interesados para que ellos puedan fácilmente operar
un sistema real. En otras palabras, un sistema CAD/CAM virtual. Se
debe comparar con el número de licencias y el costo de un producto
real. La robótica se considera que en su totalidad debe ser mecano-
electrónico. Un robot virtual, puede ser manipulado por los

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.

La academia de medicina se beneficia de un simulador virtual por el


hecho de permitir interactuar con un cuerpo virtual, el cual posee
todos y cada uno de los órganos que definen la anatomía humana. La
escuela de medicina puede permitir a sus estudiantes avanzar más
rápido en el conocimiento anatómico y práctica de la cirugía.

La geografía física es reproducida en ambientes virtuales,


reemplazando al mapa común, ofreciendo un aspecto real de ríos y
montañas al estudiante, con un sistema de información completo
manipulando coordenadas y midiendo distancias. Los planos
topográficos pueden ser ahora mejor estudiados comparando con un
ambiente virtual del terreno.

La construcción de edificaciones virtuales, permite al propietario


vender finca raíz de manera rápida, interactuando dentro de dicha
edificación. En un centro comercial virtual se puede orientar mejor a
la clientela a la hora de solicitar información relacionada con locales y
productos. La carpintería, plomería, instalaciones eléctricas son
aspectos que se pueden representar de manera virtual y algunas con
funcionamiento. Los lugares turísticos, la simulación urbana y
recorridos virtuales de espacios públicos y en general las maquetas
arquitectónicas (architectural walkthrough) también pueden ser
soportadas por esta categoría

La maquinaria minera y la agrícola pueden ser reproducidas


virtualmente para explicar a los interesados el funcionamiento real de
cada máquina y su propósito. Las minas, oleoductos y tuberías en
general, pueden ser trazados de manera virtual, compartiendo espacio
con el terreno o situación geográfica, que incluso puede operar con un
sistema real de orientación y seguimiento de dichas instalaciones. La
manipulación de válvulas, control de regadío y acueductos son ahora
mejor controlados con sistemas virtuales en caso de establecer una
interface con el sistema real.

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.

La Simulación Virtual Interactiva, está soportada además del diseño


3D y la tecnología de las computadoras por la electrónica, la
mecánica, las matemáticas, la física, la geometría analítica, la
trigonometría, los métodos numéricos, las ecuaciones diferenciales,
las comunicaciones, y muchas otras ciencias al igual que ofrece
soporte a muchas disciplinas. En esta categoría se puede dar un apoyo
importantísimo a los juegos de video, por su parecido estructural con
los productos desarrollados bajo este entorno. Si bien los juegos de
video se desarrollan bajo ciertas ecuaciones de la física y matemáticas,
están orientados al entretenimiento o en entrenamiento informal y por
lo tanto implica una metodología basado en la Teoría del Juego,
orientado a las estrategias de pensamiento y niveles a superar. Por lo
general la posición del Avatar (uno en el juego) y otros elementos se
ejecutan en una simulación local, pero puede interactuar en red con
otras entidades al nivel de simulación distribuida.

1.2.4 Ventajas y desventajas de la simulación

La primera y gran ventaja de la simulación y desde los puntos de vista


de la ciencia e ingeniería, es permitir responder a las preguntas What
if...? ¿Qué pasa sí.. ? lo que se define en la ciencia como, problema
directo y ¿Qué debo hacer para? lo que en la ingeniería se conoce
como problema inverso.

Estas dos preguntas encierran y responden al dilema de la simulación


para la evaluación y tratamiento de un proyecto permitiendo focalizar
de antemano la finalidad de para qué se está desarrollando un

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.

Un ejemplo puede ser la simulación de ¿qué pasaría si se derrama


combustible en un río? Cuando se trata de un problema inverso, la
simulación permite el entrenamiento, conociendo el fin pero no los
medios. Es decir, ¿qué se debe hacer para lograr un objetivo que ya se
conoce? Se conoce el objetivo, pero se va descubriendo cuál es la
mejor forma para llegar a ese objetivo. No todos los procedimientos
son iguales. Un ejemplo puede ser la tarea de extraer el vehículo o el
crudo que ha caído al río. Otras ventajas son:

Desarrollo de la cognición – Efecto de conocer. Permite comprender


el porqué de las cosas. La simulación reduce la incertidumbre y
estimula la percepción.

Entrenamiento constante – Posibilita el estudio de sistemas reales y


la capacitación de los operarios.

Toma de decisiones – Se refiere a la destreza adquirida para el análisis


inmediato de un procedimiento con el fin de emitir órdenes.

Detección de problemas – Permite detectar y diagnosticar problemas


con relación al aspecto simulado.

Evita desacuerdos – Permite el acuerdo y conformidad de aspectos


puntuales en la solución de un problema.

Ahorro monetario – Las simulaciones reducen los costos que implica


el entrenamiento en el modelo real.

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:

Resultados inapropiados – Quizá lo más peligroso de un producto de


simulación inadecuado son los resultados inapropiados que arroja,
sobre todo cuando se aprende a tomar decisiones sobre estos.

Altos costos – Las simulaciones mal planificadas, podrían demandar


altas inversiones y gastos de diseño e implementación. Saber invertir
en un producto de simulación es tanto como saber obtener beneficios
de la adquisición.

Competitividad desleal – Esto es, además de los altos costos, crear


productos funcionales con modelos matemáticos inadecuados. Los
programas de simulación también son otros aspectos susceptibles a la
corrupción.

1.2.5 El soporte de la Realidad Virtual

Como ya se ha podido establecer, la Simulación Virtual está


estrechamente relacionada con la Realidad Virtual. De hecho, la
Realidad Virtual es una metodología de simulación para la
construcción de mundos virtuales. Ahora es posible mirar el concepto
de la Realidad Virtual como la herramienta de soporte para la
elaboración de dispositivos para el entrenamiento en la especialidad
que se necesite. La Realidad Virtual se refiere simplemente a un
mundo generado por computador con el cual el usuario puede
interactuar, por lo tanto, se tiene la capacidad de modificarlo. Pero
apartándose un poco de la finalidad de entrenamiento lo cual interesa
prioritariamente en este libro, se debe visualizar cuál es la verdadera
tendencia de la Realidad Virtual. Poco se sabe de la denominada
“presencia” y de cómo medirla y es justamente este fenómeno el que
mantiene en constante crecimiento a la ciencia de la Realidad Virtual.

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:

- Respuesta a la analogía del "mundo compuesto de objetos",


obedeciendo a las reglas en su relación con la inteligencia artificial.

- Es dinámica y opera en tiempo-real.

- Permite la inmersión del usuario dentro del ambiente computarizado,


ofreciendo una experiencia interactiva y multisensorial.

- Requiere del principio de la incertidumbre.

- Se desarrolla bajo lenguaje gráfico tridimensional y la electrónica.

- Algunas variables responsables para definir la presencia son:

- Extensión de la información sensorial, la cual se percibe a través de


los sentidos, ojos, oídos, tacto. A mayor información sensorial,
conduce a un alto nivel de presencia.

- Control de la relación de sensores para el ambiente, lo que tiene que


ver con la habilidad del usuario de manipular o controlar sensores,
como la cámara, con la cual el usuario visualiza el ambiente, lo que
incrementa el nivel de presencia.

- Capacidad para modificar el ambiente físico, tal como abrir puertas,


o mover objetos lo que incrementa más el nivel de presencia.

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.

2.2 Aportes de la geometría analítica


La importancia de tratar estos fundamentos y los que siguen a este
capítulo, proporciona una idea independiente y anticipada de la física,
para tratar modelos en el espacio dimensional, 1D (gráfica), en el 2D
(plano) y 3D (espacio). El estudio de la geometría analítica muestra
una sencilla forma de cómo tratar y entender el comportamiento de un
modelo geométrico y sus interacciones con otros de su especie, de
igual forma muestra como es el aporte matemático y geométrico que
se debe tener presente para construir verdaderas simulaciones en el
nivel virtual. Por esto, de manera elemental, se describen las
ecuaciones y expresiones que se consideran indispensables antes de
introducirse al análisis de dichos fenómenos y la manipulación de
objetos en 3D.

2.2.1 Funciones trigonométricas

No existe una simulación o un modelo virtual que no involucre por lo


menos una función de la trigonometría. El auto que sigue una ruta
arbitraria y orientada por el usuario necesita básicamente de una

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.

Supóngase que usted se encuentra a 80 metros de un faro, el cual tiene


una altura de 20 metros. En este momento, se puede determinar cuál
es el ángulo θ que se forma desde sus pies hasta la punta máxima de la
altura del faro con respecto al piso.

h
a = 20m

θ
l = 80m

Figura 2.1 Descripción de las funciones trigonométricas.

Obsérvese que se trata de un triángulo rectángulo. La función


trigonométrica que permite obtener el ángulo denominado de
elevación, es la tangente, es decir, al realizar la división a/l. Se
escribe entonces:
tanθ = a / l

tanθ = 20 / 80

La tangente de ese ángulo es de ¼ ó de 0.25, pero esto sólo indica la


inclinación de la línea punteada, es decir, la pendiente, representada
generalmente por m. Aplicando en la calculadora (tan-1 1/4), θ = arc
tan 0.25, se tiene que θ es un ángulo de 14 grados.

m = tanθ = (senθ / cosθ )

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

Lo primero que se busca en un problema de esta índole, es


preguntarse, que pasa si la altura vale 0. Por ende, el ángulo vale 0. En
los programas de simulación, uno de los problemas típicos que se
presentan a la hora de programar, es controlar la división por 0, o la
tangente de ±90.

Si una pared es verticalmente construida, tratar con la tangente


supuestamente no es un problema, pero en el plano, en un programa
de orientación geográfica para buques o aviones, hay que hacer
muchos controles. Suponga que usted está en tierra a 80 metros de una
embarcación. Ésta se movió a su derecha 20 metros. ¿Cuál es el valor
de θ?, ¿Cómo representar esta información?, ¿Se puede decir que 14
grados, 2 minutos y 10 segundos?, ¿O simplemente 14.02 grados?

El formato de representación o expresión de valores está ligado al


propósito para lo cual se están utilizando. La simulación precisa que,
aunque estos dos valores sean iguales y la diferencia sea mínima, no
comparten la misma conducta para una u otra simulación. Este es un
ejemplo teórico sencillo, que en la práctica debe ser un proceso de
cuidado y representa un caso típico de problemas directos e inversos.
Una normal y posible pregunta que se debería hacer para empezar a
introducirse en los campos de los problemas directos, es ¿qué pasa
si...se empieza a caminar hacia el faro, a determinada velocidad?

Ahora, del famoso teorema de Pitágoras, se puede extraer que:

(a2 + l2) / h2 = 1

Reemplazando los valores de h, l y la hipotenusa, se tiene:

35
Simulación Virtual Interactiva
.
(202 + 802 ) / 82.62 = 0.9967 ≈ 1

Expresando de otro modo lo anterior:

a2 / h2 + l2 / h2 = 1
es decir,
sen2 θ + cos2 θ = 1

Aunque parecerían reflexiones muy simples, son las representaciones


matemáticas más utilizadas en la Simulación Virtual. Un aspecto
importante en el tratamiento de ángulos consiste en determinar
primero bajo qué sistema referencial se está operando. Un vehículo
guiado por girocompás o compás electrónico, puede ser similar a otro
guiado por GPS. Ambos se pueden orientar y llegar a un mismo
destino, pero la forma de hacerlo es diferente. Cuando se manejan
ángulos, se debe tener en cuenta dos aspectos: si el sistema son los
ejes de coordenadas x,y o es un sistema geo referencial (latitud,
longitud). Para la simulación del segundo, se necesita rotar el sistema
de coordenadas rectangulares xy que es el que ofrecen las
computadoras, en forma básica, con manejo de cuadrantes de 0 a 180
y –180. En otras palabras, el geo referencial, hay que programarlo y
va de 0 a 180 grados Este u Oeste y de 0 a 90 Norte o Sur, utilizados
por los vehículos orientados espacialmente. Y en palabras más
sencillas, la brújula marca 0 grados al Norte (hacia arriba) y en el
papel los 0 grados están sobre el eje x hacia la derecha.

Otro aspecto importante es que las computadoras definen las


funciones trigonométricas para todo valor en radianes, así que, cuando
se necesite trabajar en grados, se debe siempre realizar un proceso de
conversión. Partiendo de que 2π radianes corresponde a una vuelta
completa, es decir 360 grados, se tiene que:

1 rad = 180º / π

Recordando la definición, un ángulo es la distancia s recorrida de un


arco sobre el radio, medido en radianes. A este ángulo se le conoce
como posición angular.
θ=s/r

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

Esto es, a la hora de determinar la orientación de un vehículo


cualquiera en el plano o ambiente 3D, se debe expresar primero el
ángulo o dirección y posteriormente la ubicación x,y, tal como lo
describen las coordenadas polares, cilíndricas o esféricas. En las
ecuaciones con funciones trigonométricas se puede encontrar también
los denominados ángulos arbitrarios, es decir dado un punto P(a,b)
distanciado una magnitud r con respecto al origen del sistema de
coordenadas, la cual forma un ángulo θ, entonces se puede escribir:

sen θ = b/r cos θ = a/r tan θ = b/a

Conociendo dos lados de un triángulo y el ángulo que se forma en la


intersección de estos, es posible calcular el otro lado, utilizando la ley
de los cosenos. Si se sabe que el ángulo es de 14 grados y se conocen
las magnitudes de la hipotenusa y l, se puede calcular la longitud de a:

a2 = h2 + l2 – 2 h l cos θ

a = 19,98 ≈ 20

Si se tiene un triángulo plano cualquiera de lados a, b, c y de ángulos


α, β y ω, siempre y cuando α sea el ángulo opuesto al lado a, β lo sea
de b y ω lo sea de c, se consigue escribir la ley de los senos:

α / sen a = β / sen b = ω / sen c

37
Simulación Virtual Interactiva
.
2.2.2 Sistema de coordenadas. El plano cartesiano

El plano cartesiano se refiere al sistema de coordenadas rectangulares


con las mismas unidades en ambos ejes x e y. En él se colocan dos
puntos a cierta distancia. Como se están tratando estos aspectos bajo el
entorno 2D, los puntos se definen como P1 de coordenadas (x1,y1) y P2
de coordenadas x2,y2. Es posible obtener la distancia de estos dos
puntos, con la siguiente expresión:

d = sqrt((x2 -x1)2 + (y2 - y1)2)

donde sqrt, es la función abreviada de square root o raíz cuadrada. El


valor de d siempre será positivo, para un par de puntos ubicados en
cualquier cuadrante del plano cartesiano6. La línea que une estos dos
puntos se denomina segmento de recta. Por lo general, es el término
adecuado y preciso, pues la línea recta de por sí, es la que pasa por los
dos puntos establecidos.

P2 (x2,y2)
y

-x x

P1 (x1,y1)

-y

Figura 2.2 Distancia entre dos puntos del plano cartesiano.

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

Con base en la definición de la pendiente de una recta, se puede decir


que dos rectas son paralelas si tienen la misma pendiente, pero con
una salvedad y recordando que se hace referencia al plano cartesiano
(2D), es decir, se tratan estas rectas sobre un mismo plano. En 3D, dos
rectas pueden tener igual pendiente y no ser paralelas. Retomando los
dos puntos que definen el segmento de recta se tiene:

m = tan θ = (y2 - y1) / (x 2 - x1)

Una vez más, se verifica que x1 no sea igual a x2 evitando así la


división por cero. Definidas las pendientes de dos rectas, se determina
si son perpendiculares, comprobando con la siguiente expresión:

m2 = - 1/m1

De nuevo, siempre y cuando el primer segmento no tenga pendiente


igual a 0.

2.2.3 La línea recta

Ahora, si se tiene la ecuación x = 4, es una línea recta definida por


todos los puntos situados en una recta paralela al eje y, a la derecha de
éste. ¿Qué valor de pendiente tiene esta recta? Los controles por
software son una de las tareas más repetitivas del programador de
simulación.

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

Figura 2.3 Recta x = 4 en el sistema de coordenadas cartesianas.

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)

Una aclaración importante, es que la pendiente no sólo proporciona la


inclinación de una recta como es costumbre, sino la dirección que la
recta puede tener y que de alguna manera pasa por dos puntos.
Entonces, el ángulo indica de qué forma pasa o en qué dirección. La
tangente es la recta que toca un punto de una curva sin cortarla.

En la simulación de problemas de navegación (marítima o aérea), este


es uno de los aspectos más relevantes del trazo de rectas para el
manejo de itinerarios en las cartas o mapas topográficos. De la
anterior ecuación se puede deducir otra expresión que corta a uno de
los ejes en un punto. La forma punto-intersección de la recta, corta
específicamente en el punto (0,b) al eje y. Remplazando x1 = 0 y y1 =
b, en la ecuación anterior se tiene:

40
y =mx +b

Una inquietud que podría tener un programador de simulaciones es


que deba deducir o analizar ecuaciones para llevar a cabo el desarrollo
de un programa de simulación. No necesariamente se debe enfrascar
en la deducción de expresiones para conseguir tal fin. La simulación
tiene la ventaja de poder aplicar ecuaciónes de fácil despeje.

La ecuación general de la recta Ax+By+C=0, tiene su teoría


interesante para comprender el origen de estas ecuaciones de primer
grado y que de una u otra forma llega a las que ya se han visto. De la
ecuación se obtiene:

x = - C/A, de la forma en que x = 4

y = (-A/B) x – (C/B), de la forma en que y = mx + b

La forma normal de la ecuación de la recta proporciona la distancia


perpendicular p del origen hasta dicha recta. El ángulo se forma entre
esta perpendicular y el eje x positivo.

x cos θ + y sen θ = p

p
θ
x

Figura 2.4 Forma normal de la ecuación de la recta.

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

Figura 2.5 Distancia de un punto a una recta.

En ciertos casos es necesario determinar el ángulo ϕ que se forma


entre dos rectas que se cruzan. Esto se obtiene dependiendo de las
pendientes de cada una y el control que se haga con respecto a que el
producto de dichas pendientes no sea 1. La ecuación es:

tan ϕ = (m2 – m1) / (1 – m1m2)

2.2.4 Curvas de segundo grado

En simulación se puede construir un modelo que siga una trayectoria


diferente al de la línea recta. Una curva es otro de los patrones que
debe tratarse cuando de comportamiento o conducta de un modelo se
trata. Pero en algunos casos aportan distorsiones incontrolables. Por
ejemplo, siempre se ha dicho que una circunferencia es la gráfica de
todos los puntos que equidistan de otro punto llamado centro.

En algún momento en el desarrollo de modelos para la simulación se


necesita hacer un recorrido en forma tal que cumpla con los puntos de
una circunferencia. Existen patrones que se pueden construir basados
en la trigonometría, pero tener alternativas es una de las estrategias del
programador de simulación.

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.

Figura 2.6 Objetos que siguen una trayectoria en el ambiente 3D.

En un problema inverso, (cómo hacer para...) se desea saber en qué


punto quedó o se quiere dejar la manija para que cumpla un fin. La
ecuación de la circunferencia podría controlar cada punto.

El radio r de la rueda es fijo en todos los puntos y el centro del pivote


(h,k) está bien definido, pero la manija puede y debe estar en cualquier
coordenada (x,y) que cumpla con los dos requisitos anteriores. La
ecuación canónica de la circunferencia es:

(x – h)2 + (y – k)2 = r2

Por lo menos un mouse de computadora puede proporcionar de cierta


forma el movimiento de los puntos que se necesitan en x. Si el pivote
está en el origen (0,0), la ecuación se reduce a:

x2 + y2 = r2

donde y se debe despejar cuidadosamente:

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

Figura 2.7 Trayectoria del punto.

Aunque no es el más ortodoxo de los mecanismos virtuales, según la


gráfica, muestra qué sucedería si el valor de x2 supera al de r2. Por lo
tanto, se debe controlar el movimiento x del ratón, que no supere el
valor del radio. El valor de x se puede establecer en el rango de –10 a
10. Una forma de verificar el comportamiento de los datos es
llevándolos a Microsoft ExcelTM, donde incluso la gráfica en XY
(dispersión), puede dar una idea del comportamiento del modelo.

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.

Si los puntos que se introducen a la computadora por medio de


cualquier dispositivo (mouse o teclado) satisfacen las ecuaciones, esto
aproxima a una respuesta exacta y esperada del modelo. Estas
ecuaciones de por sí no cumplen la función de rotar o trasladar un
objeto pero si permiten controlar los rangos en que éste se mueve o
cumplir una condición.

La elipse sigue una trayectoria interesante y depende de dos puntos


fijos llamados focos (a y b). La supuesta condición que debe cumplir
un modelo para recorrer una trayectoria elíptica es la siguiente:

( x2 / a2 ) + ( y2 / b2 ) = 1

La parábola también tiene un comportamiento el cual describe una


curva que viene y va al infinito, pero se puede utilizar para ciertos
comportamientos como el de un proyectil explicado más adelante. La
ecuación básica de la parábola con a diferente de 0 es:

y2 = ax

2.2.5 Análisis de ecuaciones paramétricas

Una ecuación paramétrica es aquella que incluye además de las


variables x e y, a una cantidad que se denomina t. A esta cantidad, se
le conoce como parámetro. A cada valor de t le corresponde un par de
coordenadas x,y del plano. La gráfica de las ecuaciones paramétricas
es el conjunto de los puntos del plano(xy) que se obtienen cuando t
toma todos sus valores posibles, o también, las ecuaciones
paramétricas están definidas para la recta que se forma cuando t toma
ciertos valores.

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

donde a,b, xo y yo son números, no cero simultáneamente. Al sustituir


f(t) por x y a g(t) por y, se obtiene:

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

Estas ecuaciones se denominan, paramétricas de una recta en su


forma estándar. Ahora, si se toma el parámetro t, de tal manera que
represente el tiempo, se puede obtener una trayectoria para un
vehículo virtual, que además de desplazarse en ese tiempo describa
una serie de curvas a la hora de variar su dirección a través del ángulo
θ el cual representa el rumbo del vehículo.

No es de extrañarse por el hecho de que para formar una línea curva,


hay que generar muchas rectas diminutas, sobre todo si t es pequeño.
Además, es probable que se necesite amplificar el paso de x y y para
representarlo a mayor escala. En resumen, se coloca el vehículo
virtual en las coordenadas x,y y se orienta con ζ , el timón, cuyas
unidades están en radianes.

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.

En el espacio tridimensional la recta también está determinada por dos


puntos. Sean P0(x0,y0,z0), y P1(x1,y1,z1), dichos puntos. Si se denomina
t la constante de proporcionalidad, se obtiene la forma dos puntos de
las ecuaciones paramétricas de la recta:

x = xo + (x1 - x0 ) t
y = yo + (y1 - y0 ) t
z = zo + (z1 - z0 ) t

A continuación un caso vertical. Un proyectil tiene un movimiento


parecido con ciertas variaciones sobre todo en el eje y, lo cual debe
por lo menos formar una parábola. También se puede pensar en
aplicarle la constante de gravedad, velocidad inicial y ángulo de
disparo.
x = ( Vo cosθ )t

y = ( Vo senθ )t – gt2

Se tiene que el ángulo y la velocidad inicial son constantes, lo mismo


que g.

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

Si Vo senζ es 80, el instante que toque el suelo será cuando t = 8.16 s.

2.2.6 Coordenadas polares

Se había definido al plano cartesiano como un sistema de


coordenadas para asociar un par ordenado (a,b). Otra forma de
representar puntos en el plano es a través del sistema de coordenadas
polares, dicho punto se relaciona con respecto a la distancia al origen
y el ángulo o dirección a la que se encuentra.

90º

Y
P(3,π/6)

180º 0º P(xo,yo) =
360 º P(r,ζ)
r
R(2,-π/6) y
Q(-3,π/6) ζ
X
x
270º

Figura 2.9 Representación de puntos en el sistema de coordenadas polares.

Ahora se denota el punto p(r,ζ) el cual está relacionado con el sistema


cartesiano de la siguiente manera:

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.

Conociendo las coordenadas cartesianas, se determinan los valores de


r y ζ, con las siguientes expresiones:

r = ± sqrt (x2 + y2 )

tan θ = y / x

Al graficar la ecuación r = 2 cosθ en coordenadas polares, se obtiene


una circunferencia. Si se intenta graficar en Excel, esta ecuación con
un tipo de gráfico XY (dispersión), donde r permanece fijo en x y y
tiene los valores de 2cosζ aparentemente arroja una figura un tanto
diferente de una esperada circunferencia perfecta.

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.

Otra gráfica sugestiva es x contra cos x, muy utilizada en movimientos


ondulatorios. Observe la resolución7 de x, la cual va de 0 a 2π. La
gráfica cos x vs sen x proporciona los puntos que permitirían a la
manija del ejemplo, ubicarse en un punto que deseemos, por ejemplo,
para un x del mouse que va de 0 a 2π.

El radio de la circunferencia descrita tiene valor de 1. En este ejemplo,


es necesario analizar que se está utilizando un rango de valores
relacionados con la ubicación de la manija (Fig. 2.6) y que permiten
sincronizar con otros objetos un movimiento rotacional esperado.

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

Figura 2.10 Resolución de la circunferencia formada por puntos independientes.

Una forma diferente de tratar el comportamiento de la manija se


consigue simplemente introduciendo el valor de la posición angular o

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.

Si se desea modificar el radio, entonces utilice las ecuaciones y la


gráfica de rcos x contra rsen x.

2.2.7 Geometría analítica del espacio

A partir de aquí se hace introducción en el mundo tridimensional


desde el punto de vista de la geometría analítica. Ahora se trabaja con
un eje más, formando un sistema de coordenadas tridimensional.
Cualquier punto que hace parte de este sistema está conformado por
una terna ordenada x,y,z. Esto es, los puntos tienen coordenadas
xo,yo,zo. Este sistema de coordenadas determinan 3 planos (xy,xz,yz)
los cuales dividen el sistema en 8 partes llamados octantes. Cuando
los ejes x,y,z son todos positivos entonces se dice que se trabaja en el
primer octante.

2.2.8 El plano

Uno de los aspectos más utilizados en el desarrollo de simulaciones


bajo la geometría analítica es el comportamiento del plano para la
detección de colisiones. De hecho, controlando la distancia del punto
a la recta, como se vio anteriormente, se proporciona una solución a la
denominada detección de colisión.

En el tratado de la línea recta se vio que x = 4, una línea paralela al


eje que contenía todos los puntos que la conforman. La diferencia en
el sistema tridimensional es que x = 4, es un plano que corta al eje x
en ese punto y es paralelo al plano (yz), como se aprecia en la
siguiente figura. En otras palabras, el plano x = 4, pasa por el punto
(4, 0, 0).

51
Simulación Virtual Interactiva
.
Y

Z X

Figura 2.11 Plano x = 4 en el sistema de coordenadas


cartesianas o rectangulares.

Si se tiene un punto cualquiera, que esté al lado derecho del plano x =


4, se puede establecer que éste punto no sea menor que 4,0,0. De una
manera sencilla, se puede desarrollar un programa de detección de
colisiones:
Si p (xo, yo, zo) <= (4,0,0) hay colisión.

La realidad es que los planos en el espacio tridimensional ocupan una


posición e inclinación de tal forma que los programas para la
detección de colisión son más complejos que lo que aquí se describe.
En todo caso, si p = (4,0,0), hay toque virtual. Si el programa hace
que el punto sea rechazado por el plano, de manera que invierta la
velocidad con que este intenta penetrar, y a la vez lo desvíe, se dice
que hay resolución de colisión. Más adelante se tratará este tema que
es supremamente importante en la Simulación Virtual Interactiva.
Observe ahora un caso especial de los planos y que tiene mucha
relación con el espacio tridimensional donde se crean modelos y es
cuando el plano está definido por la ecuación:

z=0

Este plano es especial primero porque z al permanecer constante en


este valor no se incluye en las ecuaciones bidimensionales cuando se
está representando figuras en el plano (xy), y es justamente el que se
tiene de frente cuando se trabaja en la computadora.

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

Retomando formalmente el tratado del plano, se define con cierta


conveniencia para su aplicabilidad. Sea Po(xo,yo,zo) un punto por
donde pasa el plano y existe una recta que pasa por el punto
P1(x1,y1,z1). La ecuación del plano perpendicular a la recta y que pasa
por Po, es:
A (x - x0 ) + B (y - y0 ) + C(z - z0 ) = 0

A, B y C son números directores. Si estos números no son todos


iguales a 0 la siguiente ecuación determina un plano:

Ax + By + Cz + D = 0

Supóngase que y y z son iguales a 0. La ecuación quedaría de la forma


siguiente:
Ax + D = 0

x = - D/A, de la forma en que x = 4.

Para determinar el ángulo entre dos planos se utiliza la siguiente


ecuación:

cos θ = | A1 A2 + B1 B2 + C1C2| / [ sqrt(A12 + B12 + C12) sqrt(A22 + B22 + C22)]

53
Simulación Virtual Interactiva
.
2.2.9 Distancia entre puntos

Volviendo al caso de la distancia entre puntos en el espacio


tridimensional, se utiliza la misma ecuación para los dos puntos en
2D, incluyendo la tercera magnitud. Si se tienen los puntos P2(x2, y2,
z2) y P1(x1, y1, z1), la distancia d entre estos dos puntos se puede
determinar así:

d = sqrt((x2 -x1)2 + (y2 - y1)2 + (z2 -z1)2)

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.

2.2.10 Cosenos directores

Otro aspecto de gran importancia es la orientación de una línea.


Básicamente la línea que parte del origen del sistema de coordenadas
a cualquier punto está orientada por tres ángulos α, β, γ denominados

54
ángulos directores, formados con los ejes positivos x, y, z. De aquí
que se denominen cosenos directores a cos α, cos β y cos γ.

Si P(xo,yo,zo), es un punto de dicha recta, la distancia de P al origen es:

d = sqrt( x0 2 + y02 + z0 2 )

por lo tanto, se definen los cosenos directores como:

cos α = x0 /d cos β = y0 /d cos γ = z0 /d

P(xo,yo, zo)
β
α X
O
γ

Figura 2.14 Cosenos directores.

En caso de tener un punto P1(x1,y1,z1) como el origen y otro punto a


una distancia d, definido como P2 (x2,y2,z2), el conjunto de cosenos
directores de la línea entre P1 y P2 es:

cos α = (x2 - x1 ) /d cos β = (y2 - y1 ) /d cos γ = (z2 - z1 ) /d

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:

(x – h)2 + (y – k)2 + (z – l)2 = r2

Dos bolas de billar, a pesar de que se tratan con mayor frecuencia en


el plano 2D (la mesa), colisionan geométricamente porque “la
distancia entre los dos centros es menor o igual a la suma de los
radios”. Aunque las bolas de billar tienen el mismo radio, esta
definición se aplica también para dos esferas que tengan radios
diferentes.

r1 r2

Figura 2.15 Tendencia de colisión de dos esferas.

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

Un caso interesante lo muestran estas figuras creadas por una cantidad


de rectas paralelas, llamadas generatriz y en forma vertical, siguen
una trayectoria definida por una circunferencia8 o una elipse como
base, hasta formar la llamada superficie cilíndrica. Un cilindro cuyo
eje coincide con el eje y, tiene la siguiente ecuación:

x2/b2 + z2/a2 = 1

b
a

g X

Figura 2.16 Generación de un cilindro.

siendo a y b los semiejes de la sección elíptica. Si b=a, se trata del


cilindro circular de radio a.

2.2.13 Otros sistemas de coordenadas

Aunque se habla normalmente de “otros sistemas de coordenadas”, los


cuales se utilizan por conveniencia, como las coordenadas polares,
realmente se trata de una forma de representar un punto en el espacio,
a través de ecuaciones de transformación que sufre el sistema de
coordenadas rectangulares x,y,z. Un caso común corresponde a la

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:

x = r cosθ r = ± sqrt (x2 + z2 )


y =y θ = atan( z / x)
z = r senθ

P(x,y,z)
P(r,θ,y)

y
r X
θ

Z
Figura 2.17 Coordenadas cilíndricas.

Al igual, las coordenadas esféricas se obtienen de la transformación


de las siguientes ecuaciones:

x = r sen ϕ sen θ r = ± sqrt (x2 + y2 + z2 )


y = r cos ϕ ϕ = atan( z / x)
z = r senϕ cos θ θ = atan( z / r )

P(x,y,z)
P(r,,ϕ)
ϕ
r X

Figura 2.18 Coordenadas esféricas.

58
2.2.14 Aspectos geométricos de los modelos 3D

Para comprender entonces los aspectos del 3D, primero se debe


recordar qué es un ambiente 3D. Un ambiente real compuesto de un
espacio con muebles, mesas y otros objetos, es un ambiente 3D,
puesto que se refiere directamente a un espacio que las personas
normalmente ocupan. Este ambiente es el que se representa por las
tres coordenadas, definidas por los ejes x, y y z. Alrededor y sobre
estos ejes se mueven los cuerpos o modelos, que hacen parte de dicho
ambiente.

Por lo general, estas tres coordenadas representan sin más preámbulo,


el alto, ancho y profundidad de ese espacio. Las computadoras poseen
esencialmente una pantalla que representa el alto y ancho de un
espacio cualquiera. El asunto a definir es cuando se desea tratar el
lado de un objeto, en especial al denominado largo.

Un objeto, también tiene alto, ancho y profundidad, este último


término llamado comúnmente largo. Sin embargo, esto no es una
norma exacta, pues varía con las características del objeto. En ciertas
regiones, se denomina profundidad a la altura. Un cubo posee las tres
dimensiones iguales, una caja de fósforos, posee un alto, ancho y
largo, pero ¿a qué lado se le llama de una u otra forma?

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

Figura 2.19 Dimensiones en el ambiente 3D.

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.

Existe una variedad de programas los cuales permiten diseñar modelos


3D en un ambiente virtual. Por ejemplo, 3DsMax ofrece
combinaciones de ventanas (viewports) para dibujar un objeto desde
diferentes vistas, tales como Top, Bottom, Front, Back, Left, Right,
User y Perspective.

Suponiendo que se utiliza el eje z como la coordenada que demarca la


profundidad (entra y sale de la pantalla), se puede decir que el plano
(xz) es la vista superior (top), y (xy) es el plano frontal (front). El
siguiente ejemplo, permite analizar las vistas donde se desarrolla el
objeto:

XY - Front YZ - Left

XZ - Top
Y

Z
X

Figura 2.20 Vistas de un objeto en el ambiente 3D.

60
2.2.15 Movimiento en el plano en 3D

La mayoría de los simuladores de auto controlan sus vehículos propios


visualizando constantemente la ruta que deben seguir lo cual
obviamente está sobre una superficie. Una cámara detrás del vehículo
permite que el conductor pueda controlar la dirección bien sea por
teclado o por joystick, divisando el terreno que adelante se muestra,
evitando obstáculos y girando cuando la ruta así se lo indique.

Y Y’
yr

xr
X
X’

Figura 2.21 Vista del vehículo en el ambiente 3D.

El siguiente listado presenta estos aspectos, utilizando sencillas


ecuaciones de la trigonometría, en lo cual es posible visualizar el auto,
la rotación de las llantas y la forma de hacerlo alrededor de su eje
vertical cuando se gira el volante. Presionando “8” del teclado
numérico, se le imprime la aceleración al vehículo. La dirección del
vehículo se consigue cuando se presiona “4” para la izquierda o “6”
para la derecha. Presionando “5” se frena el auto.

// auto.cpp : Defines the entry point for the console application.


//
#include "stdafx.h"
#include <windows.h>
#include <GL/gl.h>

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 ();

glTranslatef ( 0.0, -3.0-dy, -5.0 );


glRotatef(dcar, 0.0, 1.0, 0.0); //gira la cámara

glCallList (2); //carrocería


llantas (); //llantas

63
Simulación Virtual Interactiva
.

glRotatef(359-b,0.0,1.0,0.0); //pasa el escenario


glTranslatef(-x,-y,-z);

glCallList (1); //terreno


glutSwapBuffers ();
glFlush();
}

//-------------------------------------------------------------------------------------------------------------
void init(void)
{
x=100; z=100;
glEnable (GL_DEPTH_TEST);

glNewList (2,GL_COMPILE); //carrocería


glPushMatrix();
glTranslatef ( 0.0, 0.5, 0.5 );
glBegin(GL_QUADS);
glColor3f(0.4, 0.4, 0.4);
glVertex3f ( -0.5, 0.02, -3.5);
glVertex3f ( -0.5, 0.02, 0.0);
glVertex3f ( 0.5, 0.02, 0.0);
glVertex3f ( 0.5, 0.02, -3.5);
glEnd();
glPopMatrix ( );
glEndList();

glNewList (1,GL_COMPILE); //superficies


glPushMatrix();
glColor3f(0.2f,0.2f,0.2f);
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();

glTranslatef (50.0, 0.0, 50.0);


glColor3f(0.3f,0.3f,0.3f);

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();
}
//-------------------------------------------------------------------------------------------------------------

void idle_func (void)


{
if (k!=0){ //vueltas o rotación de llantas
ran1=ran1+80*k;
if (ran1>=359.9) ran1=0;
}

if (freno==1) //en caso de frenar


{
if (k>0) k=k-0.005;
if (k<0) k=k+0.005;
if (k<=0.005 && k>0)
{k=0;
freno=0;
}
}

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);
}

if (k> 1.0) k= 1.0; //controlando la aceleración


if (k<-1.0) k=-1.0;

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;

if (k!=0){ //cámara detrás del vehículo


if (idl==1) dcar=dcar + 0.2;
if (idr==1) dcar=dcar - 0.2;
}

idr=0; idl=0;

x = x - sin(b*PI/180)*k; //funciones de velocidad en plano (xz)


z = z - cos(b*PI/180)*k; //y trayectoria del vehículo

glutTimerFunc( 20, update, 0);


glutPostRedisplay ();
}

//-------------------------------------------------------------------------------------------------------------

El valor de d define la posición que se le imprime a las llantas


delanteras para indicar la cantidad a rotar verticalmente. Las funciones
x y z de traslación y rotación, dependen del ángulo b el cual dirige el
auto sin la necesidad de fuerzas, solamente describiendo la trayectoria
indicada, multiplicadas por el valor de k, que en este caso es un valor
que incrementa o disminuye la velocidad.

//-------------------------------------------------------------------------------------------------------------
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.

Todos estos aspectos pueden ser tratados además de las funciones


trigonométricas con la aplicación de la dinámica de Newton, las
ecuaciones de Euler y otros fundamentos, donde la gravedad, la masa
y la fricción hagan que el auto cobre vida.

En páginas siguientes se dará una explicación de esas ecuaciones de la


física y aspectos que son relevantes para este propósito.

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.

La necesidad de tocar el objeto y que reaccione de acuerdo con las


leyes de la física (newtoniana) y la naturaleza del mismo corresponde
al tema principal de la Simulación Virtual. Además, se tratará de
forma elemental los conceptos que tienen relación con las ecuaciones
de Newton-Euler9 y la dinámica del cuerpo rígido.

3.2 Simulación basada en la física


Este capítulo se basa en los siguientes enunciados:
- La fuerza F(t), produce una aceleración.
- La aceleración a(t) produce un cambio en la velocidad.
- La velocidad v(t) produce un cambio en la posición.

Las fuerzas de fricción, resistencia y sustentación también producen


aceleración. Los objetos virtuales en movimiento no se detienen de
manera natural. Estas fuerzas permiten detener el objeto que está
sobre el suelo o en un medio como el aire u otro fluido.

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

En páginas anteriores se ha hecho referencia a ciertos controles que se


deben aplicar a los modelos para que no presenten errores y puedan
ejecutarse en cualquier momento, sin sobrepasar límites como el caso
de la tangente. Se puede así, definir el límite a manera de ejemplo.
¿Qué pasa si... se estira un resorte al límite?, o ¿qué pasa si la distancia
del punto a un plano tiende a 0? Se dice que el límite es la base de casi
todo el análisis matemático y se compara con una cota que se puede
alcanzar u otras veces se puede superar. El tema de los límites ayuda a
comprender y a detectar cuándo se deben hacer uso de esos controles.

En otras palabras se pueden explicar estos interrogantes diciendo que


una función f(x) se aproxima arbitrariamente a un número L cuando x
se aproxima a un valor c. Es decir, el límite de f(x) es L cuando x
tiende a c. En palabras más simples, ”Si se estira (x→c), entonces se
revienta (f(x)=L).”

lím f(x) = L
x→c

El ejemplo más sencillo para entender el concepto de límite, lo dio


Euclides10 al comparar las áreas de figuras planas regulares inscritas o
circunscritas con el fin de determinar el área de un círculo. Las figuras
planas regulares tienen un número de n lados que al ser demasiado
grande (tiende a infinito), la longitud de cada lado se hace pequeña,
confundiéndose con las porciones de arcos del círculo. En el

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

Figura 3.1 Ejemplo de límite

La definición anterior es geométricamente entendible, sabiendo que el


área del círculo es
A = π r2

pero en términos del cálculo es expresada de la siguiente forma:

lím (n/2) r2 sen (2π/n) = π r2


x→∞

El límite también se utiliza para la descripción de espacios recorridos


en intervalos de tiempos que varían según los requerimientos o
propósito de la simulación.

3.3.2 Derivadas e integrales

La programación de procesos o modelos de simulación se realizan por


métodos simples del álgebra y la matemática. Las computadoras no
tienen la capacidad de interpretar simbólicamente una derivada o una
integral como el hombre puede hacerlo. Lo cierto es que la relación
dx/dt no es la forma más simple de decirle a la computadora que
resuelva la derivada de la posición con respecto al tiempo, pero un
humano si puede interpretar simbólicamente dicha relación. Entonces,
a la computadora hay que describirle como resolver la derivada o la

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.

Combinando las ecuaciones simples de la mecánica, se define el


término “diferencial”. Como el desplazamiento es la integral de la
velocidad con respecto al tiempo, entonces la diferencial se define
simplemente como una “tasa de cambio” y con respecto a la
velocidad, es proporcional a la posición. En la simulación todo está
relacionado con el tiempo.

El término ∆t es la expresión común de todo programa de simulación


y en ella se debe centrar la atención con el fin de desarrollar
simulaciones que muestren efectivamente el comportamiento de la
realidad. Un “delta de t” mal seleccionado puede ser el punto caótico
de los programas aunque el resto de las ecuaciones estén bien. La
expresión:

∆t = t – to

se puede denominar “cambio en el tiempo” o “intervalo de tiempo”.

3.3.3 Vectores, matrices y quaternions

En Simulación Virtual así como en la física, todo es vectorial. Si se


quiere resolver un problema por más pequeño que sea, se hará uso de
los vectores. Una fuerza, la velocidad y el peso son vectores. En este
libro se hace uso de los vectores de forma implícita, al igual que con
las matrices. Las operaciones vectoriales, producto cruz, producto
punto y componentes en el espacio 3D, siempre harán parte de este
tratado de la simulación.

Más adelante se explicarán algunos aspectos importantes de las


matrices y los quaternions como métodos alternativos para representar
transformaciones de rotación y desplazamiento en la solución de
problemas cinemáticos.

72
3.3.4 Ecuaciones diferenciales

Cuando una ecuación contiene derivadas de otra u otras variables


dependientes con respecto a una o más variables independientes,
entonces se dice que es una ecuación diferencial. El dilema de las
ecuaciones diferenciales empieza precisamente por resolver “el
problema del valor inicial”, cuya condición está dada por las
funciones de la forma:

y(xo) = yo x(to) = xo a(to) = ao

que no es más que definir lo que va a pasar con la variable


dependiente y la exactitud numérica futura de una ecuación a partir de
un valor inicial. Las ecuaciones del movimiento de los cuerpos (II ley
de Newton) son ecuaciones diferenciales de segundo orden. Para la
solución de problemas de esta índole, existen métodos numéricos que
permiten dar respuesta a la condición inicial. Los métodos más
sencillos como el de Euler o las mejoras de este procedimiento tienen
defectos como la exactitud y la acumulación de errores que crecen
sistemáticamente.

El método de Runge-Kutta es un método genérico de resolución


numérica de ecuaciones diferenciales. Se puede programar fácilmente
y en la práctica es el más utilizado debido a la exactitud de la solución
de la ecuación diferencial:

dx/dt = f(x,t)

Según el método ordinario de Runge–Kutta, a partir del valor de x en


el instante t se determina el valor de x en el instante t+h mediante la
expresión:

x(t + h) = x(t) + 1/6 (k1 + 2k2 + 2k3 + k4)

Otros métodos utilizados son el Valor Medio, la integración de Verlet,


el método de Taylor, etc.

73
Simulación Virtual Interactiva
.
3.3.5 Transformaciones

Es posible representar vectores en el espacio tridimensional por medio


de una matriz dimensionada 3 x 1. Para un vector P(x,y,z) que se
desee transformar:

x' m11 m12 m13 x


y’ = m21 m22 m23 y
z’ m31 m32 m33 z

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

La forma más común de representar la rotación en el medio virtual es


por medio de matrices de rotación, los ángulos de Euler o por
quaternions. (OpenGL utiliza el método de la mano derecha). Para
representar el vector de rotación por medio de una matriz, se debe
multiplicar cada uno de las componentes vectoriales por las matrices
de rotación correspondientes a los ejes:

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

La matriz ortogonal, la cual multiplica a una columna vectorial


P(x,y,z) corresponde a la rotación en la cual se utilizan los ángulos de
Euler (ϕ, ζ, ψ). Está dada por:

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

Los ángulos (ϕ, ζ, ψ) denominados (roll, pitch y yaw), los cuales


permiten la rotación alrededor de los ejes coordenados de
desplazamiento o translación en la dirección x,y,z (surge, sway y
heave) respectivamente, son términos que nacieron en la aeronáutica
para la descripción y rotación a 6 grados de libertad - 6DOF11 de un
avión (también buque y submarino) y son utilizados en el sistema de
coordenadas euclidianas (ángulos de Euler) relativo al sistema de
coordenadas locales de dicho vehículo (sistema no inercial).

Ye

Z Ze Xe
O

Y 
X Pitch
ϕ Sway
Roll YMvq
ψ
Surge Yaw
XKup Heave
ZNwr

Figura 3.2 Modelo a 6 GDL de un barco en un sistema inercial.

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.

Los conceptos anteriores de rotaciones, traslaciones, ángulos y demás


nociones que hasta aquí se han tratado, tienen junto con la física la
misma importancia dentro del contexto de la Simulación Virtual pero
dicha terminología no es considerada en la computación gráfica de
igual forma, por lo que hay que saber identificarlos cuando se esté
tratando uno u otro campo. Cada uno de estos conceptos ofrece un
aspecto diferente de la naturaleza y juntos forman un escenario natural
donde los objetos pueden adquirir su normal comportamiento de
acuerdo con las leyes explicadas en próximos capítulos. Incluso para
los que tienen la capacidad de programar con el uso de bibliotecas
como OpenGL, la traslación y rotación ya no son un problema,
debido a que estas bibliotecas dan el soporte necesario para las
transformaciones. Las matrices y quaternions proporcionan una
explicación de lo que sucede con los objetos en el espacio, pero las
bibliotecas gráficas vienen a facilitar mucho esas tareas.

Supóngase un rectángulo formado por cuatro puntos, cuyo largo es de


10 unidades y de alto 5 unidades y se desea girarlo conforme a las
matrices de rotación, en este caso un rectángulo que reposando en el
plano (xy), lo puede hacer frente a nuestra pantalla de computador
alrededor del eje z. Los puntos del rectángulo son multiplicados por
los valores de la matriz y los nuevos puntos son graficados arrojando
la nueva rotación de la figura. El rectángulo está definido por los
cuatro puntos a saber: (0, 0), (0, 5), (10, 5), y (10, 0) y rotará alrededor

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

0,0 10,0 -5,0 0,0


-4,0 4,0 7,0

-10,0

Figura 3.3 Rotación de un rectángulo a 45, 90 y 270 grados

3.3.7 Quaternions

Los quaternions (cuaterniones) (método de los cuatro parámetros) son


vectores de cuatro dimensiones con un producto asociado. Fueron
desarrollados por W.R. Hamilton en 1843, para describir puntos en el
espacio tridimensional. Son muy utilizados en la rotación de objetos
en 3D, los cuales evitan el llamado Gimbal Lock, que consiste en la
pérdida de un grado de libertad cuando los ejes están configurados en
paralelo.

Esto ocurre en programas editores y motores 3D que utilicen ángulos


de Euler. Mientras las matrices de rotación utilizan 9 parámetros, un
quaternion sólo utiliza 4. Hay tres formas para representarlos:

q = (n, v)

donde n es un escalar y v es el vector unidad 3D.

77
Simulación Virtual Interactiva
.

q = (qo q1 q2 q3)

q = qo + q1i + q2j + q3k

También se puede representar de manera más conveniente:

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

Si se desea escribir en términos de ángulos y ejes, entonces:

q = cos(θ/2) + ( x sin(θ/2))i + (y sin(θ/2))j + ( z sin(θ/2)k)

donde θ es el ángulo de rotación y los valores x,y,z , representan los


ejes de rotación.

3.3.8 El problema del delta de t y el tiempo-real

La especificación o determinación del tiempo en la simulación debe


hacerse con cuidadosa atención puesto que toda Simulación Virtual
está relacionada con ese factor y es el que permite que exista el
movimiento dentro del ambiente 3D. Muchas de las ecuaciones
presentan la relación con el tiempo en dos formas ∆t y t. Cuál sería
entonces la diferencia de las siguientes ecuaciones?:

v = x/t

v = ∆x/∆t = (x – xo) / (t – to)

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.

Pero existen ecuaciones que vienen relacionadas de otra forma


involucrando el tiempo y el desplazamiento de cierta manera las
cuales se necesitan estudiar previamente para poder así desarrollar los
códigos conforme al planteamiento del problema propuesto.

x = xo + vot + ½ at2

lo que se puede escribir:

x – xo = vot + ½ at2

Pero en esta integración balística y para el propósito que se tiene, el


tiempo no es un factor fácil de determinar. Entonces, ¿dónde y cómo
relacionar el ∆t? Tal como se ha planteado desde la perspectiva del
desplazamiento, en simulación no sólo el problema del valor inicial
de xo debe ser considerado a la hora de desarrollar simulaciones 2D o
3D.

El tiempo t transcurre continuamente mientras ∆t es un valor pequeño


y fijo. La relación ∆t = t – to, puede ser tratada de la forma t = to +
∆t, como un contador o acumulador de tiempo. Entonces, de las
ecuaciones:

t = to + ∆t

x = xo + vot + ½ at2

se puede decir que en toda simulación como códigos de programa


siguen cierto orden dependiente de la definición preferente de t; to es
el mismo valor t pero del anterior cuadro o imagen representada en el
escenario virtual y sus valores iniciales por lo general son 0, un valor
que se le quiera dar de inicio o el acumulado.

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

el valor sombreado depende del anterior evento cuando el valor de 2


es tomado de lo que x dejó en el anterior proceso. En una ecuación de
la forma v = ( x – xo ) / t, entonces para x = xo + v t:

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

los valores no dependen del anterior evento, pero existe un t


progresivo que se obtiene de:

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( )

Haciendo una ilustración del proceso para una completa simulación se


puede listar un programa que permita entender la posición de las
ecuaciones que intervienen en la determinación del tiempo:

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( );
}

El denominado tiempo-real, es la actualización inmediata de eventos


en el que el usuario no puede distinguir la respuesta instantánea de la
computadora. Para que una simulación pueda ser considerada como en
tiempo-real, los gráficos o imágenes deben tender a ser actualizados
por ejemplo a una velocidad de cuadro de 30 imágenes por segundo y
el retraso debe ser menor de 150 milisegundos. Por esto es
indispensable la contabilización de fps frames per second, que se
ajuste a la sensación de engañar el ojo humano como para dar la
sensación de movimiento. Para grandes simulaciones donde el número
de eventos y dispositivos de la simulación son de gran proporción y
escala, se considera el término “a velocidad de acción”.

3.3.9 Geometría analítica de la colisión

No siempre se cuenta con la suerte de que los planos en un ambiente


virtual estén orientados de forma paralela con los ejes. Para los casos
en que una bola en una posición arbitraria se acerque a un plano cuyo
vector normal apunta hacia cualquier dirección, pero hacia el lado en
que se encuentre la bola, el tratamiento varía cuando se relaciona el
punto de posición de la bola con la orientación del vector normal. Se
había citado que la ecuación que determina el plano, es:

Ax + By + Cz + D = 0

Para una posición cualquiera del plano se tiene que A, B y C son


números directores correspondientes a la normal del plano, vector
perpendicular a su superficie y D define la distancia del plano al

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

Figura 3.4 Distancia de un punto al plano

La normal del plano, es decir el vector perpendicular a la superficie


del mismo está dado por:

n (A,B,C) = Ai + Bj + Ck

Para determinar la distancia de la bola al plano, se utiliza la siguiente


ecuación:

d = (n.p) + D = (A xo + B yo + C zo ) + D

ahora sí, se puede decir que:

Si d <= 0 hay colisión

Entonces se debe pensar en resolver la colisión para que la bola sea


rechazada y tome una dirección diferente regresándola a un valor
anterior con respecto al tiempo. En el caso de que la bola posea una
velocidad v, se debe considerar entonces la solución bajo las
ecuaciones de la física. Sea v la dirección inicial del vector velocidad,
u la dirección resultante después del impacto y n el vector normal,
entonces:

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:

cos θ = v·n / |v| |n|

La velocidad final se dirige en la dirección 2ζ. Esencialmente hay que


valerse de otros factores que intervienen en una colisión y que se han
supuesto aquí, como el caso del tiempo con respecto a las velocidades,
lo que prolongaría el análisis con más ecuaciones para llegar al
proceso de resolución o respuesta de colisión. Se debe considerar el
problema de evitar que los cuerpos se intersequen, es decir, que uno
se cruce con el otro en el ambiente virtual. El caso más común de un
objeto y un plano es el de la bola que cae al piso, la cual debe rebotar
conforme a la naturaleza del choque. Tal como se anotó, cuando ésta
choca con el piso, se necesita enseguida cambiar la velocidad que
traía. Se asume que la bola es indeformable por lo que se considera la
colisión de forma instantánea.

Sea (tc) el tiempo de contacto en que ocurre la colisión. Para hallar la


nueva velocidad, el programa debe detenerse. Sea u la nueva
velocidad. Las variables v y u serán diferentes al instante (tc). Cuando
los cuerpos están en contacto con v = 0, se dice que los cuerpos están
en contacto de reposo. En el caso de la bola en reposo sobre el piso se
debe evitar que se acelere, por el peso debido a la gravedad. La fuerza
entre la bola y el piso se denomina fuerza de contacto.

to

tc

to + ∆t

Figura 3.5 Intersección

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

Figura 3.6 Rango de tolerancia

Por lo general los programas de simulación buscan comprobar si un


número de objetos están en colisión o no, utilizando técnicas
primitivas para calcular la intersección entre objetos y luego
resolviendo para el nuevo tratamiento que se le dará a los objetos,
adicionados a una cola de procesos. Entre los tipos básicos de
primitivas en contacto están las esferas, las cajas y las cajas alineadas
con ejes.

Figura 3.7 Tipos básicos de primitivas en colisión

85
Simulación Virtual Interactiva
.
3.3.10 Sobre el concepto de inercia

De los conceptos más importantes que se puedan encontrar en


simulación o por lo menos uno de los que necesita de mayor atención,
es el concepto de inercia, justamente el tema central de la Simulación
Virtual, el cual se encuentra presente en objetos diversos que
representan desde un simple cubo o cilindro, hasta un trasatlántico o
nave espacial. A la I ley de Newton se le conoce como la ley de la
inercia y enuncia que:

“Todo cuerpo continúa en su estado de reposo o de velocidad


uniforme en línea recta a menos que una fuerza neta que actué sobre
él lo obligue a cambiar ese estado“

Se dice que la inercia se refiere a la tendencia que tienen los cuerpos a


oponerse a algún cambio de su estado de reposo o de movimiento.
Aún más simple, si un objeto pesado está en reposo, se necesita de una
fuerza considerable para moverlo, bien sea trasladándolo o rotándolo.
Se debe hacer la distinción entonces entre dos tipos de inercia. La
inercia lineal que se refiere a la masa y a la consecuente resistencia a
la traslación del cuerpo y a la inercia rotacional, la cual especifica la
resistencia a la rotación del cuerpo y se opone al cambio de la
velocidad angular.

El momento de inercia, una medida de la inercia rotacional, depende


de la distribución de la masa total del cuerpo en relación a un eje.

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.

Se divide en las siguientes ramas:

Cinemática = (gr, kinema, movimiento), estudia el movimiento de los


cuerpos en función del tiempo independientemente de las
interacciones que lo producen.

Estática = (gr, statikos, equilibrio), estudia las condiciones del


equilibrio de los cuerpos. Se limita a casos en que la aceleración es
cero.

Dinámica = (gr, dynamis, fuerza), estudia las interacciones que


producen el movimiento de los cuerpos.

Cinética = (gr, kinetic, del movimiento), estudia el movimiento y las


fuerzas o interacciones que lo producen. Por lo general la cinética es
el estudio del movimiento simple, pero la simulación permite
demostrar cómo ese movimiento es producido aplicando las
ecuaciones de la dinámica, la cinemática y en función del tiempo.

El estudio de la mecánica comprende:

Mecánica de la partícula = Cuando las dimensiones físicas del cuerpo


son despreciables al compararlas con su posición.

Mecánica de los sistemas de partículas = Cuando se trata de un


conjunto de puntos materiales.

La partícula puede tener masa pero sus dimensiones despreciables. Un


sistema de partículas las cuales permanecen a distancias fijas, sin que
exista rotación ni traslación relativa entre ellas, se constituye en un
cuerpo rígido. El cuerpo rígido tiene la particularidad de no cambiar
su forma significativamente si es rotado o trasladado.

87
Simulación Virtual Interactiva
.
3.4.1 Cinemática de la partícula

3.4.1.1 Movimiento y velocidad media

Para todo programa de simulación, la derivada es la función común de


mayor tratamiento en las ecuaciones de la cinemática. Se empezará
por el movimiento de una partícula definida como un punto en una
dimensión. Más adelante se aplicarán estos conceptos sobre el cuerpo
rígido en 3D. No es comprensible un ambiente virtual sin movimiento,
por esto, se empezará a analizar dicho movimiento desde el aspecto
más sencillo como el punto que se desplaza en una dimensión (recta o
gráficamente) en un determinado tiempo.

Si la partícula tiene movimiento desde una posición inicial xo al


tiempo to, hasta una posición x al tiempo t, se dice entonces que el
desplazamiento está definido como:

t
∆x = x – xo = ∫ vdt
to
realizado en el intervalo de tiempo:

∆t = t – to

Las unidades correspondientes para cada uno de estos valores ∆x y ∆t,


están dadas en longitud y tiempo respectivamente. Se denomina
entonces velocidad media a la razón entre el desplazamiento ∆x y el
tiempo ∆t.

vm = ∆x/∆t

Las unidades de vm están expresadas en longitud por tiempo, es decir,


m/s, km/h, etc. El problema de la velocidad media es que sólo
formula el espacio recorrido en un determinado tiempo, de principio a
fin, sin conocer como fue el comportamiento de la partícula en ese
tiempo.

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.

3.4.1.2 Velocidad instantánea

Para hallar la velocidad instantánea de una partícula que ha recorrido


cierto espacio, basta con dividir la velocidad media en porciones más
pequeñas de espacio y tiempo, es decir, es posible saber cuál es la
velocidad de la partícula en un fragmento de tiempo más corto.
Cuando se habla de porciones de tiempo más pequeños, quiere decir
que se toman pequeñas porciones de tiempo que parecerían que
tendieran a 0. De aquí que la definición de límite para la velocidad
instantánea está dada por:

v = lím ∆x/∆t = dx/dt


∆t → 0

En la práctica y en principio, esto es todo lo que se necesita para


sincronizar una simulación que depende del tiempo. Supóngase que t
= 2 segundos y el espacio recorrido por la partícula es de 10 metros.
La velocidad media indica que la partícula viajó a 5 m/s, pero la
velocidad instantánea puede expresar que al momento ∆t(1) = 0.5, la
partícula estaba a 2.5 metros del recorrido y que a ∆t(3) = 0.5, la
partícula estaba a 7.5 metros del recorrido. Claro que hay que tener en
cuenta que cuando se alcanzó un ∆t(3), ya habían transcurrido 1.5 =
0.5 x (3) segundos. Ahora supóngase que se toma un ∆t más pequeño,
es decir, de 0.1 segundos, el cual tiende más a 0. ¿Cuántos ∆t hay para
el espacio de los 10 metros recorridos? La respuesta es entonces 2 /
0.1 = 20. Entonces, el ∆t(15) indica nuevamente que se han recorrido
7.5 metros en 1.5 segundos. Para este caso, es claro que:

v = lím ∆x/∆t = 5 m/s


∆t → 0

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.

Esto es típico en la detección de colisiones, puesto que un valor ∆t


muy grande supone un ∆x muy grande, lo que haría que la partícula no
rebote sino que sobrepase la superficie.

Se puede despejar a x de la velocidad media, obteniendo una


expresión de la forma punto-pendiente de la recta, y = mx + b.
Generalmente una partícula se mueve en línea recta con la siguiente
ecuación:

x = xo + v t

Esto quiere decir que la posición actual de la partícula es igual a la


anterior posición de la misma sumada a un valor v multiplicado por t.
Aquí se puede apreciar que los intervalos de ∆t se mantienen
constantes, pero que v puede aumentar o disminuir, haciendo que x
aumente o disminuya también. En otras palabras, ¿se está acelerando o
desacelerando? ¿Pueden los intervalos de tiempos variar en
proporción?

3.4.1.3 Aceleración media

El valor de v debe variar en un intervalo definido también en el


tiempo, para decir que se está acelerando. Se define así, la aceleración
media, como la razón de incremento de la velocidad ∆v = v – vo, al
intervalo de tiempo correspondiente:

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.

Para la simulación, en la mayoría de los casos se espera que al


acelerar, normalmente aumente la velocidad y al desacelerar
disminuya la velocidad, sobre todo en referencia a un plano positivo.

Las unidades de am están expresadas en longitud por tiempo al


cuadrado, es decir, m/s2, km/h2, etc.

3.4.1.4 Aceleración instantánea

De igual tratamiento que la velocidad instantánea, la aceleración


instantánea es la razón, incremento o derivada de la velocidad con
respecto al tiempo, esto es, cuando ∆t tiende a 0.

a = lím ∆v/∆t = dv/dt


∆t → 0

Ejemplo elemental: La aceleración instantánea en to = 1 seg, para


una partícula cuya posición está representada por v = t3, es 3 m/s2.

a = ((1.1)3 – 13 ) / (1.1 –1) = 0.331/0.1 = 3.31 m/s2.

A medida que el intervalo se hace más pequeño, la aceleración media


se acerca a 3.

3.4.1.5 Movimiento rectilíneo uniformemente acelerado

Cuando la velocidad es constante y la aceleración es cero, el


movimiento es representado en forma de recta.

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

Cuando la velocidad varía uniformemente durante todo el


movimiento, se dice que es un movimiento rectilíneo con aceleración
constante, cuya gráfica velocidad–tiempo también es una línea recta.

Es posible utilizar la ecuación que proporciona la posición x de una


partícula en función del tiempo:

x = xo + vot + ½ at2

La gráfica correspondiente es una parábola, donde es posible


determinar la relación de las pendientes en cada punto de la misma. A
estas ecuaciones se le agregará otra que se obtiene de eliminar el
tiempo:

v2 = vo2 + 2ax.

Ejemplo elemental: Un avión parte de reposo y con aceleración


constante de 5 m/s2, recorre una pista de 160 m. Las ecuaciones
cinemáticas del movimiento rectilíneo uniformemente acelerado,
son:

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

3.4.1.6 Caída libre

La Caída libre es un movimiento rectilíneo uniformemente acelerado.


Los cuerpos en el vacío caen o suben con aceleración constante
denominada aceleración de la gravedad equivalente a 9.8 m/s2, la
cual está dirigida hacia el centro de la tierra.

Las ecuaciones del MRUA son suficientes para el estudio de


movimientos verticales de los cuerpos, indicándonos a cada instante la
posición y velocidad de dichos cuerpos.

Ejemplo elemental: Se lanza una piedra hacia arriba con una


velocidad de 40 m/s.

La altura que alcanza la piedra es:

Con el eje x hacia arriba,


vo = + 40 m/s,
a = 9.8 m/s2
xo = 0

En el punto más alto la velocidad de la piedra es 0. Entonces:


v2 = vo2 + 2ax
0 = 402 + 2(–9.8)x
x ≈ 80 m

El tiempo que gastó para llegar al punto más alto:


v = at + vo, 0 = (–9.8)t + 40, t ≈ 4s

93
Simulación Virtual Interactiva
.

Caída libre. Lanzamiento de una piedra hacia arriba vo = 40m/s


2
A 1/2 (9.8) t vo t x t x v
–9.8 –4.9 0.5 40 0.25 18.775 0.5 18.775 35.1
–9.8 –4.9 1.0 40 1.00 35.100 1.0 35.100 30.2
–9.8 –4.9 1.5 40 2.25 48.975 1.5 48.975 25.3
–9.8 –4.9 2.0 40 4.00 60.400 2.0 60.400 20.4
–9.8 –4.9 2.5 40 6.25 69.375 2.5 69.375 15.5
–9.8 –4.9 3.0 40 9.00 75.900 3.0 75.900 10.6
–9.8 –4.9 3.5 40 12.25 79.975 3.5 79.975 5.7
–9.8 –4.9 4.0 40 16.00 81.600 4.0 81.600 0.8
–9.8 –4.9 4.5 40 20.25 80.775 4.5 80.775 *4.1
–9.8 –4.9 5.0 40 25.00 77.500 5.0 77.500 9.0
–9.8 –4.9 5.5 40 30.25 71.775 5.5 71.775 13.9
–9.8 –4.9 6.0 40 36.00 63.600 6.0 63.600 18.8
–9.8 –4.9 6.5 40 42.25 52.975 6.5 52.975 23.7
–9.8 –4.9 7.0 40 49.00 39.900 7.0 39.900 28.6
–9.8 –4.9 7.5 40 56.25 24.375 7.5 24.375 33.5
–9.8 –4.9 8.0 40 64.00 6.400 8.0 6.400 38.4
–9.8 –4.9 8.5 40 72.25 –14.03 8.5 –14.03 43.3
–9.8 –4.9 9.0 40 81.00 –36.900 9.0 –36.900 48.2
∆t= 0.5
* A partir de este punto la velocidad es multiplicada por (–1)

100
80
60
40
Posición
20
Velocidad
0
0 2 4 6 8 10
-20
-40
-60

Figura 3.10 Representación del ejemplo de caída libre

Al cabo de 2s la posición de la piedra es:

94
x = vot + ½ at2, x = ½ (–9.8)22 + (40)2, x ≈ 60m

Al cabo de 2s, la velocidad es:


v = at + vo, v = (–9.8)2 + 40, v ≈ 20 m/s

Al cabo de 6s la posición es:


x = vot + ½ at2, x = ½ (–9.8)62 + (40)6, 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.

Al cabo de 6s la velocidad es:

v = vo + at

v = 40 + (–9.8)6, v ≈ –20 m/s

La velocidad está dirigida hacia abajo. Al cabo de 10 s, la posición es:

x = vot + ½ at2

x = ½ (–9.8)102 + (40)10, x ≈ –100m

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

Las ecuaciones anteriores permiten crear simulaciones con programas


sencillos, los cuales sólo buscan representar el movimiento de una
partícula de forma esquemática (posición–tiempo), sin que esto
implique que el comportamiento real de la misma obedezca a la
gráfica de representación.

En el plano el movimiento de una partícula puede describir cualquier


trayectoria. Ahora se hará uso de los vectores que descompuestos en
sus ejes respectivos definen y describen la resultante del movimiento
(xy). Ahora hay una relación directa entre el movimiento de la
partícula y la gráfica de la trayectoria que describe.

3.4.1.8 Posición de la partícula

La posición de la partícula en el plano está determinado por el


denominado vector de posición s=s(t), el cual en función del tiempo,
está proyectado sobre los respectivos ejes del sistema de referencia xy.

s
∆s

so

o x

Figura 3.11 Vector posición

Las proyecciones se definen entonces como x=x(t) y y=y(t), también


en función del tiempo. Si la partícula se mueve de la posición inicial so
al tiempo to, se dice que durante el intervalo ∆t = t – to, el
desplazamiento es ∆s = s – so.

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

El desplazamiento de la partícula cuando se mueve del punto A al


punto B, corresponde al cambio ∆s. Por lo tanto, las componentes de
∆s son ∆x y ∆y. La velocidad media, tiene la misma dirección que ∆s.

vm = ∆s/∆t

La velocidad instantánea en cada punto es tangente a la trayectoria en


dicho punto. Tiene sus componentes definidas por vx y vy.

v = lím ∆s/∆t = ds/dt


∆t → 0

vx = dx/dt vy = dy/dt

La magnitud de la velocidad instantánea está dada por:

|v| = sqrt (vx2 + vy2)

El ángulo se obtiene de la siguiente expresión:

tan θ = vy / vx

Las componentes i, j denominados vectores unitarios, definen que:

97
Simulación Virtual Interactiva
.

s=xi+yj
por lo tanto,

v = ds/dt = d/dt ( xi + yj ) = dx/dt i + dy/dt j

3.4.1.10 Aceleración media e instantánea

y ∆v y
vo v v
B

B
A
a A
a

o
o x
x

Figura 3.13 Gráficas correspondientes a las componentes de la


aceleración media e instantánea

De las gráficas se puede determinar que la aceleración media está


definida como:

a = dv/dt

La aceleración media tiene la misma dirección que ∆v, donde ∆v = v


– vo. De aquí que:

v = vo – ∆v

La aceleración instantánea en magnitud y dirección en el punto A,


está definida como el límite al que tiende la aceleración media cuando
el punto B se acerca a A. Tanto ∆v como ∆t tienden a 0.

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.

a = lím ∆v/∆t = dv/dt = d2s/dt2


∆t → 0

dv = a dt

v t
∫ dv = ∫ a dt
vo to

t
∆v = v – vo = ∫ a dt
to

La razón entre el desplazamiento, la velocidad y la aceleración está


dada por las ecuaciones diferenciales cinemáticas:

a = dv/dt = d2s/dt2 = d2x/dt i + d2y/dt j

v dv = a ds

3.4.1.11 Movimiento de proyectiles

Sin tener en cuenta la resistencia del aire, los proyectiles en caída


libre están sometidos solamente a una aceleración vertical g dirigida
hacia abajo. Esto es, la componente y de un proyectil tendrá un
movimiento rectilíneo uniformemente acelerado (g constante)
mientras que la componente x, tendrá un movimiento rectilíneo
uniforme, pues no hay aceleración.

Este supuesto reducen los problemas a problemas de aceleración


constante, lo cual en este caso es debido a la gravedad. De acuerdo
con la II ley de Newton:

99
Simulación Virtual Interactiva
.
f = ma

ay = fy /m = –mg /m = –g

lo que también se puede escribir como:

a = –g j

Entonces, supóngase que el proyectil parte del origen con una


velocidad inicial vo y que a su vez, forma un ángulo ζ con respecto a
la horizontal. Tomando el eje y hacia arriba, las ecuaciones
cinemáticas están dadas por:

ax = 0 ay = –g
vx = vo cos θo vy = –gt + vo sen θo
x = vo cos θo t y = vo sen θo t – ½ gt2

Ejemplo elemental: Desde el suelo, un proyectil es disparado con una


velocidad de 10 m/s, con un ángulo de 37º con respecto a la
horizontal. Las ecuaciones del movimiento están dadas por:

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

Cuando hace impacto en el suelo la ordenada y es 0, por lo tanto, el


tiempo de vuelo del objeto es:

0 = –5t2 + 6t, 5t2 = 6t, t = 6/5 = 1.2s

La distancia que alcanzó es: x = 8(1.2) = 9.6m

La altura máxima es: vy = 0 = –10t + 6. Despejando el tiempo para


alcanzar esta posición:

100
t = 6/10 = 0.6s, y la ordenada y, proporciona la altura máxima:

y = –5(0.6)2 + 6(0.6) = 1.8 m

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

Figura 3.14 Representación XY del ejemplo del proyectil

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:

- La trayectoria describe una parábola. En algunos lapsos de tiempo


puede mostrar una trayectoria rectilínea pero no exacta.

101
Simulación Virtual Interactiva
.
- El máximo rango se alcanza a un ángulo de 45º para una velocidad
dada.

- La velocidad al momento del impacto es igual a la velocidad de


lanzamiento cuando los puntos correspondientes están al mismo
nivel.

- La componente vertical de la velocidad es 0 en el punto más alto de


la trayectoria.

- Si los puntos de impacto y lanzamiento están al mismo nivel, el


tiempo requerido para alcanzar el punto más alto de la trayectoria
desde el lanzamiento es igual al tiempo desde el punto más alto hasta
alcanzar el punto de impacto. Las ecuaciones a utilizar en este tipo
de problemas se muestran a continuación:

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

Existen ciertos casos del movimiento de proyectiles los cuales


relacionan entre sí a los niveles de puntos de lanzamiento e impacto.
Es posible que estos puntos estén en diferentes niveles por lo que las
ecuaciones varían dependiendo de la altura.

Cuando el punto de lanzamiento está localizado en el plano horizontal


más bajo que el punto de impacto, las ecuaciones varían sólo para t:

t = (vo sin θ) / g + sqrt(2(h–b)/g)

102
y
vo
 h b

---------------------------------- r ------------------------------------

Figura 3.15 El blanco está en un punto más alto que el de lanzamiento

Para el caso contrario, es decir, cuando el blanco se encuentra en un


nivel más bajo que el punto del lanzamiento, las ecuaciones cambian
sólo para h y t:

h = b + (vo2 sin2θ) / (2g)

t = (2vo sin θ) / g + sqrt((2h)/g)

3.4.1.12 Caída de proyectiles

Este tipo de simulaciones involucra caída de proyectiles desde un


sistema en movimiento tal como un avión. La velocidad inicial del
proyectil es horizontal y es igual a la velocidad del vehículo que lo
arroja.

Se puede ver que cuando la velocidad inicial es 0, este problema se


reduce a uno de caída libre.

103
Simulación Virtual Interactiva
.

----------------------------- r ----------------------
------
Figura 3.16 El proyectil parte con la velocidad del sistema en movimiento que lo
lanza

A continuación se presentan las ecuaciones del lanzamiento de


proyectiles desde una plataforma en movimiento. Se asume que
ninguna otra fuerza actúa sobre el proyectil:

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)

Ejemplo elemental: Un avión que vuela a una altura de 1200 m, con


una velocidad de 200 km/h, deja caer una bomba sobre un blanco.

El tiempo que tarda la bomba en impactar es: 2h = 9,8 t2 = 2400 = 9.8


t2, por lo que t = 15.65 s

El rango o distancia horizontal recorrida por la bomba en ese tiempo


es:

r = 200 km/h * 1000/3600 * 15.65s


r = 869.4 m

104
3.4.1.13 Explosiones con partículas

Las partículas que forma parte de un efecto de explosiones no se


mueven al azar, sino por la influencia de su velocidad inicial, el
ángulo de disparo, aceleración debido a la gravedad y una masa
aparente.

Para este tipo de problemas, se especifica primero la velocidad inicial,


lo que determina la fuerza de la explosión, el ángulo, el factor de
gravedad (en la que cae la partícula) y la duración en milisegundos. A
esta duración es lo que se le conoce como “vida del efecto” por lo que
las partículas se mueven hasta que pasa el tiempo de vida.

Figura 3.17 Efecto de explosión con partículas

En algunos casos se recurre a controlar la vida de la partícula


indicando con un valor, el tiempo que le queda con efectos de
atenuación del color de la misma hasta verla desaparecer. Para el
porcentaje de atenuación se utiliza la siguiente ecuación:

c = (vida – tiempo) / vida

En la medida que transcurre el tiempo, c tiende a 0.

El tiempo es controlado con ∆t = 10 por la siguiente ecuación:

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

utilizando las conocidas ecuaciones:

x = vo cosθ t

y = vo senθ t + ½ gt2

3.4.2 Movimiento de partículas en 3D

3.4.2.1 Disparo de partículas

Para desarrollar simulaciones de la cinemática de partículas en el


espacio 3D y bajo la representación vectorial, simplemente se adiciona
la componente k como vector unitario en la dirección del eje z.

s=xi+yj+zk
por lo tanto,

v = ds/dt = d/dt (x i + y j + z k) = dx/dt i + dy/dt j + dz/dt k

a = dv/dt = d2s/dt = d2x/dt i + d2y/dt j + d2z/dt k

Siguiendo con el ejemplo del disparo de un proyectil, a continuación


se aprecia como es el comportamiento del mismo bajo el espacio 3D.

Para este caso se tiene en cuenta la velocidad y el ángulo de disparo


compuesto por la elevación y el ángulo horizontal.

106
l
x
y vs

α
β

Figura 3.18 Orientación del cañón por medio de ángulos y las componentes
vectoriales

El ángulo de elevación α permite que el cañón se mueva de arriba


hacia abajo; el ángulo β parte del eje x hacia la línea de proyección p
del cañón sobre plano (xz), determinando así la orientación del cañón;
en otras palabras, la dirección que toma el vector velocidad de salida
vs, cuyo valor es:
vs = vsx i + vsy j + vsz k

Con base en los cosenos directores se empieza por determinar primero


las componentes de la velocidad, acorde con la ecuación anterior:

cosθx = vsx / vs cosθy = vsy / vs cosθz = vsz / vs

Pero con respecto a la longitud l del cañón, los valores para los
cosenos directores están definidos por:

cosθx = lx / l cosθy = ly / l cosθz = lz / l

La proyección p del cañón está definida 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:

lx = p cos β ly = l cos α lz = p sen β

En resumen, para el eje x se tienen definidas las componentes del


desplazamiento, velocidad y aceleración:

ax = 0
vsx = vx = vs cosθx
x = vx t = vs cosθx t

Para el caso del eje y, la velocidad inicial se define como:

vsy = vs cosθy
ay = –g
vy = vsy + at = vs cosθy – gt

Teniendo en cuenta la elevación del cañón y la altura, se necesita


calcular la componente inicial yo del desplazamiento, siendo yb la
elevación de la base y l la longitud del cañón:

yo = yp + l cos α

por lo que el valor de y está dado por:

y = yo + vsyt + ½ at2
reemplazando,

y = (yp + l cos α )+ (vs cosθy ) – ½ gt2

Para las componentes en z:

az = 0
vsz = vz = vs cosθz
z = vz t = vs cosθz t

Los vectores se definen combinando las componentes halladas:

108
s = ( (vs cosθx ) t ) i + ( (yb + l cos α ) + (vs cosθy ) – ½ gt2 ) j +
((vs cosθz t )) k

v = ((vs cosθx )) i + ((vs cosθy – gt )) j + ((vs cosθz )) k

a = –g j

3.4.3 Cinemática del cuerpo rígido

3.4.3.1 Movimiento circular

Dentro del campo de la cinemática se trata el movimiento que realiza


la partícula sobre una circunferencia de radio r, teniendo en cuenta
también su velocidad y aceleración.

En este caso se definen la posición angular, la velocidad angular y la


aceleración angular con el fin de hallar las ecuaciones cinemáticas
angulares.

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

El cuerpo se mueve sobre una circunferencia de radio r con rapidez


constante. La magnitud del vector velocidad es constante.

3.4.3.3 Velocidad

El vector velocidad es tangente a la circunferencia y perpendicular al


radio que llega al punto de tangencia.

3.4.3.4 Aceleración

El vector velocidad varía en dirección, por tanto el objeto tendrá


aceleración. Si se mueve de B a A, el tramo AB = ∆s. Desde el origen
al punto A o a B, se define el radio r.

∆v/∆s = v / r

∆v = v/r ∆s

La aceleración media será:

a = ∆v/∆t = v/r ∆s/∆t

La aceleración instantánea se determina cuando ∆t tiende a 0. En este


caso ∆s/∆t es igual a la rapidez v:

a = v2 / r

La dirección de a será la de ∆v, cuando A y B estén muy cercanos, a


estará dirigida hacia el centro de la circunferencia, entonces se dice
que la aceleración es centrípeta, con sus respectivas unidades en
m/s2.

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.

v = n 2πr = 125.6 m/s

La aceleración es

a = v2/r = 7895.6 m/s2

Ejemplo elemental: Un punto en el ecuador gira con el movimiento


de la tierra, con una velocidad de:

v = 1/n 2πr = (1/ (24 x 60 x 60) ) 2πr = 462.96 m/s

1 vuelta dividida entre el período τ (frecuencia): 24 horas, 60 minutos,


60 segundos. El radio de la tierra es de 6,366,197 m.

a = 0.0336 m/s2

3.4.3.5 Posición angular

Un punto se desplaza sobre un arco s de una circunferencia de radio r,


del punto A al punto B. El ángulo ζ en radianes, es igual a la longitud
del arco s, dividido el radio r,

θ=s/r

Si s = r, el ángulo ζ = 1 radian. El radian es el ángulo en el centro de


una circunferencia, subtendido por un arco de longitud r.

El radian no tiene dimensiones físicas13 y es una relación entre dos


longitudes. Si se conoce el ángulo en radianes, la longitud del arco es:

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

Ejemplo elemental: el ángulo en radianes total alrededor de un punto


(1 vuelta), corresponde a un arco total o a la circunferencia entera:

s = 2πr

θ = s / r = 2πr

ζ = 2π radianes, equivalente a 360 grados. 1 grado = 2π/360 = π/180


radianes

El ángulo llano o de 180 grados es:

θ = 2πr / 2r = π rad

El ángulo recto o de 90 grados es:

θ = 2πr / 4r = π/2 rad

3.4.3.6 Velocidad angular

Cuando un punto gira de una posición angular ζo a una posición


angular ζ, el desplazamiento angular está definido por Γζ = ζ – ζo. La
velocidad angular media es la razón del desplazamiento angular al
tiempo transcurrido,
ω = Δθ / Δt

cuyas unidades están dadas en rad/s. Si el desplazamiento angular se


hace mucho más pequeño, (Γζ) el tiempo transcurrido (Γt) también se
vuelve más pequeño. Entonces la velocidad angular instantánea en
un momento dado es la razón de Γζ a Γt, cuando Δt tiende a 0.

ω = Δθ / Δ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:

ω rad/s = 2πn vps = 2πn/60 rpm

Ejemplos elementales: Un plato que gira con una revolución de 30


rpm, tiene una velocidad angular de:

ω = 2π 30 /60 = 3.1415 rad/s

Un cuerpo que gira a un ángulo de 7200 grados en 5 segundos, la


velocidad angular media es:

ω = 7200 /5 x 2π /360 = 8π rad/s

Un objeto que gira con una velocidad angular de 10 rad/s, da un


número de vueltas por segundo de:

n = ω /2 π = 10/2 π = 5/π vueltas/seg

Un objeto que gira un ángulo de 1080 grados en un segundo, da un


número de vueltas por segundo de:

n = 1080 / 360 = 3 vps

cuya velocidad angular es

ω = 2π 3 vps = 6π rad/s

3.4.3.7 Relación entre velocidades lineales y angulares

Se sabe que s = ζ r y para un incremento de ζ, Γs = Γζ r, por lo que


dividiendo por Δt, se obtiene:

1Γs / Γt = (Γζ / Γt) r

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ω

Ejemplo elemental: Un objeto recorre una circunferencia de 4 m de


radio a razón de 10 vps. La velocidad angular es:

ω = 2π 10 vps = 20π rad/s

La velocidad del objeto es:

v = rω = 4 (20π) = 80π m/s

La aceleración centrípeta es:

ac = v2 / r = (80π)2 / 4 = 1600π2 m/s2

3.4.3.8 Aceleración angular

Si la velocidad angular varía de ωo a ω, o sea que Γω = ω – ωo


durante el tiempo Δt, es posible definir la aceleración angular media
como:
α = Δω/Δt rad/s2

La aceleración angular instantánea es el límite de la razón de Δω a Δt


cuando éste tiende a 0.

α = lím Δω/Δt, (Δt→0) rad/s2

Ejemplo elemental: Un disco que gira a una velocidad de 30 rpm se


detiene por completo a los 5s. La velocidad angular media fue:

ω = 2π (30)/60 = 3.14159 rad/s

114
Su aceleración angular media fue:

α = (0 – 3.1415) / 5 = –0.62 rad/s2

3.4.3.9 Analogía entre los movimientos uniformes lineales


y angulares

Existe una semejanza entre las ecuaciones del movimiento de rotación


uniforme y uniformemente acelerado y las ecuaciones del movimiento
rectilíneo uniforme y uniformemente acelerado:

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αθ

3.4.3.10 Aceleración centrípeta y tangencial

Cuando a está dirigida hacia el centro de la circunferencia, entonces se


dice que la aceleración es centrípeta y definida por la variación de la
dirección del vector velocidad.

Pero si la magnitud de la velocidad varía, entonces se tiene una


aceleración tangencial definida como la variación de la magnitud de
la velocidad sobre el intervalo de tiempo correspondiente cuando
tiende a 0.

ac = ω2r at = α r

115
Simulación Virtual Interactiva
.
La aceleración total sería la suma de ambas:

a = ac + at

Ejemplo elemental: En resumen, si estas ecuaciones se aplican en un


disco de radio de 12 cm, el cual gira con una aceleración angular de 5
rad/s2, durante 5/π vueltas, se obtiene:

El ángulo recorrido es:

n = ω /2 π
ζ = ω 2/2α
ζ = (2 π n) 2 /2α
ζ = (4 * π2 * 25/π2 ) /2*5 = 100/10 = 10 rads

La velocidad angular es:

ω2 = ωo2 + 2αζ
ω = sqrt (0 + 2 * 5 * 10 ) = 10 rad/s

El tiempo de giro es:

ω = ωo + α t
t=ω/α
t = 10 / 5 = 2 s

La velocidad de un punto cualquiera de la circunferencia (borde del


disco):

v=rω
v= 12 * 10 = 120 cm/s

La aceleración centrípeta del mismo punto es:

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:

a = sqrt (ac2 + at2 )


a = sqrt (12002 + 602 ) = 1201.5 cm/s2

3.4.3.11 Movimiento de un satélite

Un satélite es un cuerpo o partícula que se mueve a la misma


velocidad angular sobre un punto relativamente fijo de otro cuerpo
que también gira alrededor del eje común. Un satélite de
comunicaciones permanece sobre el mismo punto en la tierra y gira a
la misma velocidad angular de ésta, para que la señal pueda ser
transmitida entre dos puntos lejanos y separados por la curvatura de la
tierra.

Figura 3.20 Movimiento satelital

La velocidad angular de la tierra está dada por la ecuación:

ω = 2π / (24 x 60 x 60) rad/s

Para averiguar si un satélite tiene la misma velocidad angular de la


tierra, primero se analiza el comportamiento de un punto sobre la
superficie de la tierra y luego se compara con el satélite que orbita

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

La aceleración normal está dada por:

ac = v2 / R = ω2 R

ac =0.0337 m/s2

A continuación se determina la velocidad angular en el punto:

ω2 = ac / R = 0.0337 / 6,380,000

ω2 = 0.0000727 rad/s

El satélite se encuentra a una distancia sobre el punto en la tierra.


Tomando el valor de 300 Km, se debe tener en cuenta la distancia
desde el centro de la tierra al satélite, lo que corresponde a d =
6,680,000 metros, así como el período establecido.

La rapidez para el satélite es:

v = 2π d / 86400

v = 485.78 m/s (mayor rapidez)

La aceleración normal está dada por:

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

3.4.3.12 Velocidad relativa

En el movimiento rectilíneo cuando se refiere a la velocidad y a la


posición de un objeto por lo general se hace con referencia a un
sistema fijo de coordenadas. Pero un objeto puede moverse y ser a la
vez el sistema de referencia de otro objeto, entonces se dice que este
último objeto tiene un movimiento relativo con respecto al anterior.

Ejemplo elemental: Un auto viaja a 60 km/h por una carretera recta y


está a unos metros delante de otro auto B que viaja a 80 km/h.
Teniendo en cuenta la velocidad de B con respecto a A :

Sea entonces:

VAT, la velocidad de A con respecto a la tierra.

VTA, la velocidad de la tierra con respecto al auto A.

VBA, la velocidad del auto B con respecto al auto A.

VBT, la velocidad de B con respecto a la tierra.

La forma de organizar la ecuación responde al orden de las letras


subindizadas:

VBA = VBT + VTA

Pero VTA corresponde a – VAT.

VBA = VBT – VAT

119
Simulación Virtual Interactiva
.
VBA = 80 km/h – 60 km/h

VBA = 20 km/h

Lo que indica que el auto B se está alcanzando al auto A con esa


velocidad.

El caso más común de velocidad relativa se aprecia en el ejemplo de


la persona que camina desde el último hasta el primer vagón de un
tren en movimiento. Entonces la velocidad de la persona con respecto
a la tierra es:

VPE = VPT + VTE

VPE, la velocidad de la persona con respecto a la tierra.


VTE, la velocidad del tren con respecto a la tierra.
VPT, la velocidad de la persona con respecto a la tierra.

Lo que indica que si la persona camina a 10 km/h y el tren avanza a 80


km/h, la velocidad de la persona con respecto a la tierra es de 90 km/h.

En el plano o en el espacio 3D, los supuestos problemas a resolver se


relacionan con la dirección que toman las velocidades de los objetos
como sucede en la realidad. Estos problemas se aprecian en el tratado
de la navegación cuando un avión se desvía de su rumbo por efecto
del viento o un barco por efecto del viento o las corrientes.

Ejemplo elemental: Un buque se dirige al Norte, moviéndose


respecto a la dirección del viento a la velocidad de 20 nudos. Si el
viento sopla de Oeste a Este a 8 nudos, hallar la velocidad y dirección
del buque respecto a tierra y corregir el rumbo.

120
Viento a 8 nudos

20 nudos
hacia el Norte Rumbo
a corregir

Figura 3.21 Diagrama vectorial del buque

Entonces sea

VBV = 20 nudos Norte

VVE = 8 nudos Este

VBE = VBV + VVE

En el triángulo rectángulo se resuelve por Pitágoras –– en este caso


que el viento viene con dirección perpendicular al curso del buque. La
velocidad es:

VBE = sqrt ( 202 + 82 ) = 21.5

La dirección que lleva el buque es:

tan ζ = 8 /20 ζ = 21.8º

Para corregir el rumbo, se debe aplicar una velocidad de:

VBE = sqrt ( 202 – 82 ) = 18.33 nudos

121
Simulación Virtual Interactiva
.
con una dirección de:

sen ζ = 8 /20, ζ = 23.57º al Este

3.4.4 Conceptos de la estática

3.4.4.1 Fuerza

Se define sencillamente como el tirón o empuje que se ejerce o aplica


sobre un cuerpo. Es una cantidad vectorial por lo que posee magnitud,
dirección y sentido. Cuando se aplica una fuerza sobre un cuerpo, éste
adquiere una aceleración que lleva la misma dirección y el mismo
sentido que la fuerza aplicada. Se habla de fuerza también cuando se
realiza un esfuerzo muscular para deformar un objeto como un resorte.

Figura 3.22 Aceleración adquirida por una fuerza

Los efectos que se pueden producir sobre un objeto por la aplicación


de una fuerza se conocen como efecto estático (deformación) y efecto
dinámico (aceleración). Por lo general una fuerza sobre un objeto es
producida por otro objeto.

3.4.4.2 Tipos de fuerzas

Las interacciones o fuerzas en la naturaleza se dividen en:

Fuerza gravitacional – Es la fuerza de atracción que ejerce un cuerpo


sobre el otro debido a sus masas. Cuando se habla del peso del objeto
sobre la superficie de la tierra, se refiere entonces a la fuerza
gravitacional que produce la tierra sobre dicho cuerpo.

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.

Fuerza nuclear – Son fuerzas de corto rango y se refieren a las


fuerzas de unión entre partículas del núcleo del átomo.

Fuerza de contacto – De naturaleza electromagnética, cuando un


cuerpo toca a otro cuerpo hablando macroscópicamente ya que los
electrones o los núcleos del átomo nunca se toca. Entre estas fuerzas
se pueden citar las siguientes:

Fuerza elástica – Como en el caso de un resorte, el cual se puede


alargar, estirar o restituir.

Fuerza de tensión – Como en el caso de una cuerda que se somete a


fuerzas por los extremos.

Fuerza normal – Fuerza perpendicular entre la superficie de un


cuerpo y otro que hacen contacto. Se puede comparar con la fuerza
que produce un colchón de resortes sobre el cuerpo humano cuando
reposa sobre él. La fuerza de compresión de los resortes produce una
fuerza normal.

Fuerza de rozamiento – Fuerza paralela a las superficies en contacto.

3.4.4.3 Estática de la partícula – Equilibrio

Una partícula está en equilibrio cuando la resultante de la suma de


todas las fuerzas que actúan sobre ella es 0. La partícula permanece
en reposo si estaba en reposo o se moverá con velocidad constante en
línea recta si se encontraba así.

Ejemplo elemental: Un barco es arrastrado por dos remolcadores con


una fuerza resultante de 2000 lbs en la dirección del eje de crujía.

123
Simulación Virtual Interactiva
.
Es posible averiguar la tensión en cada cuerda si los ángulos formados
son de 25º.

 = 25º

 = 25º

Figura 3.23 Descomposición de fuerzas

Por relación simétrica, trigonométrica y del paralelogramo se dice


que:

T / sen 25 = 2000 / sen 130

T1 y T2 = 1103.4 lbs

Este tipo de ejemplos también se presentan cuando los ángulos son


diferentes.

Ejemplo elemental: En un canal de pruebas se usan tres cables para


mantener la proa de un barco en el eje del centro del canal de 10
metros de ancho.

Se puede determinar la fuerza de resistencia FD que se espera a cierta


velocidad, si en cada cuerda hay dinamómetros indicando que la
tensión en el cable AB es de 50 lbs y en el cable AC es de 80 lbs, pero
se desconoce la tensión en el cable AD.

124
D 2m 6m
B

5m Flujo
A

C
Figura 3.24 Fuerza de resistencia

El diagrama de cuerpo libre permite conocer el comportamiento de las


fuerzas en el sistema:

TAD α β
TAB

FD 50lb

80lb
TAC

Figura 3.25 Diagrama de cuerpo libre

Se determinan los ángulos que dirigen las fuerzas de tensión:

tan α = 2m / 5m α = 21.8
tan β = 6m / 5m β = 50.2

Condición de equilibrio:

FR = TAB + TAC + TAD + FD = 0

TAB = TAB sen βi + TAB cos βj = 50 (0.76)i + 50(0.64)j = 38i + 32j


TAC = –80j
TAD = – (TAD sen αi + TAD cos αj) = – ( 0.37 TAD i + 0.92 TAD j )

125
Simulación Virtual Interactiva
.
FD = – FD i
FR = 38i – 0.37 TAD i – FD i + 32j – 80j – 0.92 TAD j = 0

ΣFx = 0  38 – 0.37 TAD – FD = 0


ΣFy = 0  32 – 80 – 0.92 TAD = 0

TAD = (80 – 32) / 0.92 TAD = 52.1 lb


FD = 37 – 0.37 (52.1) FD = 18.7 lb

3.4.4.4 I ley de Newton, ley de la inercia

La I ley de Newton afirma lo anterior expuesto. Esta ley enuncia que


“Todo cuerpo permanece en estado de reposo o de movimiento
rectilíneo y uniforme, a menos que actúe sobre él una fuerza
resultante.” En otros términos, para que un cuerpo adquiera
aceleración se le debe aplicar una fuerza.

3.4.4.5 Fuerzas equivalentes

En el caso de un cuerpo rígido, el principio “experimental” de


transmisibilidad manifiesta que el efecto de una fuerza externa sobre
dicho cuerpo permanece sin cambio si esa fuerza se mueve a lo largo
de su línea de acción. En otras palabras, dos fuerzas F y F´ que actúan
sobre un cuerpo rígido en dos puntos diferentes tienen el mismo efecto
sobre ese cuerpo si poseen la misma magnitud, la misma dirección y
la misma línea de acción.

F

Figura 3.26 Fuerzas equivalentes

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

Figura 3.27 Fuerzas externas invariables

3.4.4.6 Momento o torque

El efecto de una fuerza sobre el cuerpo rígido depende también de su


punto de aplicación. La posición de un punto A puede establecerse en
forma conveniente por el vector de posición que une al punto de
referencia con A.
Mo

O r 
d
A

Figura 3.28 Momento o torque de una fuerza

El momento de F alrededor de O se define como el producto vectorial


de r por F:

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

donde d representa la distancia perpendicular desde O a la línea de


acción de F. La magnitud de Mo mide la tendencia de la fuerza F a
hacer girar el cuerpo rígido alrededor de un eje fijo en la dirección de
Mo. Las componentes rectangulares en el espacio tridimensional del
momento Mo de una fuerza F son:

Mx = yFz – zFy
My = zFx – xFz
Mz = xFy – yFx

donde x,y,z son las componentes del vector de posición r. En cuanto a


la forma de determinante, Mo está definido como:

i j k
Mo = x y z
Fx Fy Fz

Ejemplo elemental: Se utilizan dos remolcadores para llevar un


buque al muelle. Cada uno ejerce una fuerza de 1000 kN. Se puede
determinar el momento y la fuerza resultante con respecto al CG centro
de gravedad del buque.

A B
60º
15 m CG 20 m

20 m 40 m

Figura 3.29 Ejemplo de fuerzas sobre el buque

128
En un diagrama de cuerpo libre, se descomponen cada una de las
fuerzas.

FA
-866 j FB
-1000 j
500 i

Figura 3.30 Diagrama de cuerpo libre

La resultante es:

R = ΣF

FA = (1000 cos 60 i – 1000 sen 60 j) = 500 i – 866 j

FB = –1000 sen 90 j = –1000 j

R = 500 i – (866 + 1000) j

R = 500 i – 1866 j

El momento o torque está definido por:

Mo = Σ(r x F) = ((–20 i + 15 j) x (500 i – 866 j)) + ((40 i + 20 j ) x


(–1000 j ))

Mo = – 30,180 Nm

La magnitud de la resultante es

R = sqrt (5002 + 18662) = 1931.8 N, 15º hacia abajo.

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.

3.4.4.7 Equilibrio en un cuerpo rígido

La primera ley del equilibrio establece que la suma de las fuerzas


aplicadas al cuerpo es 0. La segunda ley del equilibrio establece que la
suma de los momentos es igual a 0. Entonces, las condiciones
necesarias para que el equilibrio de un cuerpo rígido pueda obtenerse
son:

R= ΣF = 0 y ΣMo = Σ( r x F )= 0
Descomponiendo luego cada fuerza y cada momento en sus
componentes rectangulares. Para 2D:

ΣFx = 0 ΣFy = 0 ΣMo = 0


Pero si es en tres dimensiones:

ΣFx = 0 ΣFy = 0 ΣFz = 0

ΣMx = 0 ΣMy = 0 ΣMz = 0

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

Figura 3.31 Ejemplo de grúa y carga

En este tipo de problemas se deben analizar el tipo de apoyo, conexión


y reacción equivalentes como los presentes en el punto PA y PB. Las
reacciones para casos en 2D se dividen en tres grupos; se define así las
reacciones equivalentes a una fuerza con línea de acción conocida, las
reacciones equivalentes a una fuerza de dirección desconocida y las
equivalentes a una fuerza y un par. A continuación se detalla el
diagrama de cuerpo libre del ejemplo de la grúa.

Ay
CG 9800 N
Ax PA

2m 4900 N

PB
B
3m 4m

Figura 3.32 Diagrama de cuerpo libre

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.

El peso de la grúa es de 500 kg x 9.8 m/s2 = 4900 N


El peso de la carga es de 1000 kg x 9.8 m/s 2 = 9800 N

Observando el diagrama, se determina el momento producido por B


desde el punto PA.

ΣMA = 0
2m x B – 3m x (4900) – 4m x (9800) = 0

B = 26950 N

Desde el punto PA:

Σ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

ΣMo = 0: ΣMo = (–4900 x 3) – (9800 x 7) + (26950 x 2) = 0


Se debe considerar la relación peso (Newtons) y masa (Kilogramos).
Por conveniencia en la simulación, los atributos de las magnitudes
físicas en lo posible deben estar discriminados y desligados de

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.

Ejemplo elemental 3D: Para levantar la carga de 100 lbs se debe


encontrar la magnitud de la fuerza F que se aplica en un punto sobre la
manivela como lo indica la figura para mantener el equilibrio.

y
10”
F
10” 2”
8”
A 30º

z
10”
B

4” x

100 lbs

Figura 3.33 Fuerza sobre la manivela para mantener el equilibrio

y
10”
10”
2”
8”
A 30º
F
z
10”
100 lbs B

4” x

Figura 3.34 Diagrama de cuerpo libre

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

Se definen los vectores F, C y B:

F = 30 i + 10 sen 60º j – 10 cos 60 k

F = 30 i + 8.66 j – 5 k

C = 10 i + 4 k

B = Bx i + By j + Bz k

ΣMA = 0

ΣMA = ((Bx i + By j + Bz k) x 20 i) + ((10 i + 4 k) x 100 j)


+ ((30 i + 8.66 j – 5 k) x (–P j))

20By k – 20Bz j – 1000 k – 400 i – 30P k + 5P i = 0

(–400 + 5P) i – 20Bz j – (1000 + 30P k –20By) k =0

Igualando a 0 los coeficientes de i, j y k, es posible conocer el valor de


las incógnitas. Para el primer caso:

–400 + 5P = 0 P = 80 lbs

134
3.4.4.8 Palancas

Son muchos los ejemplos donde se aplican momentos y que se utilizan


frecuentemente en la vida diaria. Tal es el caso en las denominadas
palancas, la cual es un objeto que tiene un punto fijo o de apoyo
ubicado de cierta forma que permite establecer la fuerza con respecto
a la resistencia producida por el objeto.

Las palancas son de tres tipos:

Las palancas de primer género, cuyo punto de apoyo está ubicado


entre la fuerza y la resistencia, en la que se puede citar la fuerza que se
necesita para extraer de una tabla, un clavo con un martillo.

El segundo caso denominado de segundo género, se observa cuando


se lleva un peso en una carretilla. El peso que representa la resistencia,
está entre el punto de apoyo en la llanta contra el piso y la fuerza hacia
arriba en las asas para levantar la carretilla.

El tercer caso o tercer género, se aprecia en la fuerza que se hace


cuando se levanta con las manos un peso, siendo el codo el punto de
apoyo, el músculo del brazo hace la fuerza para contrarrestar la
resistencia hecha por el peso en la mano.

F
F
R O

O R O R

Figura 3.35 Tres géneros de palancas

135
Simulación Virtual Interactiva
.
3.4.4.9 Fuerzas de rozamiento

Las moléculas comprimidas de un cuerpo sobre una superficie


producen sobre el cuerpo una fuerza elástica dirigida desde la
superficie hacia dicho cuerpo y perpendicular a la superficie que se
denomina fuerza normal. Pero si se aplica al mismo cuerpo una
pequeña fuerza horizontal F, este no se moverá debido a la fuerza de
rozamiento producida por las fuerzas moleculares de la superficie.
Esta fuerza horizontal se denomina fuerza de rozamiento estático y
crece hasta cierto límite de proporción de la fuerza normal.

Fs ≤ μsN

siendo μs el coeficiente de rozamiento estático. Pero si hay


movimiento, la fuerza de rozamiento producida se denomina fuerza
de rozamiento cinético, opuesta al movimiento y se mantiene
constante a la normal,

Fk = μkN

siendo μk el coeficiente de rozamiento cinético. (En algunos libros se


habla del coeficiente de rozamiento dinámico o por deslizamiento).

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

Figura 3.36 Cuerpo sometido a una fuerza

136
Antes de moverse En movimiento

ΣFy = 0 ΣFy = 0

ΣFy = N – W = N – 20N = 0 ΣFy = N – W = N – 20N = 0

ΣFx = 0 ΣFx = 0

ΣFx = T – Fs = 6N – Fs = 0 ΣFx = T – Fk = 4N – Fk = 0
Fs ≤ κsN Fk = κkN

κs = Fs / N = 6N / 20N = 0.3 κk = Fk / N = 4N / 20N = 0.2

3.4.5 Dinámica del cuerpo rígido

3.4.5.1 II ley de Newton, ley de la dinámica

La II ley de Newton afirma que cuando la fuerza resultante que actúa


sobre un cuerpo no es nula, el cuerpo se mueve con movimiento
acelerado y la aceleración depende de la masa. Esta ley dice que “Una
fuerza F aplicada a un cuerpo le comunica una aceleración a de la
misma dirección y sentido que la fuerza, directamente proporcional a
ella e inversamente proporcional a la masa del cuerpo.”

ka = F/m

siendo k, una constante de proporcionalidad. Si k es 1, entonces:

F = ma

Esta ecuación es vectorial, así que al proyectarla sobre los ejes


coordenados, se obtienen las siguientes expresiones:

137
Simulación Virtual Interactiva
.
Fx = max Fy = may Fz = maz

Estas ecuaciones reciben el nombre de ecuaciones dinámicas del


movimiento. Si se conoce la masa se deducen las diferentes
aceleraciones y de aquí las ecuaciones cinemáticas del movimiento.

3.4.5.2 Masa y peso

Como se ha visto, la masa y el peso están relacionados por el efecto


que la gravedad ejerce sobre el cuerpo. La masa se relaciona con la
inercia del objeto y el peso es la representación de la fuerza con que la
tierra lo atrae en dirección hacia su centro (kilo–fuerza). El peso varía
de un lugar a otro. Se puede definir la masa como la medida de la
resistencia de un cuerpo al movimiento lineal o a un cambio de éste.
Cuando un objeto que posee cierta masa cae libremente, la fuerza que
actúa sobre él es su propio peso y la aceleración que adquiere es la
gravedad g que por lo general su valor es g = 9.8 m/s2. g es la
intensidad del campo gravitatorio de la tierra.

w = mg

Esta ecuación proviene de la II ley de Newton, f = ma. Los sistemas


de unidades que relacionan a la masa con el peso son:

Sistema MKS Newtons = Kilogramos x metro / segundo2


Sistema CGS Dinas = Gramos x centímetro / segundo2
Sistema Técnico Kilopondios = UTM x metro / segundo2
Sistema Técnico GB Libras = Slug x pie / segundo2
UTM: Unidad Técnica de Masa

El kilopondio (kilo-peso) o kilogramo-fuerza es la unidad de fuerza en


el Sistema Técnico de Unidades. Es una de las tres unidades
fundamentales de este sistema como son el metro (longitud) y el
segundo (tiempo).

1 kp = 1 kgf = 1 kg × 9,80665 m/s² = 9,80665 kg m/s2 = 9,80665 N

138
3.4.5.3 Centro de gravedad

Se debe tener presente que toda partícula de materia de un cuerpo es


atraída por la tierra y que la suma de todas las fuerzas es la que
proporciona el peso. La dirección de la fuerza sobre cada partícula se
dirige hacia el centro de la tierra, donde supuestamente se encuentran,
pero debido a la distancia que hay entre una línea de fuerza y otra, se
consideran paralelas. Por lo tanto, toda la fuerza de la gravedad está
aplicada en un punto al que se denomina centro de gravedad CG.
x1, y1
w1
x1, y1
x w1 x X,Y
X,Y W
CG
CG
x2, y2
w2
w2
W
x2, y2
w
y y
Figura 3.37 Resultante de fuerzas paralelas

En la figura se aprecia un cuerpo cualquiera en el plano (xy),


compuesto por partículas con pesos w1, w2, etc. Las coordenada de
cada partícula están dadas por (x1,y1), (x2,y2), etc. El peso del cuerpo
entonces será la suma de los pesos de cada partícula:

W = w1 + w2 + ... = Σw
El momento total en el objeto corresponde a la suma de los momentos
independientes de las partículas:

WX = w1x1 + w2x2 + ... = Σwx


Las coordenadas del centro de gravedad del cuerpo plano son:

X = (w1x1 + w2x2 + ...) / W = Σwx/W


Y = (w1y1 + w2y2 + ...) / W = Σwy/W

139
Simulación Virtual Interactiva
.
3.4.5.4 Fuerza centrípeta y centrífuga

La aceleración centrípeta (ac = v2 / r) da lugar a una fuerza dirigida


hacia el centro de una trayectoria curvilínea y recibe el nombre de
fuerza centrípeta. A esta fuerza le corresponde una reacción igual y
opuesta, la cual se denomina fuerza centrífuga. La fuerza centrípeta
está definida como:

F = ma = m (v2/r) = m (ω2r )

3.4.5.5 Ley de la gravitación universal

Newton dedujo la ley de la gravitación universal gracias a las leyes


empíricas de Kepler14. Estas leyes son:

1. Los planetas se desplazan en elipses y cuyo foco es el sol.


2. La recta que une un planeta al sol delimita áreas iguales en
tiempos iguales.
3. Los cuadrados de los períodos de los planetas son
proporcionales a los cubos de las distancias medias al sol.

De la primera y tercera ley de Kepler, Newton enunció la ley de la


gravitación universal, la cual dice: “Dos partículas ejercen una sobre
otra una fuerza de atracción dirigida sobre la línea que las una y
proporcional a sus masas e inversamente proporcional al cuadrado
de las distancias que las separa.”

Las trayectorias que describen los planetas son elípticas, casi


circulares. La fuerza del sol sobre un planeta es:

F = m (v2 / r) = m/r (2πr /T ) 2 = m4π2r / T2

Siendo r la distancia del sol al planeta y T el período al planeta. De la


tercera ley de Kepler:

14
Johannes Kepler (1571-1630), astrónomo alemán.

140
T2 = k r3

Siendo k una constante, entonces se puede escribir que:

F = G mM / r2

El valor de G es igual a 6,673 x 10–11 N m2 / kg2 y se le conoce como


la constante gravitacional. Pero en la superficie de la tierra y al nivel
del mar, esta constante tiene un valor de 9.8 m/s2, por eso se dice que
G varía con la altitud. Es posible determinar entonces cuál es el valor
que representa G para el ejemplo del satélite orbitando a 300 km sobre
la tierra (numeral 3.4.3.11 ) con la siguiente ecuación:

g' = GMe / (Re + h) 2

Donde Me es la masa de la tierra, la cual equivale a 5.98 x 1024 kg, Re


es el radio de la tierra y equivale a 6.38 x 106 m y h la altura a la que
se encuentra un objeto, en este caso el satélite. Reemplazando, se
obtiene que:

g' = (6,673 x 10–11 N m2 / kg2) x (5.98 x 1024 kg) / (6.38 x 106 + 3.0 x
105 ) 2

g' = 8.93 m/s2

En caso de que sea un objeto que esté sobre la superficie de la tierra, h


es igual a 0 y por lo tanto

g' = g = 9.8 m/s2

El valor de g varía además con la latitud. En el polo mide 9.832 m/s2 y


en el ecuador equivale a 9.779 m/s2, indicando que la tierra es
achatada en los polos.

Colombia = 9.8 Chicago = 9.803


Nivel del mar = 9.80665 México = 9.7815

141
Simulación Virtual Interactiva
.
3.4.5.6 Campo gravitacional

La fuerza gravitacional se considera una fuerza a distancia y por esto


se puede introducir el concepto de campo, el cual es un transmisor de
fuerzas gravitacionales entre los cuerpos. Su intensidad es:

Eg = F/m N kg

La dirección de Eg es en la misma dirección del vector F. El campo


gravitacional en la superficie terrestre es

w = Eg m

Eg = g

3.4.5.7 Masa inercial y masa gravitacional

La ecuación de la II ley de Newton f=ma se puede escribir como


f=mia, siendo mi la masa inercial o masa en reposo. Esta masa resulta
de la aceleración producida por una fuerza aplicada al cuerpo y su
medición necesita movimiento. La masa gravitacional de un cuerpo
resulta de la atracción del cuerpo por otro y su medición no necesita
movimiento. Por experimentación, la relación de las magnitudes de
los pesos w de dos cuerpos en un mismo lugar es independiente del
lugar escogido en donde se hace la comparación. Esta relación define
la masa gravitacional como:

mg = w2 /w1

3.4.5.8 Trabajo, potencia y energía

El trabajo como magnitud escalar, es realizado por una fuerza sobre


un cuerpo cuando actúa contra otra fuerza que tiende a impedir el
movimiento de dicho cuerpo.

142
F

F cos 

Figura 3.38 Trabajo realizado por una fuerza

El trabajo realizado por la fuerza F se define como el producto del


desplazamiento s por la componente de la fuerza en la dirección de s.
Por tanto,

W = (Fcosθ )s

En caso de que la fuerza lleve el mismo sentido al desplazamiento (θ =


0):

W = Fs

Las unidades MKS y CGS están dadas en Newton.metro = J (julio) y


en dina.cm = ergio respectivamente. En el Sistema Técnico se utiliza
el kilopondímetro (9,81 J).

1 J = 107 erg

En el trabajo realizado por una fuerza sobre un objeto o una partícula,


el punto de aplicación de esa fuerza se mueve hacia alguna distancia y
la fuerza tiene una componente a lo largo de la línea de movimiento.

Cuando un automóvil frena para disminuir velocidad, el trabajo lo


realiza el auto contra el rozamiento, el cual se opone al movimiento.
En este caso F y s tienen la misma dirección, pero sentido contrario.

143
Simulación Virtual Interactiva
.

-F

Fr
s

Figura 3.39 Trabajo negativo. El cuerpo es el que realiza el trabajo

3.4.5.9 Trabajo realizado por una fuerza variable

Si la fuerza se desplaza en s, se puede dividir en porciones


elementales ∆s. Aquí la fuerza se puede considerar constante y por lo
tanto el trabajo elemental es:

W = F∆s cosθ

y el trabajo total será la suma de todos los trabajos elementales:

W = Σ∆W = ΣF∆s cosθ


Una integral propiamente dicha, representa la variación de F con
respecto a s. Si el área bajo la curva se divide en pequeños
rectángulos, su suma es aproximadamente igual al trabajo total
realizado durante el desplazamiento. A mayor cantidad de rectángulos,
mejor es la aproximación. El área bajo la curva es:

S2
W= F ∫ ds
S1

Se puede calcular el trabajo de la fuerza recuperadora cuando se estira


un arco o un resorte como indica la siguiente figura.

144
x
F F

Figura 3.40 La fuerza que alarga el resorte es proporcional a su elongación

Para mantener estirado el resorte en una elongación x, se ejerce la


fuerza en un extremo. Se obtiene a la vez una fuerza igual y opuesta
en el otro extremo. Si la elongación no es demasiado grande,
entonces:

F = kx

El trabajo realizado por la fuerza en el extremo fijo es 0. Por lo tanto


el trabajo lo realiza la fuerza variable en el extremo móvil, la cual
tiene la misma dirección que el desplazamiento. El trabajo necesario
para estirar el resorte desde 0 hasta x está dada por:

x x
W= F ∫dx = ∫ kx dx = ½ kx2
o o

El trabajo es igual a la mitad del producto de la constante de


recuperación k por el cuadrado de la elongación final.

W = ½(kxo + kx)(xo–x) = ½ k(xo+x)(xo–x)

W = ½ kxo2 – ½ kx2

145
Simulación Virtual Interactiva
.
3.4.5.10 Potencia

La potencia permite conocer la cantidad de trabajo que se ha


realizado en la unidad de tiempo. Por esto se definen dos tipos de
potencia, potencia media y potencia instantánea.

La potencia media es el trabajo realizado en el tiempo transcurrido:

P=W/t

La potencia instantánea en un instante dado, es la razón del trabajo


elemental en el intervalo de tiempo cuando éste tiende a 0.

P = lim ∆w / ∆t
∆t→ 0

Las unidades MKS son (Julio/seg) J/s = W (watio)

El sistema británico define:

1 HP (caballo de fuerza) = 746 W


1 CV (caballo de vapor) = 735 W

3.4.5.11 Potencia y velocidad

Si ∆t→ 0 entonces

P = ∆w / ∆t = F∆s cosθ /∆t

P = Fv cos θ

Ejemplo elemental: Un motor de avión a reacción desarrolla un


empuje de 15000 N. Cuando el avión vuela a 600 millas por hora, se
puede averiguar cuántos HP desarrolla.

600 mph = 600 x 0.4470 m/s = 268.2 m/s

146
P = Fv = (15000 N)(268.2 m/s) = 4 x 106 W

P = 4 x 106 W (1 HP/ 746 W) = 5392.6 HP

3.4.5.12 Trabajo y energía cinética

Retomando la velocidad definida y en función de ésta, se puede


calcular el trabajo que hace una fuerza sobre un cuerpo de masa m
durante el desplazamiento s. Como se sabe:

F = ma

Multiplicando los dos miembros por el desplazamiento s, se tiene que:

Fs = mas

La aceleración es constante y el movimiento es uniformemente


acelerado, entonces:
v2 = vo2 + 2as

as = ½ ( v2 – vo2 )
Por lo tanto:
Fs = m ½ ( v2 – vo2 )
Es decir:
W = ½ m v2 – ½ m vo2

Esto se puede escribir como:

W = Ec – Eco

Donde la energía cinética de la partícula está dada por:

Ec = ½ m v2

Las unidades están definidas por:

Julios = kg x m/s2

147
Simulación Virtual Interactiva
.

ergios = gr x cm/s2

kpm = utm x m/s2

Ejemplo elemental: Una fuerza de 15 N arrastra desde el reposo un


objeto de masa 4 kg, una distancia de 7 m.

El trabajo de la fuerza es W = Fs = 15 x 7 = 105 jul

La energía cinética final es W = Ec – Eco = 105 – 0 = 105 jul

La velocidad del objeto es v2 = vo2 + 2as = 0 + 2(F/m) s = 2


(15N/4 kg) 7 m
v = 7.2457 m/s

Comprobando se tiene que Ec = ½ m v2 = ½ 4 kg (7.2457 m/s) 2 =


105.0 jul

3.4.5.13 Energía potencial

Cuando existe un campo de fuerza, las fuerzas sobre un cuerpo


producidas por otro dependen de la posición del cuerpo en el espacio.
Se dice que hay energía potencial.

3.4.5.14 Energía potencial gravitacional

La fuerza gravitacional que actúa sobre la superficie de la tierra es


constante. El trabajo que realiza el peso de un objeto en el
desplazamiento en la altura es:

W = mgs

148
W = mg (ho – h)

Por lo que se puede escribir:

W = mgho – mgh

Esto se presenta incluso para un objeto que se desliza sin rozamiento


por un plano inclinado, lo que quiere decir, que sólo depende de las
alturas inicial y final, es positivo cuando el objeto sube y negativo
cuando baja.

Entonces la energía potencial de un objeto de masa m en el campo de


fuerzas gravitacionales con respecto a la tierra es:

Ep = mgh

donde,
W= Epo – Ep

Ejemplo elemental: Un cuerpo de 10 kg cae libremente desde una


altura de 8 m. Se puede calcular la energía cinética en el momento de
llegar al suelo y demostrar que es igual a la energía potencial del
mismo antes de caer.

Después de caer 8 m,

v2 = vo2 + 2as

v2 = 2gh = 2 x 9.8 m/s2 x 8 m = 156.8 m2/s2

Ec = ½ m v2 = ½ x 10 kg x 156.8 m2/s2

Ec = 784 J

Ep = mgh = 10 kg x 9.8m/s2 x 8m = 784 J

149
Simulación Virtual Interactiva
.
3.4.5.15 Energía potencial elástica

Retomando el caso del resorte, cuando se estira debido a las


interacciones moleculares, aparece una fuerza recuperadora F =kx. El
trabajo de esta fuerza cuando el extremo del resorte se desplaza es:

W = ½ kxo2 – ½ kx2

De aquí se puede expresar que:

Ep = ½ kx2

Considerada como la energía potencial del resorte, donde

W= Epo – Ep

3.4.5.16 Fuerzas conservativas

En los casos anteriores se vio que el trabajo de las fuerzas de


gravedad o elásticas para ir de un punto al otro, es independiente del
camino recorrido por lo tanto estas fuerzas se denominan fuerzas
conservativas. Las fuerzas de fricción no son conservativas sino más
bien fuerzas disipativas, puesto que dependen del camino recorrido.

Una fuerza es conservativa si el trabajo total que realiza sobre una


partícula es 0 cuando la partícula recorre una trayectoria cerrada y
vuelve a su posición inicial. En resumen, el trabajo de una fuerza
conservativa tiene las siguientes propiedades:

- Es independiente de su trayectoria.

- Es igual a la diferencia entre los valores final e inicial de una


función de energía potencial.

- Es recuperable en su totalidad.

150
3.4.5.17 Conservación de la energía

Por el teorema de la energía cinética se sabe que W = Ec – Eco y el


trabajo de las fuerzas conservativas es W= Epo – Ep, por lo tanto se
deduce que:

Epo – Ep= Ec – Eco

Al ordenar se tiene que:

Ep – Ec = Epo – Eco

relación que representa el teorema de la “conservación de la energía


mecánica”, que dice que “cuando las fuerzas conservativas actúan en
un cuerpo, la energía mecánica total inicial (cinética más potencial),
es igual a la energía mecánica total final.”

Et = Ep + Ec

∆Ep + ∆Ec = ∆(Ep + Ec) = 0

En otras palabras, cuando las fuerzas conservativas sólo realizan


trabajo, la energía mecánica total de la partícula permanece constante
debido a que el aumento de energía cinética es igual a la disminución
de la energía potencial. Con el ejemplo del resorte, se puede decir que
si se estira más allá del límite, se deforma permanentemente y el
trabajo realizado en la deformación no se recupera cuando se suelta.

x*n

Figura 3.41 La fuerza que alarga el resorte superó su elongación

151
Simulación Virtual Interactiva
.
3.4.6 Rotación del cuerpo rígido

3.4.6.1 Masa y centro de masa

Se había visto que el momento de una fuerza con respecto a un eje, es


el producto del módulo de la fuerza por la distancia de su directriz al
eje. Prácticamente el momento es una medida que indica la capacidad
de una fuerza para producir en un cuerpo, un movimiento de rotación
alrededor de un eje, pero que dicho cuerpo se opone a la rotación del
mismo. Por otra parte, el punto del cuerpo alrededor del cual la masa
está uniformemente distribuida, se llamó centro de gravedad y que se
puede denominar también centro de masa. El centro de masa es el
punto en el cual una fuerza puede actuar en el cuerpo sin hacer que
éste rote. Además, se habían deducido las coordenadas x,y del centro
de gravedad y convenientemente se definió la sumatoria del peso y
momentos independientes de cada partícula. Para un cuerpo sólido
hecho de partículas, la masa total es la suma de las partículas
elementales que conforman dicho cuerpo, donde la masa de cada
partícula es la densidad ξ de su respectiva masa multiplicada por su
volumen. Si el cuerpo es de densidad uniforme la masa total es:

m = ∫ρdv = ρ ∫dv

Entonces, el centro de gravedad de un cuerpo está definido por:

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

Para un sistema de masas puntuales discretas las ecuaciones para


calcular el total de masas y CG, pueden ser escritas en forma vectorial:

m t =Σ m i

CG = (Σcgi mi) / mt

donde mt es el total de las masas, mi es la masa de cada punto de masa


del sistema, CG centro de gravedad y cgi es la ubicación de cada
centro de gravedad de cada punto de masa.

3.4.6.2 Momento de inercia

Entre las denominadas fuerzas distribuidas, el momento de inercia es


simplemente la resistencia que hace el cuerpo para oponerse al
movimiento rotacional o cambio en la velocidad angular. A diferencia
de las áreas en figuras planas, el momento de inercia depende de la
masa total del sólido y de su distribución con respecto a un eje de
rotación.
A
A

r2 r1  m1 k
∆ m2
A A
‟ ‟

Figura 3.42 Cuerpo de masa m que gira respecto a un eje AA’

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:

I = m1 r12 + m2r22 + … = Σ mr2


cuyas unidades están dadas en kg.m2

Para el caso del cuerpo rígido el momento de inercia de la masa es la


medida cuantitativa de la distribución radial de la masa del cuerpo
cerca de un eje de rotación dado.

Para calcularlo se necesita tomar el segundo momento de cada masa


elemental alrededor de dicho eje. El segundo momento es el producto
de la masa por la distancia al cuadrado.

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

A diferencia del centro de masa, el brazo r de acción o radio de giro


es la distancia perpendicular desde el eje alrededor del cual se necesita
calcular el momento de inercia. Está dado por:

I = r2m
donde r es:
r = sqrt ( I / m)

Las ecuaciones para el momento de inercia de la masa alrededor de


los tres ejes son:

154
Ixx = ∫ r2x dm = ∫ (y2 + z2) dm

Iyy = ∫ r2x dm = ∫ (x2 + z2) dm

Izz = ∫ r2z dm = ∫ (x2 + y2) dm

Véase el Anexo 2 de figuras y sus respectivos momentos de Inercia.

Ejemplo elemental: Se necesita determinar los momentos de inercia


de la masa respecto a los ejes coordenados de la pieza de acero de la
siguiente figura cuyo prisma mide 6 x 2 x 2 in y el cilindro de 2 in de
diámetro y 3 in de longitud. El peso específico del acero es de 490
lb/ft3.

Uno de los procesos comunes que hay que establecer o ientificar


primero corresponde a las unidades de los factores que intervienen en
el problema, tal es el caso del peso específico del acero, cuyas
unidades están dadas en lb/ft3. Para el caso de este ejemplo, definimos
el valor de la gravedad g como 32.2 ft/s2.

Y
2.5 in

1 in

2 in
3 in
X 6 in

Z
2 in

2 in

Figura 3.44 Cuerpo compuesto por formas comunes

155
Simulación Virtual Interactiva
.

Los valores para el prisma son:

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

Los valores para el cilindro son:

Volumen = π (1in)2 (3in) = 9.42 in3


Peso = (9.42 in3) (490 lb/ft3) = 2.67 lbs
Masa = 2.67 lbs / 32.2 ft /s2 = 0.082 lbs. s2/ft

Momentos de Inercia

Prisma

Ix=1/12(0.211 lbs. s2/ft)((6 in) 2 + (2 in) 2)=4.88x10–3 lbs. s2 ft


Iy=1/12(0.211 lbs. s2/ft)((2 in) 2 + (2 in) 2)=0.97x10–3 lbs. s2 ft
Iz=1/12(0.211 lbs. s2/ft)((6 in) 2 + (2 in) 2)=4.88x10–3 lbs. s2 ft

Cilindro

Ix = 1/12 ma2 + my2


Ix = 1/12 (0.082 lbs. s2/ft)(1 in) 2 + (0.082 lbs. s2/ft)(2 in) 2
Ix = 2.59 x 10–3 lbs.s2 ft

Iy = 1/12 m(3a2 + L2)


Iy = 1/12 (0.082 lbs. s2/ft)(3(1 in) 2 + (3 in) 2 ) +
(0.082 lbs. s2/ft)(2.5 in) 2
Iy = 4.17 x 10–3 lbs.s2 ft

Iz = 1/12 m (3a2 + L2) + m (x2 + y2) =


1/12 (0.082 lbs. s2/ft) (3(1 in) 2 +
(3 in) 2 ) + (0.082 lbs. s2/ft)((2.5 in) 2 + (2 in) 2)
Iz = 6.48 x 10–3 lbs.s2 ft

156
Cuerpo compuesto

Ix =4.88 x 10–3 lbs. s2 ft + 2.59 x 10–3 lbs.s2 ft = 10.0 x 10–3 lbs.s2 ft


Iy =0.97 x 10–3 lbs. s2 ft + 4.17 x 10–3 lbs.s2 ft = 9,32 x 10–3 lbs.s2 ft
Iz =4.88 x 10–3 lbs. s2 ft + 6.48 x 10–3 lbs.s2 ft = 17.8 x 10–3 lbs.s2 ft

3.4.6.3 Teorema de Steiner o del eje paralelo

Este teorema establece que el momento de inercia de una masa


respecto a un eje cualquiera AA‟ se puede expresar como:

I = Io + md2

y en términos del radio de giro:

r = sqrt ( ro2 + d2 )

donde Io es el momento de inercia del cuerpo respecto a un eje


centroidal paralelo al eje AA‟, m es la masa del cuerpo y d la distancia
entre los dos. El nuevo momento de inercia es una función de la
distancia que separa los ejes al cuadrado, lo que significa que en casos
de que Io sea conocido al ser relativamente pequeño y d relativamente
grande, se puede ignorar Io, por lo que el término md2 se vuelve
dominante.

Ejemplo elemental: Hallar el momento de inercia de un disco


delgado uniforme de radio R = 1 m y masa = 1 kg, respecto a un eje
perpendicular a su plano y que pasa por el borde.

Figura 3.45 Disco uniforme

157
Simulación Virtual Interactiva
.
Como Icm = MR2/2

Ip = Icm + MR2 (teorema del eje paralelo)

Ip = MR2/2 + MR2

Ip = 3MR2/2 = 3(1)(1)/2 = 3/2 kg m2

3.4.6.4 El tensor de inercia

Un tensor es una expresión algebraica que tiene varias componentes


como magnitud y dirección pero esta magnitud es variable y depende
de la dirección. Las tensiones al interior de un cuerpo rígido o de un
fluido son ejemplos de tensores. Tal es el caso de una tela y una hoja
de papel. En cierto tipo de problemas, se incluye el término inercia
reducido a un escalar el cual representa el momento de inercia. En el
espacio tridimensional, el cuerpo rígido puede rotar en los tres ejes,
incluyendo ejes arbitrarios.

El tensor de inercia I es una matriz de 3 x 3.

Ixx Ixy Ixz

Iyx Iyy Iyz

Izx Izy Izz

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.

Ixx = ∫(y2 + z2) dm

Iyy = ∫(x2 + z2) dm

Izz = ∫(x2 + y2) dm

158
Ixy = Iyx = ∫(xy) dm

Ixz = Izx = ∫(xz) dm

Iyz = Izy = ∫(yz) dm

Al igual que el teorema del eje paralelo, existe una transferencia


similar de ejes que se aplican al producto de inercia:

Ixy = Io(xy) + mdxdy

Ixz = Io(xz) + mdxdz

Iyz = Io(yz) + mdydz

El tensor de inercia se calcula a lo largo de ejes que pasan a través del


CG del cuerpo rígido compuesto en un sistema de coordenadas de
cuerpo fijo o locales. Por su definición, el momento de inercia se
calcula con respecto a un eje de rotación.

El momento angular de un cuerpo rígido rotando alrededor de los ejes


que pasan a través del origen del sistema local corresponde al
producto del tensor de inercia del objeto por la velocidad angular. Las
unidades son kg m2 rad/s.

L = Iω

3.4.6.5 Trabajo y potencia de rotación

El trabajo realizado en un cuerpo en movimiento de rotación se debe


a una fuerza aplicada en él y está expresado en función del momento
de la fuerza y del desplazamiento angular. El trabajo de la fuerza es:

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

El valor real de ds = R dζ, por lo que

dW = FR dζ

Si Γ = FR, definido como el momento de la fuerza, entonces:

dW = Γ dζ

Si el momento es constante mientras el ángulo varía en un límite


finito, entonces:

dW = Γ ∆ζ

Γ está expresado en Newton–metro y el trabajo W en Joules.

Dividiendo ambos miembros de la ecuación entre dt:

dW/dt = Γ dθ /dt

Aquí se puede deducir que dW/dt es el trabajo realizado en la unidad


de tiempo lo que significa potencia de rotación, dada en watios y

160
dθ/dt que es la velocidad angular en rad/s. Se puede expresar esta
ecuación como:
P = Γω

En el movimiento rectilíneo es análogo al decir que P = Fv.

Ejemplo elemental: Sobre una rueda de 0.7 m de radio y momento de


inercia de 5 utm.m2, se aplica tangencialmente una fuerza de 10 kp.

La aceleración angular es:

α = 10 kp x 0.7 m / 5 utm.m2 = 1.4 rad/s2

La velocidad angular al cabo de 6 s desde el reposo es:

ω = ωo + α t = 0 + 1.4 rad/s2 x 6 = 8.4 rad/s

El ángulo es:

ζ = ζo + ωot + ½ α.t2 = 0 + ½ (1.4 rad/s2) x 6 2 = 25.2 rad

El número de vueltas en ese tiempo es:

n = ζ /2π = 4 rev

El trabajo realizado es:

W = Γζ = (10 kp x 0.7 m) x 25.2 rad = 176.4 kpm

Ejemplo elemental: Un motor gira a 3600 rpm y el momento es de


158 N.m. La potencia es:

P = Γω =158 m.N x (3600/60 x 2π) = 59,564.6 W

Como 1 HP = 745.7 W

161
Simulación Virtual Interactiva
.

Pot =59,564.6 W / 745.7 W = 79.8 HP

3.4.6.6 Momento y aceleración angular

Un par de momento Γ actuando sobre un sólido de momento de


inercia I, le comunica una aceleración angular α dada por:

Γ = Iα

Las unidades están dadas en:

m.kp = utm.m2 x rad/s2


m.N = kg.m2 x rad/s2
cm.dina = g.cm2 x rad/s2

Ejemplo elemental: Una hélice de una avioneta pesa 70 kp y tiene un


radio de giro de 0.5 m. Hallar el momento de inercia y el momento del
par que le transmite una aceleración angular de 25 rad/s2.

I = mr2 = 70/9.8 utm x 0.25 m2 = 1.78 utm.m2

Γ = Iα = 1.78 utm.m2 x 25 rad/s2 = 44.5 m.kp

3.4.6.7 Energía cinética de rotación

La energía cinética de un cuerpo es la suma de las energías cinéticas


de todas las partículas, por lo tanto:

E= Σ ½ mivi2
Para un cuerpo que gira:
vi = ri ω

Reemplazando:

162
E= Σ ½ mi ri2ω2 = ½ ω2 Σ mi ri2

Por lo que:
E = ½ I ω2

Ejemplo elemental: Una fuerza tangencial de 10 N es aplicada sobre


un disco en reposo de masa 1 kg y de radio 1 m, durante 6 s.

Como Icm = mr2/2 y Γ = Iα

La aceleración angular es:

α = Γ/I = (10N x 1m) / (1kg. 12)/2 = 5 rad/s2

El desplazamiento es:

ζ = + ½ α.t2 =1/2 5 x 62 = 90 rad

La velocidad angular final es:

ω2 = 2αζ = 2 x 5 rad/s2 x 90 rad = 900

ω = sqrt(900) = 30 rad/s

El trabajo de la fuerza es:

W = Γζ = (10N x 1m)(90 rad) = 900 jul

Convertido a energía cinética:

E = ½ I ω2 = ½ ((1 kg. 12)/2) x 900 = 225 jul

163
Simulación Virtual Interactiva
.
3.4.6.8 Fuerza de Coriolis

Cuando un objeto se desplaza en un sistema giratorio, sufren una


aceleración adicional producida por una fuerza que es perpendicular a
su velocidad, la cual lo hace desviarse de tal manera que su trayectoria
describe una curva. Es conocida como una fuerza ficticia y recibe el
nombre de fuerza de Coriolis15. El caso típico de esta fuerza se aprecia
en los barcos y aviones desde un sistema de referencia no inercial.
Cuando lo hacen por ejemplo viajando de norte a sur y como la tierra
está constantemente girando sobre su eje, hace que la posición del
avión cambie constantemente hacia el Oeste, describiendo una curva
aunque su trayectoria realmente es una línea recta. Si un cuerpo gira
más rápido que la Tierra el efecto de la Fuerza de Coriolis será
despreciable. La fuerza de Coriolis está dada por:

Fc = -2mω x v

Trayectoria deseada

Trayectoria real

Figura 3.47 Fuerza de Coriolis

No es una fuerza real ya que no hay nada que la produzca,


simplemente se dice que es un efecto producido por la rotación de la
tierra. Hay demostraciones en sistemas rotatorios que describen la
trayectoria curvilínea aparente de un objeto, como lanzar a alguien
una bola en un plano que gira. Con el péndulo de Foucault16 se
demostró la rotación de la tierra.

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

3.4.7.1 III ley de Newton, ley de acción y reacción

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

Denominado también como Impulsión (J), y definido como Ft, es una


magnitud vectorial cuya dirección y sentido coincide con el de la
fuerza. Partiendo de la conocida ecuación v = vo + at, la cual se
multiplica por m, se obtiene que:

mv = m vo + mat
es decir
mv = m vo + Ft

despejando el impulso Ft se tiene que:

Ft = mv – m vo

En general, si una fuerza constante F actúa durante un intervalo de


tiempo entre t1 y t2, el impulso de la fuerza se define como:

t2
J = F (t2 – t1 )= ∫ F dt
t1

3.4.7.3 Momento lineal

Conocido comúnmente como ímpetu, y denominado además como


“cantidad de movimiento” o “momentum”, el momento lineal p es
una magnitud vectorial cuya dirección y sentido coincide con el de la
velocidad.

165
Simulación Virtual Interactiva
.
p = mv

En función de la ecuación Ft = mv – mvo, significa que el impulso de


una fuerza desde el instante 0 al instante t es igual a la variación del
momento lineal durante ese intervalo.

F (t2 – t1 ) = mv2 – mv1

Las unidades del momento lineal en el sistema MKS es el kg.m /s, en


el CGS es g.cm/s y en el Sistema Técnico slug.pie–s.

Ejemplo elemental: Un jugador golpea una pelota de 200 g con una


velocidad de 12 m/s y sale en la misma dirección pero en sentido
contrario con una velocidad de 25 m/s. Sabiendo que la duración del
golpe es de 0.02 s, hallar la fuerza media ejercida por el jugador sobre
la pelota.

Ft = m(v – vo)

F = ((0.2 kg / 9.81 m/s2) utm x (25 –(12))m/s ) / 0.02s = 37.7 kp

3.4.7.4 Conservación del momento lineal

En un choque entre dos o más cuerpos, el vector resultante o suma de


los vectores momento lineal, después del choque es igual al
correspondiente a los momentos lineales antes de él.

La suma algebraica de los componentes del momento lineal en una


dirección cualquiera, no varía por efecto del choque. Por lo tanto, en
el choque de dos cuerpos de masa m1 y m2, se tiene que:

momento lineal del sistema antes del impacto = momento lineal


después del impacto

166
m1 u1 + m2 u2 = m1 v1 + m2 v2

donde u1 y u2 son las velocidades de los cuerpos 1 y 2 antes del


choque y v1 y v2 las velocidades después del choque.

Ejemplo elemental: El caso del péndulo balístico. Una bala de 20 g


es disparada horizontalmente sobre un bloque de madera de 3 kg.
Calcular la velocidad de la bala si el bloque de madera oscila
alcanzando una altura de 20 cm por encima de la posición inicial.

20 cm

Figura 3.48 Velocidad de impacto

La velocidad del sistema (madera + bala), después del impacto es


igual a la velocidad que adquiriría cayendo libremente desde una
altura de 20 cm.

vs = sqrt (2gh) = sqrt( 2(9.8)0.2) = 1.98 m/s

El momento lineal del sistema (madera + bala) antes del impacto =


momento lineal del sistema después del impacto:

v = ((m + M)/m)vs

(20g )v + 0 = ( 20 + 3000g ) 1.98 m/s , v = 0.3 Km/s

Ejemplo elemental: ¿cuál es la velocidad de retroceso del arma?.

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:

Mb / Mp sqrt(1 / (Mb / Mp + 1)) = – Vi /Vf

-300(20/1000) sqrt (1 / (20/1000+1) ≈ –5.8 m/s (hacia atrás)

Ejemplo elemental: La bola A de masa 500 g se mueve con respecto


al eje x con una velocidad de 2 m/s y choca con la bola B de masa 450
g, inicialmente en reposo. Después del choque la velocidad de A es 1
m/s con una dirección θ de 30º. Es posible averiguar la velocidad final
de B y su dirección.

A VA2

A VA1 A 

B B

VB

Figura 3.49 Conservación del momento lineal

Tal como en el caso de equilibrio de fuerzas, la conservación del


momento lineal requiere que la sumatoria de las componentes en x,
antes y después del choque, sean iguales. Lo mismo para y. En x:

(0.5 kg)(2 m/s)+(0.45 kg)(0)= (0.5 kg)(1 m/s)(cos 30) + (0.45 kg) VBx

VBx = (1 kg m/s – 0.43 kg m/s) / 0.45 kg = 1.2 m/s

En y:

168
(0.5 kg)(0) + (0.45 kg)(0) = (0.5 kg)(1 m/s)(sen 30) + (0.45 kg) VBy

VBy = (0 – 0.25 kg m/s) / 0.45 kg = –0.6 m/s

La magnitud de VB es = sqrt ((1.2 m/s)2 + (–0.6 m/s)2) = 1.34 m/s

La dirección es = tan–1 (–0.6/1.2) = 26.6º

3.4.8 Colisiones o choques

3.4.8.1 Colisiones

Cuando se presenta un choque frontal, la ley de conservación de la


energía mecánica no es suficiente para determinar las velocidades
finales correspondientes. Incluso cuando se involucra mayor número
de masas o cuerpos, crecen el número de ecuaciones y por lo tanto
más incógnitas.

Para lograr un mejor desarrollo y análisis de problemas como estos, se


necesita analizar los diferentes tipos de colisión.

3.4.8.2 Choques elásticos

O perfectamente elásticos, en un choque frontal se definen cuando la


energía cinética total antes de la colisión es igual a la energía cinética
después de la colisión, momento en que los cuerpos se separan y
adquieren velocidades diferentes.

Ejemplo elemental: El choque en la figura 3.50 es completamente


elástico. Si la masa de A es 5 kg y su velocidad es de 2 m/s, B es de 3
kg y su velocidad es de –2 m/s, se puede averiguar sus velocidades
respectivas.

169
Simulación Virtual Interactiva
.

A
B

Figura 3.50 Colisión completamente elástica

Debido al principio de la conservación del momento lineal:

(5 kg)(2m/s) + (3kg)(–2m/s) = (5 kg)vA2 + (3 kg)vB2

5vA2 + 3 vB2 = 4 m/s

Como el choque es completamente elástico, entonces:

vB2 – vA2 = – (vB1 – vA1 ) = 4 m/s

Resolviendo se tiene que:

vA2 = – 1 m/s (hacia la izquierda), vB2 = 3 m/s (hacia la derecha)

La energía cinética total es:

½(5 kg)(– 1m/s)2 + ½(3 kg)(3 m/s) 2 = 16 J

3.4.8.3 Choques inelásticos

O perfectamente inelásticos, como en el caso del péndulo balístico de


la figura 3.48, se presenta cuando los dos cuerpos quedan adheridos
después de la colisión (madera + bala), la velocidad de un cuerpo es
igual a la velocidad del otro cuerpo y la energía cinética se transforma
en calor o energía interna.

vA = vB

170
3.4.8.4 Coeficiente de restitución

Cuando se produce un choque entre dos cuerpos, el coeficiente de


restitución e es un valor que expresa la relación entre la velocidad
relativa con que se separan después del choque y la correspondiente
de aproximación antes de él.

e = (v2 – v1) / (u1 – u2)

donde u1 y u2 son las velocidades de los cuerpos 1 y 2 antes del


choque y v1 y v2 las velocidades después del choque. Si el choque es
elástico, e =1. Si el choque es totalmente inelástico, e = 0 (los cuerpos
siguen unidos). Para otros tipos de choques, e está entre 0 y 1.

Ejemplo elemental: Una bola A de 500 g que se mueve a una


velocidad de 2 m/s choca contra una bola B de 450 g que se mueven
en la misma dirección con sentido contrario, a una velocidad de –1.34
m/s. Se puede hallar la velocidad de cada una después del choque, si
el coeficiente de restitución es 0.5.

m1=0.5 kg m2=0.45 kg u1=2 m/s u2= –1.34 m/s

e = (v2 – v1) / (u1 – u2) 0.5 = ( v2 – v1 ) / (2 – (–1.34)) m/s

v2 – v1 = 1.67 m/s v1 = 1.67 – v2

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

0.4 + 0.835 = 1.34 v2 + 0.5 v2 v2 = 0.67 m/s v1 = –1 m/s

3.4.8.5 Colisiones sin fricción

En las colisiones sin fricción, la línea de acción de impacto es una


línea perpendicular o normal a la superficie de colisión. Cuando la

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.

Impacto directo Impacto central Impacto oblicuo

Figura 3.51 Tipos de impactos en colisiones sin fricción

Ejemplo elemental: Se considera ahora el caso más común de la


colisión entre dos bolas de billar cuyo diámetro estándar es de 5.72 cm
y cada una pesa 0.156 kg. Asumiendo que la colisión es casi
perfectamente elástica con un coeficiente de restitución de 0.9. Si la
velocidad v de la bola 1 cuando golpea a la bola 2 es de 6 m/s en la
dirección x, se puede calcular la velocidad u de las bolas después de
colisión.

n
u después i t
de impacto

2 26º j
v después de impacto
1

v antes de impacto

Figura 3.52 Impacto entre bolas de billar

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 = (sqrt ((2r)2 – r2)) i – r j ) / | n |

n = (sqrt ((2(2.86))2 –(2.86)2) i –(2.86) j ) / | 5.72 |

n = 0.866 i – 0.5 j

Ahora se puede calcular la velocidad relativa normal entre las bolas


en el instante de colisión, teniendo en cuenta que la bola 2 está en
reposo:

vr n = (u1 – u2 ) n

vr n = (6 m/s i + 0 j) . (0.866 i – 0.5 j)

vr n = 5.196 m/s

Aplicando el principio de conservación del momento lineal en la


dirección de la normal:

m1 u1 + m2 u2 = m1 v1 + m2 v2

se aprecia que m1 = m2 debido a que las bolas son idénticas, u2 = 0,


luego resolviendo para v1:
v1 = u1 – v2

por medio del coeficiente de restitución:

e = (v2 – v1) / (u1 – u2)

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 = 5.196 m/s (1.9) /2

v2 = 4.9362 m/s

Reemplazando:
v1 = u1 – v2

v1 = 5.196 m/s – 4.9362 m/s

v1 = 0.25 m/s

No hay un impulso actuando en la dirección normal. Esto significa


que el momento lineal se conserva al igual que la dirección. La
velocidad tangencial de la bola 1 es igual a su velocidad tangencial
inicial:

vo1 = 6 m/s (sen 26º) = 2.63 m/s

La bola 2 no tenía velocidad tangencial inicial y su velocidad después


de impacto está en la dirección normal. Convirtiendo a vectores las
velocidades, se obtiene:

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

v2 = 4.9362 m/s sen 64º i + 4.9362 m/s cos 64º j

3.4.8.6 Momento angular e impulso angular

En la figura se aprecia un cuerpo pequeño de masas m que se mueve


en el plano con rapidez v y momento lineal mv.

174
m

r v
ω O

Figura 3.53 Momento angular

El momento angular con respecto al eje que pasa por O y que es


perpendicular al plano se define como:

L = mvr

lo que es análogo al momento de una fuerza, por lo que se denomina


comúnmente el momento del momento lineal. La velocidad v del
pequeño elemento de masa m, está relacionada con la velocidad
angular como:

v=ωr

El momento angular es por lo tanto

mvr = mω r2

y el momento angular para el cuerpo rígido es

Σ mω r2 = ω Σ m r2
por lo que el momento angular se escribe como:

L = Iω

Cuando actúa un torque sobre un cuerpo de momento I, durante un


intervalo de tiempo t1 y t2, la velocidad angular cambia de ω1 a ω2 de
acuerdo con:

Γ = I α = I (ω2 – ω1 ) / ( t2 – t1 )

175
Simulación Virtual Interactiva
.

Γ ( t2 – t1 ) = Iω2 – Iω1 = L2 – L1

El producto del torque por el intervalo de tiempo en que actúa se


denomina impulso angular del torque, designado como Jθ.

t2
Jθ = Γ (t2 – t1 ) = ∫ Γ dt
t1

3.4.8.7 Conservación del momento angular

El impulso angular es igual a la variación del momento angular, así


como el impulso lineal es igual a la variación de la cantidad de
movimiento (momento lineal). Si el momento de la fuerza es igual a 0,
el momento angular no varía, por lo tanto se conserva, lo que es
válido aunque el momento de inercia varíe.

Ejemplo elemental: El caso típico para describir este aspecto de la


física, es cuando dos discos en rotación se acoplan de cierta forma,
estableciendo un torque impulsivo.

Figura 3.54 El ejemplo de los discos

En este ejemplo se aplican los conceptos de impulso lineal y angular.


Los dos discos con momentos de inercia I e I’, giran con velocidades
iniciales angulares constantes ωo y ω’o, respectivamente. Los discos
hacen contacto con una fuerza empujándose uno contra otro con
fuerzas dirigidas sobre su eje, sin que sobre ellos esté aplicado algún
torque. Después de un tiempo, los discos alcanzan su velocidad
angular común.

176
Como
Jθ = Iω – Iωo

J’θ = I’ω – I’ω’o

Pero como Jθ = – J’θ y opuestos, entonces

Iω – Iωo = – I’ω + I’ω’o

Iωo + I’ω’o = Iω + I’ω

Iωo + I’ω’o = ω (I + I’)

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.

El disco pequeño tiene una masa de 2 kg, radio 0.2 m y velocidad


angular inicial de 100 rad/s.

Se hallan los momentos de inercia respectivos:

I = ½(3kg)(0.5m)2 = 0.75 kg m2

I’ = ½(2kg)(0.2m)2 = 0.2 kg m2

Debido a la conservación del momento angular se tiene que:

Iωo + I’ω’o = ω(I + I’)

(0.75 kg m2 )(20 rad/s) +(0.2 kg m2 )(100 rad/s) =ω (0.75+ 0.2 kg m2 )

ω = 35 / 0.95 = 36.8 rad/s

La energía cinética inicial es:

Ko = ½(0.75 kg m2 )(20 rad/s) 2 + ½(0.2 kg m2 )(100 rad/s)2

Ko =150 + 1000 = 1150 J

177
Simulación Virtual Interactiva
.
La energía cinética final es:

K = ½(0.75 kg m2 + 0.2 kg m2 )(36.8 rad/s)2

Ko = 643 J

Casi la mitad de la energía cinética se ha perdido durante el choque


entre los discos, debido al rozamiento.

3.4.8.8 Representación vectorial de cantidades angulares

Las cantidades del movimiento rotacional se pueden representar por


medio de un vector a lo largo de un eje. Por esto se puede definir la
dirección de la velocidad angular como lo señala el pulgar de la mano
derecha, donde los dedos indican la dirección de la rotación o como el
tornillo que penetra la madera en esa dirección.

Figura 3.55 Vector velocidad angular

El producto vectorial juega un papel importante en la representación


de estas cantidades angulares. Generalmente, cuando se aplica una
fuerza F a un punto cuyo vector de posición respecto al origen es r, el
momento Γ respecto al origen es:

Γ=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

Uno de los mecanismos más complejos en cuanto a su tratamiento


matemático es el giroscopio17 pero su funcionalidad es fácil de
entender. Se tratará de explicar a continuación con el número exacto
de ecuaciones posibles que puedan dar una interpretación de la
naturaleza de su comportamiento.

Se basa en el principio fundamental de la dinámica de rotación


alrededor de un eje de dirección fija, el cual puede expresarse en
función del momento angular.

ΣΓ = Iα = I dω /dt = d(Iω)/dt = dL/dt


Por lo tanto, generalizando se tiene que:

ΣΓ = dL/dt
donde Γ y L pueden tener direcciones diferentes, en cuyo caso la
dirección del eje de rotación puede variar.

El giroscopio tiene una pieza llamada “volante” el cual tiene cierto


peso y que al hacerla girar a gran velocidad hace que todo el sistema
debido al eje apoyado en un solo extremo, experimente un movimiento
circular estacionario, en un plano.

Nos daría la sensación de que por no tener apoyo en el otro extremo,


este va a caer.

17
Inventado por León Foucault.

179
Simulación Virtual Interactiva
.

 Γ

ϕ L + L
O L = Γ
t
L
R

Figura 3.56 Giroscopio y diagrama de cuerpo libre

Las fuerzas que actúan sobre el giroscopio son su peso w, aplicado en


el CG, y hacia abajo, la fuerza P, dirigida hacia arriba y aplicada en el
eje o pivote O. Teniendo en cuenta que el cuerpo no está en reposo,
este tiene un momento angular representado por el vector L y la
variación ∆L en un tiempo pequeño ∆t, dado por:

∆L = Γ ∆t

∆L tiene la misma dirección de Γ. Luego de un tiempo ∆t, el momento


angular es:

180
L + ∆L

lo que significa que el eje ha girado un pequeño ángulo ∆ϕ de donde:

∆ϕ = |∆L| / | L|

cuyo movimiento muestra la relación entre el momento lineal y el


angular. Este movimiento es el que se denomina precesión. La
velocidad a la que se mueve el eje se denomina velocidad angular de
precesión y está dada por:

Ω = ∆ϕ / ∆t= ( |∆L| / | L| ) / ∆t

Cuanto más rápido gira un giroscopio menor será su velocidad


angular de precesión pero aumenta si el giroscopio gira más lento. El
giroscopio no se cae debido a que la fuerza P que está dirigida hacia
arriba es igual en magnitud al peso w, de tal manera que la fuerza
vertical resultante es 0, lo mismo que la aceleración vertical del centro
de gravedad.

3.4.8.9 Impulso lineal y angular

Para los efectos de este tema, se utilizarán las siguientes variables


involucradas en una colisión referente al impulso angular:

v1 v2 velocidad lineal antes de colisión cuerpos 1 y 2


u1 u2 velocidad lineal después de colisión cuerpos 1 y 2
ω1 ω2 velocidad angular antes de colisión cuerpo 1 y 2
ω’1 ω’2 velocidad angular después de colisión cuerpo 1 y 2

Asumiendo que la colisión es sin fricción y que la línea de acción del


impulso conecta los centros de masa de los cuerpos y además,
asumiendo que J actúa positivamente sobre el cuerpo 1 y –J en el
cuerpo 2, se generan tres ecuaciones con tres incógnitas:

J = m1 (v1 – u1)

181
Simulación Virtual Interactiva
.
– J = m2 (v2 – u2)

e = – (v1 – v2) / (u1 – u2)

Se pueden solucionar para cada incógnita haciendo un arreglo de las


dos ecuaciones del impulso y sustituyendo en la de e. Luego se utiliza
una expresión para J con el fin de determinar las velocidades de cada
cuerpo justo después de impacto. Entonces, para el cuerpo 1 se tiene
que:
v1 = (J / m1 ) + u1

Para el cuerpo 2:

v2 = – ( J / m2 ) + u2
Sustituyendo en e:

e (u1 – u2) = – (((J / m1 ) + u1 ) – (– ( J / m2 ) + u2 ) )

e (u1 – u2) + u1 – u2 = –J (1/ m1 + 1/ m2 )

Haciendo vr = (u1 – u2):

e vr + vr = –J (1/ m1 + 1/ m2 )

J = – vr ( e +1 ) / (1/ m1 + 1/ m2 )

siendo vr la velocidad relativa a lo largo de la línea de acción del


impacto n y J normal a la superficie. A continuación se calcula el
cambio en la velocidad lineal de los cuerpos.

v1 = (Jn / m1 ) + u1

v2 = – ( Jn / m2 ) + u2

Para el caso de las bolas de billar:

n = (sqrt ((2r)2 – r2)) i – r j ) / | n |

182
3.4.8.10 Efectos angulares del cuerpo rígido

Cuando el cuerpo rígido puede rotar, se deriva una nueva formulación


para el impulso lo cual incluye efectos angulares, por lo que este
impulso permitirá calcular las nuevas velocidades lineales y angulares
después del impacto. En la gráfica se aprecian dos cuerpos
colisionando en el punto P.

Línea de acción normal


C1
ω1
CG P ω2
CG

v1 v2 C2

Figura 3.57 Colisión de cuerpos rígidos

Para calcular las velocidades en P en función de la velocidad lineal y


angular se utiliza la siguiente ecuación:

vPc = vg + (ω x r)

donde r es el vector que va desde el CG a P. Entonces para los dos


cuerpos se tiene:

v1g + ( ω1 x r1 ) = (J / m1 ) + u1g + ( ω’1 x r1 )

v2g + ( ω2 x r2 ) = – (J / m2 ) + u2g + ( ω’2 x r2 )

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.

Combinando con e, se obtiene una ecuación que implica efectos


lineales y angulares, lo cual se puede utilizar para calcular las
velocidades lineales y angulares de cada cuerpo después de impacto.

J = – vr ( e + 1) / ( 1/m1 + 1/m2 + n·((r1 x n) / I1 ) x r1 + n·((r2 x n) / I2 )


x r2 )

donde vr es la velocidad relativa a lo largo de la línea de acción de


impacto en P y n es el vector unitario también a lo largo de la línea de
acción que pasa por P con respecto al cuerpo 1. Se puede además
calcular los cambios en las velocidades lineal y angular de los objetos
con las siguientes ecuaciones:

v1 = (Jn / m1 ) + u1

v2 = – ( Jn / m2 ) + u2

ω1 =ω’1 + (r1 x Jn ) / Icg

ω2 =ω’2 + (r2 x – Jn ) / Icg

3.4.8.11 Colisión y fricción

En un pequeño instante, cuando dos cuerpos colisionan de forma


indirecta, experimentan una fricción que actúa tangencialmente a las
superficies de contacto respectivas. Esta fuerza cambia la velocidad
lineal así como a las velocidades angulares. La combinación del
impulso tangencial y el normal resulta en una línea efectiva de acción
del impulso total de colisión, la cual es perpendicular a las superficies
de contacto.

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.

Debido a que la fuerza de fricción está en función de la fuerza normal


entre las superficies de contacto, entonces la relación de la fuerza
normal y la fuerza de fricción es igual al coeficiente de fricción. Si se
asume que a las colisiones se aplica el coeficiente cinético, la relación
se dice es constante:

μ = Ff /Fn

donde Ff es la fuerza de fricción tangencial y Fn es la fuerza normal


de impacto. Por lo tanto la relación entre el impulso tangencial y el
impulso normal es igual al coeficiente de fricción. Ahora se analiza el
golpe a una pelota de golf. La velocidad v representa la velocidad
relativa entre la bola y el palo en el instante del impacto y u representa
la velocidad de la bola después del impacto.

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 + ω’

La ecuación del impulso que involucra los efectos lineales y angulares


es:

J = – vr ( e + 1) / ( 1/m1 + 1/m2 + n·(r1 x n) / I1 + n·(r2 x n) / I2 )

Esta ecuación proporciona un impulso de colisión en la dirección


normal. Para conocer la cantidad de fricción presente, se debe tener
en cuenta que la fricción actúa tangencialmente a las superficies de
contacto, lo cual combina las fuerzas de fricción con la fuerza de
impacto normal, alcanzando una nueva línea efectiva de acción y que
la fuerza de fricción y el impulso están en función de la fuerza normal
y del coeficiente de fricción. Entonces, las nuevas ecuaciones para el
cálculo de los cambios en las velocidades angulares y lineales son:

v1 = (Jn + (μ J ) t ) / m1 + u1

v2 = (– Jn + (μ J ) t ) / m2 + u2

ω1 =ω’1 + (r1 x (Jn + (μ J ) t ) ) / Icg

ω2 =ω’2 + (r2 x (– Jn + (μ J ) t ) ) / Icg

donde t es el vector tangente unitario el cual es tangente a las


superficies en colisión. Se puede calcular el vector tangente si se
conoce el vector normal unitario y el vector velocidad relativa en el
mismo plano con el vector normal:

186
t = ( n x vr ) x n

t=t/|t|

3.4.8.12 Respuesta de colisión

Se ha visto que el impulso lineal y angular, permiten hallar las


velocidades respectivas de dos cuerpos que chocan. Así también, se
vio la forma en que la geometría analítica resuelve en principio el
problema de la detección de colisión.

Para dos partículas o esferas, la respuesta de colisión involucra los


conocidos aspectos de la física y dependiendo de si hubo o no hubo
colisión, se necesita considerar qué tan cerca están los objetos como
para determinar con tolerancias numéricas si el contacto es inminente
y por otro lado, la velocidad relativa entre los cuerpos. Pero en vez de
estudiar la respuesta de colisión de dos esferas, aquí se analiza el
comportamiento realístico de dos objetos rectangulares compuesto de
n lados y n vértices y verificar los tipos de contactos entre un vértice y
un lado y un lado con otro lado.

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.

Figura 3.59 Tipos de colisión, intersección, cara-cara, vértice-cara

Asumiendo que para un punto dado, los cuerpos A y B hacen contacto


en p. Sea pA un punto de A y pB un punto de B, que satisfacen que
pA(to) = p. Para el tipo de colisión vértice-cara, este punto es el mismo

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:

d/dt pA(to) = vA(to) + ωA(to) x (pA(to) – xA(to))

d/dt pB(to) = vB(to) + ωB(to) x (pB(to) – xB(to))

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)

Figura 3.60 Colisión vértice-cara en to

Examinando la cantidad escalar:

vrel = n(to)

Se anotó que n(to) es la normal a la superficie, descrita por la variable


n, para cada punto de contacto. Si vrel es positivo entonces la
velocidad relativa (d/dt pA(to) – d/dt pB(to)) en el punto de contacto,
está en la dirección positiva de n(to).

188
A
d/dt pA(to) – d/dt pB(to)

n
p

Figura 3.61 Apuntando en direcciones iguales, se separan

Esto significa que los cuerpos se están separando y que el punto de


contacto desaparece después del instante (to). Si vrel = 0, los cuerpos
no se están acercando ni alejando, es decir se considera un contacto
en reposo.

A
d/dt pA(to) – d/dt pB(to)

n
p

Figura 3.62 Contacto de reposo

Cuando vrel < 0, indica que la velocidad relativa en p es opuesta a


n(to) resulta entonces un contacto de colisión. Si las velocidades de
los cuerpos no experimentan algún cambio, entonces tendrá lugar la
intersección de dichos cuerpos.

A
d/dt pA(to) – d/dt pB(to)

n
p

Figura 3.63 Contacto de colisión

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.

Como se explicó, J es un vector con unidades de momento y que una


vez aplicado produce un cambio instantáneo en las velocidades de los
cuerpos.

Para determinar los efectos de un impulso dado J, hay que imaginar


una gran fuerza F que actúa en un intervalo pequeño ∆t, el cual tiende
a 0, entonces:
J = F ∆t

Esto es, si se aplica un impulso J a un cuerpo rígido de masa m,


entonces el cambio de la velocidad ∆v, es:

∆v = J/m

al igual que el cambio en el momento lineal ∆p, es:

∆P = J

Si el impulso actúa con el punto p, tal como una fuerza produce un


torque, J produce un torque impulsivo:

τImpulsivo = (p – x(t)) x J

Este torque produce también un cambio en el momento angular:

∆L = τImpulsivo

Asumiendo que el impulso fue aplicado en (to), el cambio en la


velocidad angular está dada por:

∆ω = τ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)

donde j es el escalar indeterminado el cual proporciona la magnitud


del impulso. Por conveniencia, se adopta la convención de que el
impulso J actúa positivamente sobre el cuerpo A, el cual está sujeto a
un impulso de + j n(to) y B está sujeto a un impulso opuesto de –j
n(to).

A + j n(to)
n
p

B – j n(to)

Figura 3.64 Impulso entre A y B

Para determinar j se utiliza una ley empírica de colisiones. Haciendo


d/dt–pA(to) la velocidad de contacto del vértice en A antes de aplicar el
impulso y d/dt+pA(to) la velocidad después de aplicado el impulso. La
velocidad relativa inicial en la dirección normal es:

v–rel = n(to).( d/dt–pA(to) – d/dt–pB(to) )

luego, después de la aplicación del impulso:

v+rel = n(to).( d/dt+pA(to) – d/dt+pB(to) )

La ley empírica para las colisiones sin fricción es:

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.

Para e = 0, v+rel = 0, en reposo y hay pérdida de energía cinética al


máximo.

Se calcula ahora la magnitud j del impulso J = jn(to), haciendo los


desplazamientos como:
rA = p – xA (to)

rB = p – xB (to)

Si vA–(to) y ωA–(to) son las velocidades antes del impulso en A y vA+(to)


y ωA+(to) las velocidades después del impulso en A, entonces:

d/dt–pA(to) = (vA+(to) + ωA+(to)) x rA

vA+(to) = vA–(to) + (jn(to) / mA )

ωA+(to) = ωA–(to) + (rA x jn(to)) / IA(to)

donde mA es la masa del cuerpo A e IA(to) es el tensor de inercia.

Combinando las ecuaciones:

d/dt+pA(to) = ( vA–(to) + (jn(to) / mA ) ) + (ωA–(to) + (rA x jn(to)) / IA(to))


x rA

= vA–(to) + ωA–(to) x rA + (jn(to) / mA ) + (rA x jn(to)) / IA(to)) x rA

= d/dt–pA + j ( (n(to) / mA ) + ((rA x n(to)) / IA(to)) ) x rA

Entonces se dice que d/dt+pA(to) es la función lineal de j. Para el caso


de B, actúa el impulso opuesto –j n(to).

d/dt+pB(to) = d/dt–pB – j ( (n(to) / mB ) + ((rB x n(to)) / IB(to)) ) x rB

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 )

Para calcular v+rel se tiene en cuenta que n(to). n(to) = 1

entonces:
v+rel = n(to).( d/dt+pA(to) – d/dt+pB )

= n(to).( d/dt–pA(to) – d/dt–pB ) + 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 )

= 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 )

Expresando v+rel en términos de j y v–rel, se puede calcular j.

–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,

j = –(1+ e) v–rel / ( ( 1 / mA ) + ( 1 / mB ) + n(to). (rA x n(to)) / IA(to)) x


rA + n(to).(rB x n(to)) / IB(to)) x rB )

3.5. Elasticidad

3.5.1 Fuerzas elásticas

En los sólidos las moléculas forman una estructura sólida llamada


cristal. Al ser comprimidos o dilatados se forman fuerzas internas
denominadas fuerzas moleculares, de repulsión o de atracción. Estas
fuerzas son representadas normalmente por pequeños resortes que
unen las moléculas vecinas denominado “el modelo mecánico de las

193
Simulación Virtual Interactiva
.
interacciones moleculares”. Es incluso el modelo utilizado en la
simulación de tela y objetos flexibles.

Figura 3.65 Interacciones moleculares

3.5.2 Resortes y amortiguadores

Los resortes normalmente están conectados entre dos cuerpos a los


que se les aplica fuerzas iguales y opuestas. Según la Ley de Hook, la
fuerza en el resorte está en función de la longitud de alargamiento o
comprensión, en relación con el resto de longitud del mismo y la
constante de estiramiento.

Fs = Ks ( |l| – lo )

donde Fs es la fuerza en el resorte, Ks es la constante de estiramiento,


|l| es la longitud de alargamiento o recogida y lo es la longitud en
reposo. Las unidades están dadas en Newtons, kg/s2 y metros,
respectivamente. Para el caso de los amortiguadores, estos actúan
como resistencia viscosa en contra de la velocidad. La fuerza
desarrollada por el amortiguador es proporcional a la velocidad
relativa de los objetos conectados y una constante de amortiguación
Kd que relaciona la velocidad relativa a la fuerza de amortiguación:

Fd = Kd (v1 – v2)

cuyas unidades están dadas en kg/s.

194
Figura 3.66 Resorte -amortiguador

Típicamente los sistemas resorte-amortiguador están combinados en


un elemento simple en la cual una ecuación se utiliza para representar
dicha fuerza combinada. Para dos objetos conectados a cada extremo
la expresión es:

F1 = – ks (|l| – lo) ( l / |l| ) – kd ( v1 – v2 )

F2 = – F1

donde |l| es la longitud del sistema compuesto resorte-amortiguador, y


que es igual a la diferencia de posición entre el cuerpo 1 y la posición
del cuerpo 2. El valor lo es la longitud en reposo. Los valores v1 y v2
son las velocidades de los puntos conectados en los cuerpos 1 y 2. La
cantidad (v1–v2) es la velocidad relativa entre los cuerpos conectados.

El signo negativo indica que es una fuerza de restauración. La


expresión ( l / |l| ) define el vector unitario a lo largo del eje del
sistema.

3.5.3 Simulación de tela

Uno de los tópicos más tratados en la Simulación Virtual es la


simulación de telas. Aquí se presenta el método básico para
comprender el comportamiento de las partículas que la componen.
Aunque existen muchos métodos, se explicará el método de sistemas
de partículas interconectadas por un sistema compuesto resorte-
amortiguador el cual conecta dos partículas y genera una fuerza
acorde con sus posiciones y velocidades.

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.

Básicamente la tela es un conjunto de sistemas compuestos de resorte-


amortiguador, las cuales están ubicadas en cierto sitio de la malla que
conforma la tela, cumpliendo con la función de dar a la tela su
característica propia de material flexible.

Figura 3.67 Tela compuesta de partículas y sistema resorte-amortiguador

Por cada partícula se debe determinar la posición, la velocidad, la


aceleración, la masa, el momento lineal y la gravedad.

v p = mv

a
g

Figura 3.68 Partícula en la Tela

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

Enseguida se procede a resolver la integral con respecto a un ∆t,


utilizando un método de integración como los explicados en próximos
capítulos. Si el caso fuera bajo el método de Euler, la velocidad y la
posición, están dadas por:

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.

El sistema básico resorte-amortiguador conecta dos partículas y tiene


3 constantes que define su conducta; la constante de elasticidad ks, el
factor de amortiguación Kd y la longitud en reposo lo.

r
2

v
2

r
1

v
1

Figura 3.69 Sistema básico de partículas unidas por resorte-amortiguador

La fuerza lineal del resorte en una dimensión es:

197
Simulación Virtual Interactiva
.

Fresorte = - ks x = - ks (lo – l)

La fuerza de la amortiguación lineal es:

Famortig = - kd v = - kd ( v1 –v2 )

Para la combinación resorte-amortiguador:

Fsd = - ks (lo – l) – kd ( v1 – v2 )

Para calcular las fuerzas en 3D se debe convertir las distancias y


velocidad a una dimensión. Se calcula la fuerza de resorte en una
dimensión y luego se regresan a 3D.

v'1 = v1 (r2 – r1) / |(r2 – r1)|

v'2 = v2 (r2 – r1) / |(r2 – r1)|

f1 = Fsd (r2 – r1) / |(r2 – r1)|

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:

Fuerza de inclinación – Proporcionada por los resortes cruzados


entre cuatro partículas.

Fuerza de extensión y composición – Proporcionada por los resortes


colocados horizontal y verticalmente.

198
Fuerza de doblamiento – Proporcionada por un resorte que une dos
partículas no adyacentes de forma horizontal o vertical.

Figura 3.70 Ubicación de fuerzas para la flexibilidad de la tela

3.5.4 Fuerzas aerodinámicas en la tela

La fuerza de resistencia aerodinámica está dada por:

Fa = ½ ρ |v|2 Cd a (-v / |v|)

donde ξ es la densidad del aire (o agua), Cd es el coeficiente de


resistencia para el objeto, a es la sección del objeto y (-v/|v|) es el
vector unitario en dirección opuesta a la velocidad.

Para una superficie plana la fuerza aerodinámica en vez de oponerse a


la velocidad, ésta empuja contra la normal de la superficie.

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
.

Figura 3.71 Partículas en el triángulo, sus velocidades y la normal

Entonces, para la velocidad del triángulo se utiliza el promedio de las


tres velocidades de las partículas respectivas:

vt = (v1 + v2 + v3 ) / 3

De aquí se resta la velocidad del aire, para obtener la velocidad


relativa:
v = vsuperf - vair

La normal del triángulo es:

n = (r2 – r1)(r3 – r1) / |(r2 –r1)(r3 –r1)|

El área del triángulo está dado por:

at = ½ |(r2 – r1)(r3 – r1)|

La parte expuesta al aire está dada por:

a = at vn / |v|
de aquí que:

|v|2a n= |v|(v n’)n’ / 2|n’|


para

n’ = (r2 – r1)(r3 – r1)

200
3.6 Mecánica de fluidos

3.6.1 Fluidos en reposo

La importancia de los fluidos radica en el hecho de que son el medio


en que un cuerpo mantiene su movimiento o en el que el cuerpo
normalmente se encuentra. El avión que vuela a través del aire (lo
mismo que el auto), el barco que flota en el agua (el submarino
completamente) y otros ejemplos, definen al objeto en la sustancia que
los rodean. Se denomina fluido (líquidos y gases) al conjunto de
moléculas o partículas distribuidas aleatoriamente y se mantienen
unidas entre sí por fuerzas cohesivas débiles y según el caso, por
fuerzas ejercidas por el recipiente.

3.6.2 Densidad

La densidad de un material o elemento se define como la cantidad de


masa m contenida en cada unidad de volumen V. Es una magnitud
escalar y su unidad de medida en el SI es kg/m3. La densidad cambia
con la temperatura y depende también de la presión. La densidad del
agua es de 1 gramo por cm3 en condiciones normales de presión y
temperatura.
ρ = m/V

siendo ρ, la densidad; m, la masa; y V, el volumen de la sustancia.

3.6.3 Presión en un fluido

Cuando un cuerpo se sumerge en un fluido, éste ejerce una fuerza


perpendicular a la superficie del cuerpo en cada punto de la superficie.
Considerando una pequeña superficie de área de dA centrada sobre un
punto en el fluido, donde la fuerza normal ejercida por el fluido en
cada lado es dF, se define la presión P en ese punto como:

201
Simulación Virtual Interactiva
.
P = dF/dA

La unidad en el SI es el Newton por metro cuadrado, que equivale a


un Pascal: 1 Pascal = 1 N/m2. Otra unidad común cuando se trata de
presión, es la atmósfera (atm), que es aproximadamente la presión del
aire a nivel del mar: 1 atm = 760 mmHg = 760 Torr = 101,325 Pa1 =
1.01325 bar

3.6.4 Principio de Arquímedes

Un cuerpo cualquiera sumergido en un fluido experimenta una pérdida


de peso. Algunas veces el cuerpo puede permanecer flotando en la
superficie del líquido.

Figura 3.72 Principio de Arquímedes

La figura muestra un cuerpo parcialmente sumergido en un fluido. La


fuerza E mostrada es llamada fuerza de flotación o empuje que es la
resultante de todas las fuerzas ejercidas por el fluido en cada punto del
cuerpo.
E = - mg

El principio de Arquímedes18 enuncia que: “Cuando un cuerpo está


parcialmente o totalmente sumergido en el fluido que le rodea, una
fuerza de empuje actúa sobre el cuerpo. Dicha fuerza tiene dirección
hacia arriba y su magnitud es igual al peso del fluido que ha sido
desalojado por el cuerpo.”

18
Arquímedes, 287 – 212 a.C., científico griego.

202
3.6.5 Boyancia

Otro término para definir a la fuerza de flotación, es boyancia


(flotabilidad), fuerza ejercida en un objeto debido a la diferencia de
presiones por encima o por debajo del objeto. Importante término
tratado en simulación de barcos y submarinos.

Por lo general actúa en oposición a la gravedad y su magnitud neta es


igual al peso del fluido que desplaza.

Fb = -g ρV

donde Fb es la fuerza de boyancia, g la gravedad, ρ es la densidad


del fluido y V, el volumen del fluido desplazado por el objeto.

3.6.6 Resistencia y sustentación – Drag / Lift

Cuando se establece una interacción entre dos objetos en un fluido se


deben tener en cuenta las diferentes clases de fuerzas que actúan o se
ejercen uno a otro objeto. En este caso se refiere a las fuerzas que
actúan de manera paralela y perpendicular a la velocidad del cuerpo.

A estas fuerzas se le conocen como resistencia y sustentación. En


algunos textos se refieren a la fuerza de resistencia como “arrastre” y
a la de sustentación como “elevación”. La fuerza de resistencia se
define:
FD = 1/2 CDAρv² ῠ

donde v es la velocidad del objeto respecto al fluido, ρ es la densidad,


A es el área de referencia del objeto y CD es el coeficiente de
resistencia (Drag Coefficient) adimensional. ῠ es el vector unitario en
dirección de 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

La fuerza de resistencia que experimenta el cuerpo al moverse en un


fluido se expresa como:

FD = ½ CDAρv² = 0.5 x 0.75 x π (0.50/2)² x 1.0 x 250²

La fuerza de sustentación se calcula de manera análoga teniendo en


cuenta el coeficiente de sustentación CL y la dirección del vector de la
velocidad relativa el cual es perpendicular a la normal en un punto
dado sobre la superficie del objeto.

FL = ½ CLAρv² ῠ

En algunos objetos la sustentación es directamente proporcional al


coseno del ángulo de ataque a = AoA.

FL = ½ CLAρv² Cos a

Lift

Drag

AoA

Figura 3.73 Fuerzas de resistencia, sustentación y ángulo de ataque en un misil

204
3.6.7 Ecuación de Bernoulli

La ecuación de Bernoulli19, se define como el principio de la


conservación de la energía para el flujo de fluidos. Cuando se
presenta el efecto de Bernoulli, se refiere a que la presión del líquido
baja en las regiones donde la velocidad del flujo es mayor.

El ejemplo clásico es el de las alas del avión, las cuales están


diseñadas para que el aire que pasa por encima del ala fluya a mayor
velocidad que el aire que pasa por debajo. Los aviones tienen en la
parte superior del ala o plano más curvado que la parte inferior y está
diseñada de forma que el aire tenga que recorrer una distancia mayor
en la parte superior por lo que su velocidad será más alta y su presión
disminuirá. Por lo tanto, la presión estática es mayor en la parte
inferior y el avión se levantará.
Baja presión Alta velocidad

Alta presión Baja velocidad

Figura 3.74 Diferencia de presiones en el ala de un avión. Principio de Bernoulli

Bernulli enunció la relación existente entre los diversos parámetros de


un fluido, entre estos la presión P, la velocidad v, la densidad ρ y la
distancia a considerar h:

P + ρgh + 1/2 ρv2 = constante

donde g es la aceleración de la gravedad.

En otras palabras, la corriente de aire que fluye a mayor velocidad por


encima del ala, al coincidir con la que fluye por debajo desvía a esta

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.

El parámetro P se denomina presión absoluta. La suma P + ξgh es la


presión estática (a menudo llamada también presión hidráulica) y el
término ½ ξv2 es la presión dinámica.

3.6.8 Viscosidad

Se define como el rozamiento interno de un fluido debido a la


interacción entre sus moléculas. Al igual que cuando se habla de
densidad en los sólidos, se habla de viscosidad en los fluidos. Se
necesita de una fuerza para vencer la resistencia de un fluido en un
tubo. Esa resistencia es debido a la viscosidad del fluido. El agua,
alcohol y gasolina son de baja viscosidad. La miel, salsas, cremas etc.
son de alta viscosidad. Un fluido viscoso como el alquitrán, tiene una
μ muy grande. La viscosidad puede ser dinámica y cinemática.

En el sistema SI la unidad de viscosidad dinámica es el pascal-


segundo (Pa·s), que corresponde a 1 N·s/m² o 1 kg/(m·s). La unidad
CGS para la viscosidad dinámica es el poise20 (1 poise (P) ≡ 1g·
(s·cm)−1 ≡ 1 dina·s·cm−2 ≡ 0,1 Pa·s). El agua tiene una viscosidad de
1,0020 cP a 20 °C.

1 poise = 100 centipoise = 1 g/(cm·s) = 0,1 Pa·s


1 centipoise = 1 mPa·s
μ agua = 1 cP

Los cambios de temperatura afectan a la viscosidad generando así


mismo, cambios en ésta, lo que implica que a altas temperaturas la
viscosidad decrece y a bajas temperaturas aumenta.

La viscosidad cinemática se obtiene como cociente de la viscosidad


dinámica (o absoluta) y la densidad del fluido.
20
En honor al fisiólogo francés Jean Louis Marie Poiseuille (1799-1869).

206
υ = μ/ρ

La unidad en el SI es el (m²/s). La unidad física de la viscosidad


cinemática en el sistema CGS es el stoke21 (abreviado S o St).
También se expresa en centistokes (cS o cSt).

1 stoke = 100 centistokes = 1 cm²/s = 0,0001 m²/s


1 cSt = 10-6 m2/s

3.6.9 Ley de Poiseuille

Establece que el flujo de un fluido a través de un tubo cilíndrico de


longitud L y sección transversal de radio R está dado por

Q = πR4 (Pi - Po) / 8μL

donde Pi -Po es la diferencia de presiones entre los extremos del tubo.

3.6.10 Número de Reynolds


Es un número22 adimensional que se aplica a un fluido de viscosidad μ
y densidad ρ y que corre con cierta rapidez a través de un tubo (o
pasando un obstáculo) con diámetro D:

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
.

ρ : densidad del fluido


v : velocidad característica del fluido
D: diámetro de la tubería a través de la cual circula el fluido
μ : viscosidad dinámica del fluido
υ : viscosidad cinemática del fluido

Si el número de Reynolds es pequeño se define un flujo laminar, por el


contrario, al ser grande se considera un flujo turbulento:

Turbulento

Laminar

Figura 3.75 Flujo Turbulento y Laminar

3.6.11 Ley de Stokes

Se refiere a la fuerza de fricción experimentada por objetos esféricos


moviéndose en un fluido viscoso en un régimen laminar (en láminas
paralelas) de bajos números de Reynolds. La ley de Stokes puede
escribirse como:
Fr = 6πRμ v

donde R es el radio de la esfera, v su velocidad y μ la viscosidad del


fluido. La ecuación de la velocidad terminal (o límite) en un medio
es:

vt = Fr / 6πRμ (No Turbulento)

vt = sqrt (2mg / CD ρ A) (Turbulento)

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).

La cinemática directa se refiere al uso de ecuaciones cinemáticas para


calcular la posición del extremo final del último actuador.

En la cinemática inversa, la posición del punto final es conocida y se


necesita encontrar los ángulos de las uniones. Dependiendo de los
grados de libertad y de la jerarquía que relacione las articulaciones es
posible desarrollar simulaciones virtuales que permitan decirle a un
modelo definido, cómo debe comportarse, simplemente variando el
extremo y ángulo del último actuador de forma directa con el que debe
reproducir el movimiento correspondiente.

L2

L1
180-ϴ2 (x, y)

Y
ϴ1 ϴT
X
Figura 3.76 Actuadores

cos(ϴT) = X / sqrt(X2 + Y2)

ϴT = acos (X / sqrt(X2 + Y2))

209
Simulación Virtual Interactiva
.

ϴ1 = acos [(L12 + X2 + Y2 – L22) / (2 L1 sqrt(X2 + Y2))] ϴT

ϴ2 = acos [(L12 + L22 - (X2 + Y2))/( 2 L1 L2)]

Las animaciones y simulaciones 3D también se benefician de este


concepto (Rigging 3D). Si se quiere representar al esqueleto humano
en forma de uniones, se debe introducirlo en un sistema jerárquico de
actuadores que posibiliten el movimiento de los miembros o
extremidades, incluyendo manos y pies.

Figura 3.77 Rigging 3D

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

Cuando una partícula no está sometida a ninguna fuerza, se mueve con


momento lineal constante (primera ley).

p = mv

Si la masa es constante (dm/dt = 0), se puede considerar que:

F = m dv/dt
siendo,
a = dv/dt

F = ma

La ecuación que expresa la II ley de Newton de traslación es de


carácter vectorial, así que la fuerza neta que actúa sobre un objeto y su
aceleración serán vectores paralelos.

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.

4.2 Cinética en tres dimensiones


Para dar solución a los problemas de cinética, se deben identificar
todas las variables que afectan al modelo, con el fin de determinar
cuáles son las ecuaciones matemáticas que se utilizarán en la
simulación.

aceleración =Σ fuerzas / masa a =Σ f / m

aceleración angular = Σmomentos/ momento de inercia α =Ση / I

velocidad = ∫ aceleración . dt v = ∫ a .dt

velocidad angular = ∫ aceleración angular . dt ω = ∫ α .dt

posición = ∫ velocidad . dt x= ∫ v .dt

orientación = ∫ velocidad angular . dt Χ = ∫ ω .dt

En la cinemática, estas expresiones son definidas como vectoriales


(x,y,z). Para el caso de la masa se trata inicialmente como un valor
invariable en el tiempo por lo que se puede dividir las fuerzas de
forma escalar. Para el caso de la inercia, la cual divide los torques, es
una matriz que queda de la multiplicación por la matriz inversa del
tensor de inercia del cuerpo.

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:

1. Calcular las propiedades de la masa del cuerpo (masa, centro de


masa, momento de inercia).

2. Identificar y cuantificar todas las fuerzas y momentos que actúan


sobre el cuerpo (describir la situación de la fuerza).

3. Derivar las fuerzas resultantes y momentos.

4. Resolver las ecuaciones de aceleración lineal y angular.

5. Integrar con respecto al tiempo para encontrar la velocidad lineal y


velocidad angular (integración numérica).

6. Integrar con respecto al tiempo para encontrar el desplazamiento


lineal y rotacional (integración numérica).

De capítulos anteriores se sabe que la velocidad de rotación de un


cuerpo está relacionada con el momento angular, el cual para un
cuerpo rígido que rota respecto a un eje se define básicamente como la
resistencia que ofrece dicho cuerpo a la variación de la velocidad
angular. Mide la velocidad a la que gira la masa, teniendo en cuenta la
distribución de dicha masa en el objeto.

La relación entre el momento de las fuerzas que actúan sobre el cuerpo


y la aceleración angular se estudió como momento de inercia I lo
cual representa la inercia o resistencia del cuerpo al alterar su
movimiento de rotación. Una fuerza F que actúa en algún punto del

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

La posición del punto depende de la posición relativa r del centro de


masa. En otras palabras, la derivada con respecto al tiempo de L es el
momento definido por el producto cruz entre r y F, donde F es la
fuerza aplicada sobre el cuerpo y r la distancia vectorial desde la
perpendicular de la línea de acción de F, al centro de gravedad del
cuerpo. M es el momento o momento dinámico. La matriz de inercia
es constante con respecto al tiempo y expresada en coordenadas fijas
al cuerpo. Escrito en forma matricial, el momento angular se define:

Lx Ixx -Ixy -Ixz ωx

Ly = -Iyx Iyy -Iyz ωy

Lz -Izx -Izy Izz ωz

Recordando que:

ΣΓ = Iα = I dω /dt = d(Iω)/dt = dL/dt


L=Iω

se puede determinar la velocidad angular ω como la velocidad de


rotación:
ω = I-1 L

donde I-1 es la matriz inversa de I.

Debido a que el tensor de inercia cambia al hacerlo también la


orientación del objeto, ésta debe ser reevaluada en cada dt o paso del
tiempo. Para calcular el momento de inercia I una vez el cuerpo ha
sido rotado, se debe multiplicar la matriz tensor de inercia I del
cuerpo en t inicial, por la matriz de rotación correspondiente R(t) (ver
sección 3.3.6 Rotación) y por la matriz traspuesta R(t)T.

214
I = R(t) I(0)CR R(t)T

Esta expresión permite relacionar la matriz de inercia en coordenadas


globales y las del cuerpo rígido. La matriz de Inercia I está definida en
el sistema de coordenadas globales, mientras que la matriz
aparentemente diferente del cuerpo rígido ICR está en coordenadas
fijas a dicho cuerpo (CR).

Este procedimiento genera una cantidad considerable de operaciones


para resolverse. Para algunos métodos de simulación se prefiere
referenciar todo en coordenadas locales o fijas al cuerpo debido a que
la matriz de inercia es constante y como se señaló, no se necesita
recalcularla en cada paso del tiempo.

Ahora se hallan los momentos externos M con respecto al CG.

L=Iω

M = d(Iω)/dt

M = I dω/dt + dI/dt ω

M = I dω/dt + d(R ICR RT)/dt ω

M = I dω/dt + (d R/dt I(0)CR RT + R I(0)CR RT)/dt)t ω

M = I dω/dt +ω x Iω + Iω x ω

M = I dω/dt +ω x Iω

Esta última ecuación permite comprender el comportamiento del


cuerpo rígido alrededor de su CG. Si de nuevo se hace:

L = Ixωxi + Iyωyj + Izωzk

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

Mx = Ix dωx /dt - (Iy – Iz) ωyωz


My = Iy dωy /dt - (Iz – Ix) ωzωx
Mz = Iz dωz /dt - (Ix – Iy) ωxωy

Por lo tanto se pueden así obtener las nuevas velocidades lineales y


angulares para el próximo t:

Vn+1 = Vn + F/m dt

ωn+1 = ωn + I-1(M - ω x Iω) dt

Estas expresiones se conocen como ecuaciones de Newton-Euler.


Ahora es posible calcular y actualizar la posición y la orientación del
objeto por métodos numéricos que se verán en un próximo capítulo:

xn+1 = xn + v dt

θn+1 = θn + ω dt

Ejemplo elemental: Retomando el ejemplo de la sección 3.4.6.5, el


cual dice que sobre una rueda de 0.7 m de radio y momento de inercia
de 5 utm.m2, se le aplica tangencialmente una fuerza de 10 kp. Como
sugerencia, antes de codificarlos en lenguaje de programación puede
verificar que la simulación está generando los valores correctos en una
hoja de cálculo como Excel, en donde es posible hacer un análisis
minucioso del comportamiento del cuerpo, su velocidad, aceleración,
etc. A continuación, los datos iniciales:

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

Rotación del cuerpo rígido


t vang ω desde 0 theta θ desde 0 No Vueltas
0 0 0 0 0 0,00
0,2 0,28 0,28 0,084 0,028 0,00
0,4 0,84 0,56 0,532 0,112 0,02
0,6 1,68 0,84 1,792 0,252 0,04
0,8 2,8 1,12 4,48 0,448 0,07
1 4,2 1,4 9,38 0,7 0,11
1,2 5,88 1,68 17,444 1,008 0,16
1,4 7,84 1,96 29,792 1,372 0,22
1,6 10,08 2,24 47,712 1,792 0,29
1,8 12,6 2,52 72,66 2,268 0,36
2 15,4 2,8 106,26 2,8 0,45
2,2 18,48 3,08 150,304 3,388 0,54
2,4 21,84 3,36 206,752 4,032 0,64
2,6 25,48 3,64 277,732 4,732 0,75
2,8 29,4 3,92 365,54 5,488 0,87
3 33,6 4,2 472,64 6,3 1,00
3,2 38,08 4,48 601,664 7,168 1,14
3,4 42,84 4,76 755,412 8,092 1,29
3,6 47,88 5,04 936,852 9,072 1,44
3,8 53,2 5,32 1149,12 10,108 1,61
4 58,8 5,6 1395,52 11,2 1,78
4,2 64,68 5,88 1679,524 12,348 1,97
4,4 70,84 6,16 2004,772 13,552 2,16
4,6 77,28 6,44 2375,072 14,812 2,36
4,8 84 6,72 2794,4 16,128 2,57
5 91 7 3266,9 17,5 2,79
5,2 98,28 7,28 3796,884 18,928 3,01
5,4 105,84 7,56 4388,832 20,412 3,25
5,6 113,68 7,84 5047,392 21,952 3,49
5,8 121,8 8,12 5777,38 23,548 3,75
6 130,2 8,4 6583,78 25,2 4,01

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:

Ejemplo elemental: Sobre una rueda de 0.7 m de radio se aplica


tangencialmente una fuerza de 10 kp. Si la masa es de 20.4 u.t.m,
determinar la aceleración angular, la velocidad angular al cabo de 6 s
desde el reposo y el ángulo que alcanza en determinado tiempo a los 6
segundos.

r
Z

Figura 4.1 Ejemplo elemental de una rueda de 0.7 m de radio.

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,

Izz = ½ 20.4 kg x 0.72 m2

Izz = 4.998 utm.m2

α = τ / Izz = 1,4 rad/s2

ω = ωo + αt = 0 + 1,4 rad/s2 x 6 s= 8.4 rad/s

θ = θo + ωot + ½ αt2 = 0 + ½ x 1.4 x 36 = 25.2 rads

De acuerdo con el procedimiento que para simulaciones del cuerpo


rígido se ha establecido, el primer punto requiere calcular las
propiedades de la masa del cuerpo (masa, centro de masa, momento
de inercia).

La masa del disco es de 20.4 u.t.m. con CG (0,0,0). El disco ahora es


un cilindro de poca altura, lo cual en este caso se convierte en el
grosor del mismo, con un valor de 0.01 m. Por lo tanto el Momento de
Inercia con respecto a los tres ejes se definen así:

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

Izz = 1/2 m r2 = 1/2 x 20.4 x 0.72 = 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.

F = Iα/r = 5 x 1.4 / 0.7 = 10 Kp

M = Iα = 7 kg m2 rad/s

El tercer punto dice derivar las fuerzas resultantes y momentos.


Prácticamente con la tabla anterior en Excel se ha realizado el trabajo
de determinar los valores necesarios para describir el comportamiento
del cuerpo con respecto al tiempo. Si se desea calcular la velocidad
lineal en relación con la velocidad angular del cuerpo esta sería:

v = rω

Derivando con respecto al tiempo, se puede escribir como:

dv/dt = r dω /dt

A continuación se lista el programa completo, teniendo en cuenta que


las ecuaciones utilizadas permiten obtener una idea de lo que sucede
con el cuerpo rígido de manera didáctica pero que en la práctica estas
ecuaciones son expresadas en forma vectorial y matricial, como se ha
explicado en capítulos anteriores.

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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;

sMoments = (F * r); //sumatoria torques o momentos

aang = sMoments/I; //aceleración angular

angle = angle + vang*dt + 0.5*aang*dt*dt; //ángulo rotación;

vang = aang*dt; //velocidad angular

vlin = vang*r; //velocidad lineal

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);

glColor3f(1.0f, 0.3f, 0.0f);


glTranslatef (0.0, 0.0, 0.5);
Disk = gluNewQuadric(); //disco
gluDisk(Disk, 0, 4, 18, 1);
glPopMatrix();

glutSwapBuffers();
glFlush();
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Es de suponer que para cada caso se deben analizar los modelos


computacionales que se utilicen y se ajusten a la solución de los
problemas cinéticos. Por lo general, si se va a tratar un tipo de cuerpo
rígido que tiene una forma cuadrada, alargada, redonda, etc., este
objeto en algún momento podrá ser trasladado o rotado, por lo que se
puede pensar una vez más que para todos, las soluciones y
procedimientos, serán los mismos.

Esto se comprende y es más evidente cuando se somete el cuerpo


rígido a las acciones de más fuerzas y momentos que hacen que el
cuerpo deba adoptar una forma en especial para romper las
resistencias y abrirse camino en el medio.

Un ejemplo claro es el avión con respecto al submarino, con lo que se


podría además pensar, que en simulación, como se dijo, poner a volar
un submarino es lo mismo que sumergir un avión.

En el aire, por ejemplo, un cuerpo que simplemente cae a tierra lo hará


acelerándose con la gravedad. El viento relativo del aire que choca

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

se puede decir que esta aceleración corresponde al frenado o a la


oposición al movimiento del objeto. Si el cuerpo es pesado esta
aceleración de resistencia es pequeña, aunque algunos opinan que no
depende de la masa.

Ejemplo elemental: Una bola de 0.17m de radio y 950 kg/m3 de


densidad (δ), se deja caer al piso.

FD

mg

Figura 4.2 Ejemplo elemental de una bola que cae al piso.

Se debe analizar ahora qué sucede con el cuerpo y qué fuerzas


intervienen en él. Su masa por la gravedad define en estas condiciones
que el peso es la fuerza que será contrarrestada con la resistencia del
aire. Por lo tanto, la sumatoria de fuerzas queda expresada como:

ΣF = mg - FD
Conociendo la densidad de la bola, su masa es entonces

223
Simulación Virtual Interactiva
.
m = δV

Donde V es el volumen de la bola:

V = 4/3 π R3

m = 19.5 kg

Ahora, tomando la ecuación del numeral 3.6.6:

FD = ½ CDAρv²

El coeficiente de resistencia CD = 0.5 es determinado para un objeto


esférico. Tomando la densidad del aire ρ = 1.0 kg/m3 y el radio R =
0.17m, se puede calcular el área A de la porción de esfera (sección
transversal):
A = π R2 = 0.09 m2

Resolviendo:

FD = 0.5 x 0.5 x 0.09 x 1.0 v²

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

donde R es el radio de la esfera, v su velocidad y μ la viscosidad del


fluido. La aceleración de la esfera será nula y su velocidad no seguirá
aumentando, por lo que se moverá con una velocidad constante.

224
V
2,0 Objeto más pesado

pesado
1,0
Objeto más liviano

liviano
0,0

0,0 1,0 2,0 3,0 4,0 5,0 t

Figura 4.3 Gráfica de la curva aproximada de la velocidad de objetos pesados o


livianos.

Ejemplo elemental: Un modelo computarizado de la caída de un


objeto debe tener en cuenta que la velocidad con la cual estos objetos
se mueven es extremadamente rápida para que se pueda apreciar en
una pantalla pequeña. Para esto se ha cambiado la configuración de la
forma de registrar la caída del objeto en cuestión, haciendo un dt muy
pequeño.

En este modelo que puede ser reiniciado presionando la tecla “+”,


permite visualizar una bola que atravesando el aire, cae en un medio
viscoso sin detener su descenso. Las siguientes son sus características:

#define PI 3.141592654

void handleKeypress(unsigned char key, int x, int y)


{

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);
}

El valor del dt es dividido por 1000 para conseguir una mayor


visualización del objeto cayendo. El programa puede ser configurado
en la opción GlutTimerFuntion para mostrar cuadros cada 25 ms. Se ha
tomado como referencia el nivel del fluido la altura de valor 0. Si la
esfera llega a caer por debajo de ese nivel, se cambia enseguida el
medio pasando de los valores de las fuerzas de rozamiento del aire a
fuerzas de resistencia y empuje en el fluido viscoso. Si h = 8 ha
tocado fondo.

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);

if (h >= 0) FD = 0.5*0.5*ro*PI*r*r*cd; // fuerza de resistencia aire


else FD=0;

if (h < 0) FR= -6*PI*visc*1.0*v + FW; // fricción medio viscoso + empuje

226
else FR=0;

sFuerzas = FW + FD + FR;

ay= sFuerzas / masa;

v = v + ay*dt;

h = h + v*dt + 0.5 * ay * dt*dt;

glTranslatef (0.0 , h, -25); //ubicación retirado de pantalla

glPushMatrix();
glColor3f(1.0f, 1.3f, 0.0f);
Sphere = gluNewQuadric(); //define la bola
gluSphere( Sphere, 0.5, 10, 3);
glPopMatrix();

glutSwapBuffers();
glFlush();
}

La bola caerá acelerándose con la gravedad, pero el aire que choca


contra ésta, ejerce una resistencia (fuerza de resistencia) que en
términos generales es proporcional a la forma del cuerpo, la superficie
que enfrenta al viento, la velocidad relativa del cuerpo con el aire,
elevada al cuadrado y la densidad del fluido. Antes de la
programación de este modelo, hay que verificar que las gráficas
correspondientes son las adecuadas y representaran lo que sucede con
el movimiento en caída de la esfera.

Desde una altura de 20 metros, se obtiene la velocidad, aceleración y


la fuerza de resistencia. En la hoja no se muestran los cálculos de la
fricción y empuje.

dv/dt = 9.8 – 0.253/m v2

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

El valor de v está sumado al valor v anterior (no del reposo). El valor


de Vt y la velocidad tendría un comportamiento ajustado a las
siguientes ecuaciones:

Vt = sqrt(2mg/ρCDA) = 8.80

V = Vt ( 1 – exp(-t m/1/2 ρCDA))

9,0

8,0

7,0

6,0

5,0

4,0

3,0

2,0

1,0

0,0

0,0 0,2 0,4 0,6 0,8 1,0 1,2

Figura 4.4 Gráfica de la curva de la velocidad terminal del modelo.

228
4.2.1 Mecánica del vuelo

Los simuladores de vuelo son quizá la mayor atracción entre


desarrolladores de software que van encaminados a recrear con lujos
de detalles la conducta de estos vehículos aéreos a través de las
ecuaciones del cuerpo rígido. Aunque son muchas las variables que
intervienen en el desarrollo de programas de simulación y videojuegos
y dada la complejidad para llevarlos al espacio virtual, el primer paso
consiste en relacionar las ecuaciones experimentales de Newton-Euler
con el modelo que se quiere implementar y así aplicar las fuerzas y
momentos.

4.2.1.1 Movimiento alrededor del eje transversal

En el siguiente listado se muestra el perfil del despegue de un modelo


de avión a 3 grados de libertad, con características propias como masa
e inercia y la forma en que intervienen en el vuelo basados en los
conceptos de traslación y rotación.

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

Figura 4.5 Modelo de avión y fuerzas.

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 “*”.

A diferencia de los juegos dirigidos, donde el avión no presenta


peligro de estrellarse debido al control fácil del modelo y a las
ecuaciones utilizadas para su desarrollo, este modelo se comporta de
manera realista, descendiendo o ascendiendo, hasta llegar al nivel
esperado de altura, o simplemente estrellarse.

#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);
}

Aunque se asume de manera práctica un momento de inercia que se


deriva de la masa y de la distancia r, los valores son proporcionales
entre sí y la variación de cualquiera de ellas afecta de sobremanera el
modelo, de tal forma que pueden generar resultados inesperados en el
vuelo.

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;

//define ángulo de ataque


aoa = 35*PI/180*T;

//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;

Posteriormente la fuerza que actúa en el eje vertical corresponde a la


sustentación L, la cual debe vencer al peso W o igualarlo para que el
avión pueda ascender o descender a comodidad según el ángulo de
ataque. Aquí se supone que la sustentación es igual al peso del avión
como es de esperar incluso utilizando las ecuaciones normales de la
fuerza vertical.

//sumatoria de fuerzas
sFuerzasx = Fx + FDx + FLx + Wx;
sFuerzasy = Fy + FDy + FLy + Wy;

//sumatoria momentos (momento pitch)


sMoments = (F * r)*sin(aoa)*T;

//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;

//ángulo rotación pitch


pitch = pitch + vang*dt;

El valor de este ángulo (pitch) proporciona la dirección de elevación


que ha tomado el cuerpo por acción del ángulo de ataque (aoa)
utilizado para generar un momento o torque en el cuerpo del modelo.
Este valor es expresado en radianes, el cual debe convertirse a grados
para ser entendido por OpenGL.

//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();

if (y<0.0) y=0.01; //que no pase del piso

//fuselaje (perfil)
glColor3f(1.0f, 0.5f, 0.2f);
glPushMatrix();

glTranslatef (-450+x , y, -500);


glRotatef(pitch *180/PI, 0.0f, 0.0f, 1.0f);
glBegin(GL_QUADS);
glVertex2f(-18.0, 1.5);
glVertex2f( 2.0, 1.5);

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);
}

Figura 4.6 Plano vertical del despegue del modelo.

En el anterior modelo la masa está representada por una cantidad que


no varía en el tiempo. La fuerza ejercida en la parte posterior del
modelo no es gradual, sólo dos posiciones de T. La suma de momentos
está representada por la fuerza F y la distancia r, desde el CG del avión
a la parte posterior del mismo, justamente en los elevadores.

Es de entender que este modelo facilita sutilmente el conocer y aplicar


las fuerzas necesarias para que el avión pueda despegar, pero sí se
puede determinar cómo las variables y constantes intervienen en las
ecuaciones del movimiento. Es posible observar además cómo el
avión puede elevarse conforme al ángulo de ataque, el torque

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

Figura 4.7 Modelo de avión y movimiento alrededor del eje z .

Otros movimientos que realiza el avión corresponden al relacionado


con el eje vertical (y, yaw) y al longitudinal (x, roll).

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

El movimiento alrededor del eje x (roll) permite que el avión pueda


girar su fuselaje con el fin de acoplarse a las fuerzas G, las cuales se
originan por efectos de la rotación. Sin este movimiento, el piloto y
tripulación serían empujados hacia los lados al hacer un viraje. Lo
ideal es sentir la aceleración en una misma línea de acción, es decir,
sentir que esta fuerza empuja hacia el asiento. Esta aceleración es
producida por la fuerza centrífuga y la fuerza de gravitación. La
fuerza centrífuga tiende a oponerse al viraje del avión:

m ac = F = mVt2/R

ac = Vt2/R

donde R es el radio de giro, el cual es igual a:

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.

En la figura de cuerpo libre se puede determinar que las fuerzas


verticales se cancelan:
L cos ϕ = W

236
La fuerza neta horizontal está dada por:

L sin ϕ = mVt2/R

Sin considerar la fuerza de resistencia en el eje lateral que afecta el


vuelo, el siguiente código, permite conocer el comportamiento del
avión cuando se decide hacer un viraje. El código muestra el corte
transversal del avión como en la anterior figura, por lo que no se
mezclarán las correspondientes ecuaciones de giro, con las del
movimiento longitudinal, con el fin de lograr un mejor entendimiento
a la conducta de dicho avión. Para empezar se incluye una nueva
fuerza que hace que el piloto sienta la fuerza G en su cuerpo al realizar
ciertas maniobras, como aumentar la velocidad, ascender
repentinamente o hacer un viraje.

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.

El valor de T debe ser lo suficientemente pequeño para que no sea tan


evidente la deriva ocasionada al avión por el cambio de dirección y la
puesta en 0 nuevamente.

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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;

//sumatoria momentos (roll moment)


sMoments = F*r;

//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;

//ángulo rotación roll


roll = roll + vang*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();
}

Es posible modificar los valores del programa para estudiar más el


comportamiento del cuerpo rígido en el espacio. Una fuerza de
resistencia más alta o un empuje de menor valor ocasionan un cambio
de conducta del cuerpo rígido en el medio. Al combinar los dos
programas anteriores se puede además empezar a dar forma a un
simulador de vuelo, teniendo en cuenta las inercias, velocidades,
aceleraciones y otros valores necesarios, los cuales son diferentes
según el eje de rotación que se está analizando, así como utilizar un
eje y común para los dos programas. El movimiento de rotación en el
eje y, (yaw moment), simplemente hace que el avión oriente su línea
de acción (heading) en un plano diferente a la velocidad o rumbo,
ocasionando el derrape o deslizamiento del mismo, justamente el que
muestra que el avión parecería volar de lado.

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.

Se deben recordar entonces esos aspectos y fuerzas que permiten el


movimiento de un avión. Un modelo de avión es diseñado con su CG o
centro de gravedad (también CG centro gráfico en el modelo virtual)
en el punto donde se coincide con el eje del modelo. Sobre este CG, se
puede definir los grados de libertad en que el modelo se puede mover.
Como es un modelo que tiene la particularidad de rotar en los tres
ángulos (Euler) definidos con respecto a las coordenadas y
desplazarse en esos tres ejes coordenados, se dice que es un modelo
con movimiento a 6 grados de libertad (6DOF). Por esta razón, los
estudios sobre aviones se tornan interesantes, debido a la poca
restricción sobre el movimiento que presenta, dado que un buque o un
auto pueden hacerlo pero con mayor y supuesta restricción, pues el
buque o el auto no se desplazan verticalmente como un platillo
volador o avión VTOL, aunque lo hacen en cierta medida, por efecto
de las olas en el caso del barco y cuando el auto pasa un puente o salta
como en la película Los Duques de Hazard, pero se vuelve a lo
mismo, ya está volando.

Una vez se haya definido el avión como una partícula en el espacio


cuyo CG está dado por la posición en el espacio virtual, el cual
también está definido con su centro coordenado fijo, se debe
considerar cuáles son las fuerzas que actúan en el avión para que
pueda tener su respectivo movimiento. Lo primero que se debe
estudiar es la forma y estructura del avión para así poder emplear los
llamados “coeficientes aerodinámicos”, los cuales basados en estudios
previos, son los que determinan al final la conducta del modelo. Si el
modelo es de alas amplias el fuselaje puede tener un cambio brusco en
el aire, si es de alas cortas, puede rotar demasiado, etc. Estos
coeficientes son valores adimensionales y afectan a las fuerzas y
momentos característicos que se presentan en la aeronave. La forma y

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.

Figura 4.10 Modelo de avión y fuerzas

En resumen, para modelar el avión completo, se debe realizar lo


siguiente:

- Determinar las secciones o partes del avión.


- Recoger datos geométricos.
- Como el avión es un cuerpo rígido se debe contar con la velocidad
angular la cual se adiciona a la velocidad lineal del CG y con respecto
al aire. Esto se realiza para calcular la sustentación y resistencia (en
los tres ejes).
- Determinar el ángulo de ataque, dicho ángulo está dado por los
vectores de la sustentación y la resistencia.
- Integrar con respecto al tiempo.

243
Simulación Virtual Interactiva
.
4.2.2 Cinética del auto

Los juegos de autos fantásticos se encuentran en una variedad de


programas orientados a recrear la física automovilística, entre los que
se pueden mencionar el juego de carreras, análisis de colisiones,
mecánica del automóvil, entrenamiento en conducción, recorrido
urbano, etc. Son muchas las aplicaciones que ofrece la simulación a
los diferentes contenidos relacionados con el asunto automovilístico.

Inicialmente se deben conocer el comportamiento físico del auto y las


variables que denotan sus características aerodinámicas, como sucede
con todo cuerpo rígido. Se debe por lo tanto comprender las
ecuaciones necesarias para que el auto pueda girar conforme se hayan
orientado las llantas en una dirección. Un auto está compuesto por dos
partes esenciales, la carrocería y las llantas. Estas últimas, deben ser
tratadas de forma independiente para que el auto se comporte de cierta
manera debido a la interacción de cada una con respecto al piso. Estos
cinco elementos están referenciados por un punto al que se ha
denominado centro geométrico, pero que no es más que el centro de
masa o de gravedad del auto CG. Las fuerzas que actúan sobre las
llantas se ven reflejadas con respecto al centro de gravedad del auto,
lo que determina el comportamiento global del mismo en el espacio
virtual.

Se asume que el auto es liviano, el cual puede ser simplemente


impulsado por una fuerza que hará que adquiera una aceleración,
pueda disminuir la velocidad, girar y frenar. Como todo simulador
donde se aplica la física, los modelos de autos están diseñados con
ecuaciones ya establecidas para producir un efecto cualquiera, sin
embargo, no todos hacen uso de estas ecuaciones, ya que utilizan
expresiones más sencillas que simulan su comportamiento o un efecto
dentro del programa. El modelo se desarrolla en cualquier producto de
modelado 3D tal como 3DsMax, Maya, Blender, etc.

Lo importante es tener en cuenta que las piezas principales, tales como


las llantas y la carrocería son modelos que siguen un orden jerárquico,
cargados de forma independiente, lo que puede reflejarse en el

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.

Cinemática, dinámica y aerodinámica - El auto tiene dos


comportamientos que se pueden llamar rectilíneo y curvilíneo, es decir
las trayectorias que describe al paso del tiempo. La cinemática viene a
ofrecernos esas ecuaciones en las que intervienen la velocidad y la
aceleración. Esto ocurre en el plano (xz), donde y es la vertical
perpendicular que pasa por CG. Aunque la realidad es que puede tomar
valores negativos, por lo general el ambiente también puede estar
delimitado por un z=0.

El punto de coordenadas x,y,z el cual permite tratar al auto como un


cuerpo rígido es justamente el CG o centro de gravedad. Con base en
este punto es que los cálculos de la cinemática son establecidos. Se
dice que el cuerpo rígido es un continuo de masa donde las distancias
entre sus puntos permanecen constantes. Las partículas del cuerpo son
entonces reemplazadas por elementos de volumen los cuales tienen
masa.

En el auto también se aplica el hecho de que cuando se estudia el


movimiento de un cuerpo rígido es conveniente descomponerlo en
movimiento de traslación y de rotación (ecuaciones de Newton-
Euler). En la traslación se calculan las fuerzas resultantes y en la
rotación se necesita una magnitud que indique la forma de cómo está
distribuida la masa de dicho cuerpo alrededor de un eje (el que pasa
por el CG), lo que se conoce como el tensor de inercia.

Se explicó además que la aerodinámica es la rama de la mecánica de


fluidos que estudia las acciones que aparecen sobre los cuerpos sólidos
cuando existe un movimiento relativo entre estos y un fluido, en este
caso el aire. Sobre cada punto de la superficie del automóvil, están
presentes un par de fuerzas, una fuerza de presión, normal a la
superficie del cuerpo, debido a la velocidad relativa entre ambos y una
fuerza de rozamiento, tangente a la superficie del cuerpo. Este efecto

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.

La resistencia aerodinámica es la fuerza más importante a vencer.


Esto es, al movimiento del auto se le oponen siempre dos fuerzas de
gran magnitud: la de rodamiento y la del aire.

Los respectivos coeficientes se determinan de forma experimental en


un entorno controlado (túnel de viento), en el que se puede conocer la
velocidad, la densidad del aire, el área de referencia (factor de forma)
y la resistencia y la sustentación producida sobre un modelo de auto
conocido.

T
W

Figura 4.11 Fuerzas que actúan en el auto

Para esto se cumplen determinados parámetros: similitud geométrica,


cinemática y dinámica, similitud en el número de Reynolds (Re),
debido a que a bajas velocidades, son mucho más significativos los
efectos de la viscosidad.

Los coeficientes más relevantes en este campo son el coeficiente de


resistencia y el coeficiente de sustentación, que se determinan por
una simple división entre las fuerzas correspondientes, la fuerza de
resistencia o fuerza de sustentación y el producto de la presión

246
dinámica por una superficie de referencia. La resistencia se expresa
generalmente en términos de coeficientes no-dimensionales.

CD = FD / ½ Aρ v2

donde, CD = Coeficiente de resistencia


FD = Fuerza de resistencia
ρ = Densidad del aire
v = Velocidad
A = Superficie frontal de referencia

Las ecuaciones pueden codificarse de la siguiente manera:

v = sqrt(vx2 + vz2);

fdx = - CD vx v;

fdz = - CD vz v;

Por último se tiene la resistencia de rodamiento, causada por la


fricción del caucho de las llantas y la superficie de la carretera.

Fr = - Cr v

donde Cr es una constante y v es el vector velocidad.

Incluyendo la fuerza de tracción FT, para dar empuje al auto, la fuerza


total longitudinal es la suma vectorial de estas tres fuerzas:

Fl = FT + F D + Fr

La aceleración se detiene cuando las fuerzas de resistencia y tracción


se anulan entre sí. La resistencia aerodinámica es la fuerza de
resistencia más importante. Un automóvil continuará acelerándose
hasta alcanzar el total de fuerzas externas de resistencia (resistencia
aerodinámica y resistencia al rodamiento) hasta anular la fuerza
motriz proporcionada por la transmisión. La II ley de Newton del
movimiento establece que la suma de las fuerzas externas que actúan

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

F = suma de todas las fuerzas externas que actúan sobre un cuerpo.


m = masa del cuerpo (constante).
v = la velocidad del cuerpo.

La velocidad del auto es determinada integrando la aceleración con


respecto al tiempo. Entonces utilizando los métodos de integración
como el método de Euler.

v = v + a dt

La posición del auto se determina integrando la velocidad con


respecto al tiempo:

p = p + v dt

Timón y llantas - El timón por lo general está configurado por el


steering wheel, conectado a través del puerto USB (Capítulo 6).
Entrega la señal de los valores izquierda a derecha, generado por el
potenciómetro. Los modelos de las llantas en 3D deben también ser
diseñadas teniendo en cuenta el centro geométrico de estas, con el fin
de poder ubicarlas en el espacio tridimensional haciendo parte luego
del conjunto completo del auto.

Las llantas delanteras obedecen al comportamiento del steering wheel,


girando tantos grados (a la izquierda o a la derecha) se haya
programado para el efecto de direccionar el auto. Estas también deben
girar sobre su eje horizontal, conforme el auto va avanzando, al igual
que las llantas posteriores, las cuales giran sobre un mismo eje, a

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

Motor y torque - El motor proporciona la energía mecánica para


impulsar el auto. La potencia es una medida de la cantidad de trabajo
hecho por una fuerza o un momento durante el tiempo. El torque, en
términos entendibles, es la fuerza que desarrolla la máquina en toda la
gama de los rpm.

La potencia depende del torque multiplicado por el número de


revoluciones en que gira el motor. Muchos modelos producen
alrededor de 300 caballos de fuerza de Potencia y 500 libras de
torque.

P = T x rpm

El número HP especificado en un vehículo es más bien un valor


numérico teórico que se alcanza solamente acelerando a fondo y al
número determinado de revoluciones. Cuanto más alto sea el torque
máximo y más bajo el número de revoluciones del motor al que se
alcanza, tanta más fuerza de empuje tendrá el auto.

La potencia que se necesita realmente alcanza a las llantas en forma


de torque, conociendo el radio de la llanta se genera la fuerza que
superará la resistencia total. La relación entre el motor y la llanta está
dada por la caja de cambios:

Fw = Tw / r

Donde Fw es la fuerza desarrollada por la llanta, Tw el torque en la


llanta y r es el radio.

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.

Peso y efecto en las llantas – El peso afecta la fuerza de tracción en


cada llanta debido a a una fuerza límite de fricción:

Frl = μW

siendo μ un valor entre 1.0 y 1.50.

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

Diferencial - Un aspecto esencial en el tratado automovilístico es la


diferencia de rotación entre las llantas internas que giran menos al
tomar una curva con respecto a las otras que deben recorrer mayor
espacio. En otras palabras, el auto debe tener diferentes velocidades
en cada llanta en especial cuando debe girar. La diferencia permite
transmitir la potencia a las dos llantas motrices.

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.

5.2 El modelo como archivo en disco


OpenGL, orientado a la simulación, a la animación y no al modelado,
permite cargar modelos con las funciones que ofrece para tal
propósito. Un modelo mucho más grande como un avión, auto, etc.,
requiere que los datos estén en un archivo y no haciendo parte de los
códigos del programa.

Figura 5.1 Mesh, textura y modelo texturizado.

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.

El formato (.obj) permite que el mesh sea leído en forma de texto y


para esto hay que preparar un buen lector de mesh con el fin de que
los datos sean leídos para cualquier modelo que se desee cargar con el
mismo código. Un cubo o caja de 6 lados de 1 m3 en este formato
puede verse así:

#
# 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

Esta caja de 6 lados, tiene exactamente 12 triángulos que la conforman


y 8 vértices que permiten la unión de las aristas de la caja.

Normal
1 4

2 Cara
3

Cara
5 6

8 Vértice
7

Figura 5.2 Mesh de un cubo, índices, vértices, caras y normales.

Cuando se exporta a Object File Format (.off), se obtienen los


siguientes datos del modelo:

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

El formato (.asc) permite leer la geometría de los objetos de una


manera más entendible gracias a su ordenada estructura, pero es
inevitable la cantidad de datos generados por el modelo, por lo que es
indispensable, modelar objetos livianos y aquí es cuando la textura
ayuda un poco a minimizar dicha cantidad. El formato (.asc) para el
mismo cubo se aprecia a continuación:

Ambient light color: Red=0.1 Green=0.1 Blue=0.1


Named object: "Object_0"
Tri-mesh, Vertices: 8 Faces: 12
Vertex list:
Vertex 0: X:-500.0 Y:500.0 Z:-500.0
Vertex 1: X:-500.0 Y:500.0 Z:500.0
Vertex 2: X:500.0 Y:500.0 Z:500.0
Vertex 3: X:500.0 Y:500.0 Z:-500.0
Vertex 4: X:-500.0 Y:-500.0 Z:-500.0
Vertex 5: X:500.0 Y:-500.0 Z:-500.0
Vertex 6: X:500.0 Y:-500.0 Z:500.0
Vertex 7: X:-500.0 Y:-500.0 Z:500.0
Face list:
Face 0: A:0 B:1 C:2 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 1: A:2 B:3 C:0 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 2: A:4 B:5 C:6 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 3: A:6 B:7 C:4 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1
Face 4: A:0 B:3 C:5 AB:1 BC:1 CA:1
Material:"r192g192b192a0"
Smoothing: 1

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:

Identificador - El cual es un número hexadecimal de 2 bytes. Este


campo dice si el chunk se puede utilizar.

Longitud del chunk - De 4 bytes el cual es la suma de las longitudes


de todos los sub-chunks.

Datos del chunk – El cual es de longitud variable y contiene los datos


de la escena.

La siguiente estructura jerárquica muestra los más importantes chunks


en un archivo.

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

La siguiente función muestra una forma de leer los vértices, caras y


las coordenadas de texturas de un objeto. Debido a la extensión del
tema relacionado con la apertura de archivos 3ds, se sugiere investigar
un poco en este tema con el fin de familiarizarse con dichos archivos
en caso que decida que es el formato que utilizará en sus programas:

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;

if ((l_file=fopen (p_filename, "rb"))== NULL) return 0; //abre el archivo


while (ftell (l_file) < filelength (fileno (l_file)))
{
fread (&l_chunk_id, 2, 1, l_file); //encabezado del chunk
fread (&l_chunk_length, 4, 1, l_file); //longitud del chunk

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
switch (l_chunk_id)
{
case 0x4d4d:
break;

case 0x3d3d:
break;

case 0x4000: //bloque del objeto


i=0;
do
{
fread (&l_char, 1, 1, l_file);
p_object->name[i]=l_char;
i++;
}while(l_char != '\0' && i<20);
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;

for (i=0; i<l_qty; i++)


{
fread (&p_object->vertex[i].x, sizeof(float), 1, l_file);
fread (&p_object->vertex[i].y, sizeof(float), 1, l_file);
fread (&p_object->vertex[i].z, sizeof(float), 1, l_file);
}
break;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case 0x4120: //caras

fread (&l_qty, sizeof (unsigned short), 1, l_file);


p_object->polygons_qty = l_qty;

for (i=0; i<l_qty; i++)


{
fread (&p_object->polygon[i].a, sizeof (unsigned short), 1, l_file);
fread (&p_object->polygon[i].b, sizeof (unsigned short), 1, l_file);
fread (&p_object->polygon[i].c, sizeof (unsigned short), 1, l_file);
fread (&l_face_flags, sizeof (unsigned short), 1, l_file);
}
break;

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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:

nt = 12; //número de caras o triángulos

vertices [nv][3] = {{x0,y0,z0}, {x1,y1,z1}, {x2,y2,z2}, ...{}};

donde nv es el número de vértices. Para nv = 8:

GLfloat vertices [8][3] = {


{-500.0f, 500.0f, -500.0f}, {-500.0f, 500.0f, 500.0f}, {500.0f, 500.0f, 500.0f}, {500.0f,
500.0f, -500.0f}, {-500.0f, -500.0f, -500.0f}, {500.0f, -500.0f, -500.0f}, {500.0f, -500.0f,
500.0f}, {-500.0f, -500.0f, 500.0f}};

Para el caso de las normales se puede utilizar la siguiente estructura:


normales [nn][3] = {{x0,y0,z0}, {x1,y1,z1}, {x2,y2,z2}, ...{}};
donde nn es el número de normales. Para nn = 6:

GLfloat normals [6][3] = {


{0.0f,1.0f,0.0f},{0.0f,-1.0f,0.f},{0.0f,0.0f,-1.0f}, {1.0f,0.0f,0.0f},{0.0f,0.0f,1.0f},
{-1.0f,0.0f,0.0f}};

En cuanto a las texturas, difiere un tanto de las dos anteriores:


texturas [nc][2] = {{u0,v0},{u1,v1}, {u2,v2}, ...{}}.
Donde nc = número de coordenadas. Para nc=6:

GLfloat texturas [6][2] = {


{1.0f,1.0f},{0.0f,1.0f},{1.0f,0.0f},{0.0f,0.0f},{0.0f,2.0f},{1.0f,2.0f}};

Posteriormente puede ser dibujado el triángulo con las funciones


correspondientes en OpenGL. Este tipo de organización de datos del
modelo puede ser llevado a cabo de manera fácil si el objeto es
pequeño, anotando los vértices y enumerando las caras o triángulos
que generó el dibujo. Pero con un modelo más grande es bastante
tedioso el trabajo manual que hay que realizar y gastaría muchas horas
de modelación o programación hasta obtener el objeto virtual. Los

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.

Figura 5.3 Mesh de un cubo y texturas.

El siguiente listado de programa en C++/OpenGl, muestra el diseño de


un cubo rotando en pantalla:

#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

glBegin(GL_QUADS); //dibujar cubo


glColor3f(0.0f,1.0f,0.0f); //lado superior
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);

glColor3f(1.0f,0.5f,0.0f); //lado inferior


glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);

glColor3f(1.0f,0.0f,0.0f); //lado frontal


glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);

glColor3f(1.0f,1.0f,0.0f); //lado posterior


glVertex3f( 1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f,-1.0f);

glColor3f(0.0f,0.0f,1.0f); //lado izquierdo


glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);

261
Simulación Virtual Interactiva
.
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);

glColor3f(1.0f,0.0f,1.0f); //lado derecho


glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
glEnd();
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 ();

262
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutIdleFunc (idle_func);
glutMainLoop();
return 0;
}

Aunque la función glutSolidCube puede dibujar un cubo con algún


color plano de forma inmediata, la forma de texturizarlo es lo que
hace la diferencia, sobre todo cuando se desea plasmar una imagen en
cada lado del mismo.

5.3 Imágenes, bitmaps y texturas


Cuando se trata de gráficas raster, es posible utilizar con OpenGL dos
tipos de elementos para recubrir o dibujar píxeles en la pantalla. La
primera forma se realiza con los bitmaps, o mapas de bits, que
permiten entre otras cosas la renderización de caracteres de textos (de
un tipo o font) en pantalla, o crear modelos 2D (sprites) en los
videojuegos y elementos de la GUI como botones y controles en las
ventanas.

Los bitmaps están compuestos de una máscara encapsulada en un


arreglo de dos dimensiones representando un área rectangular de la
ventana. Los bitmaps mantienen un sencillo bit de información por
cada píxel de pantalla, indicando si el valor es uno o cero (1,0).

La segunda forma es con imágenes propiamente dichas. Soportan más


bits de información por cada píxel, valores que pueden estar entre los
2 a 24 bits por píxel. Cada píxel puede representar uno de los 16
millones de colores (224).

Una imagen con una profundidad de 16 millones de colores se aprecia


mejor, pero requiere más memoria para almacenarla. La resolución de
bits puede decir a OpenGL específicamente cuál es el color del píxel
con los componentes R,G,B y A (rojo, verde, azul y alpha). A las
imágenes se les denomina comúnmente mapas de píxeles.

263
Simulación Virtual Interactiva
.
5.3.1 Texturizado

Definitivamente colocar texturas a los modelos en el escenario es una


tarea de mucha paciencia. El modelo que a continuación se utilizará
para esta explicación sobre texturas y que corresponde a un “Cessna
A-37B - Dragon Fly”, puede ser texturizado de manera sencilla,
gracias a su geometría que en la mayoría son recubrimientos no
específicos ni de consideración. Pero una de las partes que más
atención requiere en cuanto a las coordenadas de la posición de la
textura es la del tablero interno de controles.

Figura 5.4 Modelo de avión 3D sin texturizar

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.

Figura 5.5 Textura del fuselaje del modelo A-37B

Se empieza por definir la textura cuyos lados sean múltiplos de 2n (2,


4, 8, 16, 32, 64 etc.), de forma rectangular si es posible. En algunos
casos es necesario invertir la textura (flip) de arriba-abajo, por ser la
forma en que es leído dentro del escenario. Esto es debido al origen
(0,0) de la textura con respecto a la pantalla.

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.

Dentro de la textura es posible tener de forma aislada cada uno de los


diseños que recubren el modelo en el escenario. Por esto es necesario
que sepa a conciencia cuáles son los píxeles que delimitan cada figura.

Figura 5.6 Proceso de texturizar el modelo en malla

Cuando las figuras a texturizar son cuadradas (lados iguales), no hay


problema en determinar los valores u,v, sobre todo cuando es una sola
imagen que encaja directamente en el cuadro de la malla, lo que
simplemente corresponde al ancho y alto de la porción de textura.

Pero cuando la figura a plasmar o imprimir en el modelo es irregular


entonces los valores ya no son tan fáciles de determinar a simple vista.

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.

Recuerde que el valor de 1.0 en OpenGL representa cualquier valor


alto o ancho de la imagen o textura. Simplemente divida la
coordenada entre la dimensión total del lado de la imagen. Si 1023 =
1.0, 512 = 0.50, es decir la mitad.

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

Suponiendo que se conocen los siete puntos geométricos en la malla


del modelo del avión de la anterior figura, cada uno de estos siete

267
Simulación Virtual Interactiva
.
vértices corresponde directamente con los puntos (A..G) de
coordenadas u,v en la textura.

Inevitablemente la gran cantidad de datos que hay que almacenar en


disco y en memoria es muy grande a medida que el modelo crece en
vértices.

Vértice (x,y,z) Coordenadas en Píxels Coordenadas u,v

X1, Y1, Z1 A (855, 609) A (0.836, 0.595)


X2, Y2, Z2 B (927, 644) B (0.906, 0.630)
X3, Y3, Z3 C (974, 924) C (0.952, 0.903)
X4, Y4, Z4 D (762, 929) D (0.745, 0.908)
X5, Y5, Z5 E (545, 944) E (0.533, 0.923)
X6, Y6, Z6 F (755, 847) F (0.738, 0.828)
X7, Y7, Z7 G (769, 657) G (0.752, 0.642)

(C)3Dium

Figura 5.8 Modelo en el escenario virtual

268
(C)3Dium

Figura 5.9 Detalle del tablero de control del modelo del A-37B

Figura 5.10 Detalle de modelo de un barco y el modelo texturizado.

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.

5.4 La imagen en memoria


La lectura de una imagen que se encuentra en disco se realiza
dependiendo del formato de dicha imagen, siendo éste, jpg, bmp, raw,
gif, etc. A continuación las definiciones de estos tipos de formatos,
conforme a las explicaciones dadas en manuales de PhotoShop:

El formato (.jpg) se utiliza habitualmente para mostrar fotografías y


otras imágenes de tono continuo en documentos HTML a través de la
Web y otros servicios en línea. Admite los modos de color CMYK,
RGB y escala de grises pero no canales alfa (opacidad).

Un formato bastante utilizado es el formato (.bmp). Es un formato de


imagen estándar de Windows, el cual admite los modos de color RGB,
color indexado y escala de grises.

El formato (.gif) es un formato comprimido diseñado para minimizar


el tamaño del archivo y el tiempo de transferencia electrónica. Este
formato preserva la transparencia en imágenes de color indexado, sin
embargo, no admite canales alfa.

El formato (.tga), conocido como Targa, admite imágenes RGB de 16


bits, de 24 bits y de 32 bits (8 bits x 3 canales de color más un canal
alfa de 8 bits). Targa admite también imágenes de color indexado y en
escala de grises sin canales alfa.

270
Uno de los procesos más sencillos es el de cargar archivos (.raw)
desde la ubicación en discos.

El formato (.raw) se ha diseñado para incluir las imágenes en formatos


sin documentar y al abrirlas se deben especificar las dimensiones y
otros valores. Es un formato de archivo flexible utilizado en la
transferencia de imágenes entre aplicaciones, el cual admite imágenes
CMYK, RGB y en escala de grises con canales alfa.

Figura 5.11 Modelo del cubo con textura

El siguiente listado muestra el programa con las funciones


correspondientes para la carga de una imagen (.raw) de 512 x 512, la
cual recubre el lado izquierdo del modelo del cubo.

#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

glColor3f(0.0f,1.0f,0.0f); //lado superior


glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);

glColor3f(1.0f,0.5f,0.0f); //lado inferior


glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);

glColor3f(1.0f,0.0f,0.0f); //lado frontal


glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);

glColor3f(1.0f,1.0f,0.0f); //lado posterior


glVertex3f( 1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f,-1.0f);

glColor3f(1.0f,1.0f,1.0f); //lado izquierdo, color blanco


glTexCoord2f (0.0, 0.0); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f (0.0, 1.0); glVertex3f(-1.0f, 1.0f,-1.0f);
glTexCoord2f (1.0, 1.0); glVertex3f(-1.0f,-1.0f,-1.0f);
glTexCoord2f (1.0, 0.0); glVertex3f(-1.0f,-1.0f, 1.0f);

glColor3f(1.0f,0.0f,1.0f); //lado derecho


glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
glEnd();

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

Figura 5.12 Modelo de terreno y cilindro sobre una superficie

A menos que sea un generador automático de terrenos aleatorios, la


malla puede ser modelada en un editor 3D, e importada al ambiente o
escenario que se desee construir. Lo más recomendable es modelar
por porciones (métodos como octrees), para que sea fácil la carga
dinámica de dichas porciones cuando la cámara y los objetos
principales se encuentren en una parte limitada del ambiente virtual.
Las mallas pequeñas ayudan a que la computadora no se sature de
información que no aparecerá en pantalla. Además para los cálculos
de colisión, hay que tener en cuenta los ángulos de inclinación o las
pendientes de cada plano. Pueden ser texturizados siguiendo el mismo
procedimiento que se explicó en el numeral 5.1.2.1.

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.

Aunque es un tanto elemental la simulación de las ondas de agua que


a continuación se mostrará, permite entender el comportamiento de
este modelo, a través de una serie de puntos (como las partículas de la
tela en el numeral 3.5.3) que ya han sido seleccionados para que
cumplan la misión de forma ordenada de generar una onda. Todos
estos punto han salido de una función sin(), con una amplitud que
puede ser variada a gusto. El programa permite generar
automáticamente más planos con vértices para que el paso de la
corriente sea también continuo.

Figura 5.13 Modelo de la superficie del océano.

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

// Waves.cpp : Defines the entry point for the console application.


//
#include "stdafx.h"
#include <windows.h>
#include <GL/gl.h>
#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 cx, cz,pi, pj, pasa, tam;


float aspect_r;
float pmar, pmer, divi, tx, ty, tide,td, vez, veces, aux, rot;
float punto[500][500];

//-------------------------------------------------------------------------------------------------------------
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 ();

glTranslatef(-200.0, -40.0, -100.0); //coloca la cámara para ver la imagen


glRotatef (rot, 0.0, 1.0, 0.0);

glColor3f(0.1, 0.2, 0.3);


pmar = pmar + 0.6;
pmer = pmer + 0.1;
if (pmar>24*divi-1) pmar=0;
if (pmer>24*divi-1) pmer=0; //el número de divisiones…
//…por porciones de mar
glPushMatrix();
glTranslatef ( -(96*vez) + pmer, 0.0, -(96*vez) + pmar );

glBegin(GL_LINES); //dibuja la malla


for (cx =0; cx<tam-1 ;cx=cx+1)
for (cz =0; cz<tam-1 ;cz=cz+1)
{
tx = (float)cx/24;
ty = (float)cz/24;
td = (float) 1/24;

glVertex3f (divi*cx , tide*punto[cx][cz] , divi*cz ); //1er triángulo


glVertex3f (divi*(cx+1), tide*punto[cx+1][cz] , divi*cz );
glVertex3f (divi*(cx+1), tide*punto[cx+1][cz+1] , divi*(cz+1));

glVertex3f (divi*cx, tide*punto[cx][cz+1], divi*(cz+1)); //2do triángulo


glVertex3f (divi*cx , tide*punto[cx][cz] , divi*cz );
glVertex3f (divi*(cx+1), tide*punto[cx+1][cz+1] , divi*(cz+1));
}
glEnd();
glPopMatrix();
glutSwapBuffers ();
glFlush();
}

278
//-------------------------------------------------------------------------------------------------------------
void init(void)
{
glEnable (GL_DEPTH_TEST);
divi = 8;
vez = 4;

punto [0][0] = 0.000 ; punto [1][0] = 0.000 ; punto [2][0] = 0.000 ;


punto [0][1] = 0.006 ; punto [1][1] = 0.007 ; punto [2][1] = 0.011 ;
punto [0][2] = 0.020 ; punto [1][2] = 0.030 ; punto [2][2] = 0.040 ;
punto [0][3] = 0.045 ; punto [1][3] = 0.065 ; punto [2][3] = 0.085 ;
punto [0][4] = 0.065 ; punto [1][4] = 0.095 ; punto [2][4] = 0.125 ;
punto [0][5] = 0.080 ; punto [1][5] = 0.115 ; punto [2][5] = 0.150 ;
punto [0][6] = 0.085 ; punto [1][6] = 0.125 ; punto [2][6] = 0.160 ;
punto [0][7] = 0.080 ; punto [1][7] = 0.115 ; punto [2][7] = 0.150 ;
punto [0][8] = 0.065 ; punto [1][8] = 0.095 ; punto [2][8] = 0.125 ;
punto [0][9] = 0.045 ; punto [1][9] = 0.065 ; punto [2][9] = 0.085 ;
punto [0][10] = 0.020 ; punto [1][10] = 0.030 ; punto [2][10] = 0.040 ;
punto [0][11] = 0.006 ; punto [1][11] = 0.007 ; punto [2][11] = 0.008 ;
punto [0][12] = 0.030 ; punto [1][12] = 0.025 ; punto [2][12] = 0.015 ;
punto [0][13] = 0.065 ; punto [1][13] = 0.055 ; punto [2][13] = 0.045 ;
punto [0][14] = 0.135 ; punto [1][14] = 0.115 ; punto [2][14] = 0.095 ;
punto [0][15] = 0.240 ; punto [1][15] = 0.205 ; punto [2][15] = 0.170 ;
punto [0][16] = 0.345 ; punto [1][16] = 0.295 ; punto [2][16] = 0.245 ;
punto [0][17] = 0.415 ; punto [1][17] = 0.325 ; punto [2][17] = 0.295 ;
punto [0][18] = 0.427 ; punto [1][18] = 0.330 ; punto [2][18] = 0.300 ;
punto [0][19] = 0.415 ; punto [1][19] = 0.315 ; punto [2][19] = 0.290 ;
punto [0][20] = 0.345 ; punto [1][20] = 0.295 ; punto [2][20] = 0.235 ;
punto [0][21] = 0.200 ; punto [1][21] = 0.170 ; punto [2][21] = 0.140 ;
punto [0][22] = 0.095 ; punto [1][22] = 0.080 ; punto [2][22] = 0.055 ;
punto [0][23] = 0.000 ; punto [1][23] = 0.000 ; punto [2][23] = 0.000 ;

punto [3][0] = 0.000 ; punto [4][0] = 0.000 ; punto [5][0] = 0.000 ;


punto [3][1] = 0.009 ; punto [4][1] = 0.010 ; punto [5][1] = 0.011 ;
punto [3][2] = 0.050 ; punto [4][2] = 0.060 ; punto [5][2] = 0.070 ;
punto [3][3] = 0.105 ; punto [4][3] = 0.125 ; punto [5][3] = 0.145 ;
punto [3][4] = 0.155 ; punto [4][4] = 0.185 ; punto [5][4] = 0.215 ;
punto [3][5] = 0.185 ; punto [4][5] = 0.220 ; punto [5][5] = 0.255 ;

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 ;

punto [6][0] = 0.000 ; punto [7][0] = 0.000 ; punto [8][0] = 0.000 ;


punto [6][1] = 0.012 ; punto [7][1] = 0.013 ; punto [8][1] = 0.014 ;
punto [6][2] = 0.080 ; punto [7][2] = 0.090 ; punto [8][2] = 0.100 ;
punto [6][3] = 0.165 ; punto [7][3] = 0.185 ; punto [8][3] = 0.205 ;
punto [6][4] = 0.245 ; punto [7][4] = 0.275 ; punto [8][4] = 0.255 ;
punto [6][5] = 0.290 ; punto [7][5] = 0.295 ; punto [8][5] = 0.270 ;
punto [6][6] = 0.300 ; punto [7][6] = 0.300 ; punto [8][6] = 0.300 ;
punto [6][7] = 0.290 ; punto [7][7] = 0.295 ; punto [8][7] = 0.270 ;
punto [6][8] = 0.245 ; punto [7][8] = 0.275 ; punto [8][8] = 0.255 ;
punto [6][9] = 0.165 ; punto [7][9] = 0.185 ; punto [8][9] = 0.205 ;
punto [6][10] = 0.080 ; punto [7][10] = 0.090 ; punto [8][10] = 0.100 ;
punto [6][11] = 0.012 ; punto [7][11] = 0.013 ; punto [8][11] = 0.014 ;
punto [6][12] = 0.005 ; punto [7][12] =-0.010 ; punto [8][12] =-0.015 ;
punto [6][13] = 0.005 ; punto [7][13] =-0.013 ; punto [8][13] =-0.024 ;
punto [6][14] = 0.015 ; punto [7][14] =-0.015 ; punto [8][14] =-0.031 ;
punto [6][15] = 0.030 ; punto [7][15] =-0.018 ; punto [8][15] =-0.034 ;
punto [6][16] = 0.045 ; punto [7][16] =-0.020 ; punto [8][16] =-0.040 ;
punto [6][17] = 0.055 ; punto [7][17] =-0.022 ; punto [8][17] =-0.043 ;
punto [6][18] = 0.060 ; punto [7][18] =-0.024 ; punto [8][18] =-0.045 ;
punto [6][19] = 0.055 ; punto [7][19] =-0.022 ; punto [8][19] =-0.045 ;
punto [6][20] = 0.045 ; punto [7][20] =-0.020 ; punto [8][20] =-0.040 ;

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 ;

punto [9][0] = 0.000 ; punto [10][0] = 0.000 ; punto [11][0] = 0.000 ;


punto [9][1] = 0.015 ; punto [10][1] = 0.016 ; punto [11][1] = 0.017 ;
punto [9][2] = 0.110 ; punto [10][2] = 0.120 ; punto [11][2] = 0.130 ;
punto [9][3] = 0.225 ; punto [10][3] = 0.245 ; punto [11][3] = 0.265 ;
punto [9][4] = 0.255 ; punto [10][4] = 0.265 ; punto [11][4] = 0.275 ;
punto [9][5] = 0.295 ; punto [10][5] = 0.285 ; punto [11][5] = 0.275 ;
punto [9][6] = 0.300 ; punto [10][6] = 0.300 ; punto [11][6] = 0.285 ;
punto [9][7] = 0.295 ; punto [10][7] = 0.285 ; punto [11][7] = 0.300 ;
punto [9][8] = 0.235 ; punto [10][8] = 0.265 ; punto [11][8] = 0.285 ;
punto [9][9] = 0.225 ; punto [10][9] = 0.245 ; punto [11][9] = 0.265 ;
punto [9][10] = 0.095 ; punto [10][10] = 0.120 ; punto [11][10] = 0.130 ;
punto [9][11] = 0.015 ; punto [10][11] = 0.016 ; punto [11][11] = 0.017 ;
punto [9][12] =-0.020 ; punto [10][12] =-0.025 ; punto [11][12] =-0.030 ;
punto [9][13] =-0.032 ; punto [10][13] =-0.048 ; punto [11][13] =-0.060 ;
punto [9][14] =-0.043 ; punto [10][14] =-0.064 ; punto [11][14] =-0.081 ;
punto [9][15] =-0.052 ; punto [10][15] =-0.078 ; punto [11][15] =-0.098 ;
punto [9][16] =-0.058 ; punto [10][16] =-0.090 ; punto [11][16] =-0.112 ;
punto [9][17] =-0.062 ; punto [10][17] =-0.095 ; punto [11][17] =-0.120 ;
punto [9][18] =-0.065 ; punto [10][18] =-0.097 ; punto [11][18] =-0.122 ;
punto [9][19] =-0.065 ; punto [10][19] =-0.097 ; punto [11][19] =-0.119 ;
punto [9][20] =-0.062 ; punto [10][20] =-0.089 ; punto [11][20] =-0.100 ;
punto [9][21] =-0.053 ; punto [10][21] =-0.068 ; punto [11][21] =-0.073 ;
punto [9][22] =-0.030 ; punto [10][22] =-0.037 ; punto [11][22] =-0.066 ;
punto [9][23] = 0.000 ; punto [10][23] = 0.000 ; punto [11][23] = 0.000 ;

// los últimos 12 puntos


for (pi=12; pi<24; pi++)
{
for (pj=0; pj<24; pj++)
punto [pi][pj]= punto [23-pi][pj];
}
//cuadros de par en par
for (veces=0; veces < vez; veces++)
{
for (pi=24+pasa; pi<48+pasa; pi++)
for (pj=0; pj<48+pasa; pj++)

281
Simulación Virtual Interactiva
.
{
punto [pi][pj]= punto [pi-(24+pasa)][pj];
}

for (pi=0; pi<48+pasa; pi++)


for (pj=24+pasa;pj<48+pasa; pj++)
{
punto [pi][pj]= punto [pi][pj-(24+pasa)];
}
pasa=pasa+24;
}
tam=pasa;
}

//-------------------------------------------------------------------------------------------------------------
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;

case 'r': //rota el ambiente virtual


rot = rot + 10;
if (rot>=360) rot=0;
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 ( "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.

Este tipo de simulaciones permite sincronizar las ondas cuyos puntos


son generados por ecuaciones con un cuerpo que esté flotando en la
superficie, tal como un bloque de madera, cilindro con aire o un barco
virtual. Cada punto determina la altura y en cada coordenada xz del
plano, lo cual coincide con el centro de gravedad del objeto en
cuestión o un punto distante de él. Esta sincronización se lleva a cabo
leyendo el vértice o vértices (puntos) que están por debajo del objeto
flotante al paso o recorrido por encima de la malla, obteniéndose la
altura correspondiente y haciendo la altura del centro de gravedad del
objeto igual o proporcional a este valor.

Otra forma es hacer que el modelo de un barco por ejemplo, se mueva


conforme a la ecuación de la onda, pero que no haya relación directa
con la malla del mar. Si no se realiza este proceso con sumo cuidado,
podría fallar el sincronismo entre los dos modelos.

El paso siguiente consiste en que las olas se aprecien de manera más


realista y que la luz del sol se vea reflejada en la superficie de la
malla, en este caso la que simula las olas del mar. Cuando las luces se
reflejan en una porción de la malla, cada cara de los triángulos
responde a esta incidencia lumínica afectando su color. En teorías de
la Computación Gráfica, esto obedece al valor de la normal de cada
vértice del plano.

284
Capítulo 6
Consolas y Controles

6.1 Introducción

En muchos casos las bibliotecas gráficas no permiten introducir texto


desde el teclado a pesar de que sí es posible visualizar un bitmap de
texto en 3D e incluso caracteres de determinadas fuentes, así como
texto en malla 3D. Supóngase que un dispositivo virtual o simulado
necesita que en las pantallas de LCD simuladas, deba mostrar el texto
que se introduce en dicho dispositivo. Un proceso largo, para
relacionar los caracteres o símbolos, pero muy fácil de implementar.

6.2 Caracteres y fuentes


El siguiente listado permite hacer la captura de un texto cualquiera de
30 caracteres desde el teclado (ASCII básico). Los caracteres y la
fuente definida, en este caso el tipo de fuente Consolas, se organizan
en una matriz de caracteres en un archivo bitmap, raw, bmp, el cual
puede ser cargado a la memoria por el programa y éste se encargará de
imprimir en pantalla el caracter correspondiente pulsado en el teclado.

Figura 6.1 Bitmap raw de caracteres y fuente Consolas.

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 ( );
}

La función printx, extrae el caracter del bitmap, proporcionándole un


lugar en la pantalla, de acuerdo con las coordenadas de textura que la
función recibe. Los valores pueden ser modificados, pero siempre en
una proporción tal que no aparezcan caracteres montados unos sobre
otros. Es indispensable que todos los caracteres ocupen el mismo
espacio rectangular en el bitmap, para facilitar la lectura.

//-------------------------------------------------------------
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);

if (code==35) printx (i*0.0202+x, y, 0.11, 0.16, 0.9, 1.0);


if (code==36) printx (i*0.0202+x, y, 0.16, 0.21, 0.9, 1.0);
if (code==37) printx (i*0.0202+x, y, 0.21, 0.26, 0.9, 1.0);
if (code==38) printx (i*0.0202+x, y, 0.26, 0.32, 0.9, 1.0);
if (code==40) printx (i*0.0202+x, y, 0.37, 0.42, 0.9, 1.0);
if (code==41) printx (i*0.0202+x, y, 0.42, 0.47, 0.9, 1.0);
if (code==42) printx (i*0.0202+x, y, 0.47, 0.53, 0.9, 1.0);
if (code==43) printx (i*0.0202+x, y, 0.53, 0.58, 0.9, 1.0);
if (code==44) printx (i*0.0202+x, y, 0.58, 0.63, 0.9, 1.0);
if (code==45) printx (i*0.0202+x, y, 0.63, 0.68, 0.9, 1.0);
if (code==46) printx (i*0.0202+x, y, 0.68, 0.74, 0.9, 1.0);
if (code==47) printx (i*0.0202+x, y, 0.74, 0.79, 0.9, 1.0);

if (code==48) printx (i*0.0202+x, y, 0.05, 0.11, 0.8, 0.9);


if (code==49) printx (i*0.0202+x, y, 0.11, 0.16, 0.8, 0.9);
if (code==50) printx (i*0.0202+x, y, 0.16, 0.21, 0.8, 0.9);
if (code==51) printx (i*0.0202+x, y, 0.21, 0.26, 0.8, 0.9);
if (code==52) printx (i*0.0202+x, y, 0.26, 0.32, 0.8, 0.9);
if (code==53) printx (i*0.0202+x, y, 0.32, 0.37, 0.8, 0.9);
if (code==54) printx (i*0.0202+x, y, 0.37, 0.42, 0.8, 0.9);
if (code==55) printx (i*0.0202+x, y, 0.42, 0.47, 0.8, 0.9);
if (code==56) printx (i*0.0202+x, y, 0.47, 0.53, 0.8, 0.9);
if (code==57) printx (i*0.0202+x, y, 0.53, 0.58, 0.8, 0.9);

if (code==58) printx (i*0.0202+x, y, 0.79, 0.84, 0.9, 1.0);


if (code==59) printx (i*0.0202+x, y, 0.84, 0.89, 0.9, 1.0);
if (code==60) printx (i*0.0202+x, y, 0.89, 0.95, 0.9, 1.0);
if (code==62) printx (i*0.0202+x, y, 0.95, 1.00, 0.9, 1.0);

if (code==61) printx (i*0.0202+x, y, 0.00, 0.05, 0.8, 0.9);


if (code==63) printx (i*0.0202+x, y, 0.58, 0.63, 0.8, 0.9);
if (code==64) printx (i*0.0202+x, y, 0.63, 0.68, 0.8, 0.9);

if (code==65) printx (i*0.0202+x, y, 0.68, 0.74, 0.8, 0.9);


if (code==73) printx (i*0.0202+x, y, 0.11, 0.16, 0.7, 0.8);

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);

if (code==66) printx (i*0.0202+x, y, 0.74, 0.79, 0.8, 0.9);


if (code==67) printx (i*0.0202+x, y, 0.79, 0.84, 0.8, 0.9);
if (code==68) printx (i*0.0202+x, y, 0.84, 0.89, 0.8, 0.9);
if (code==69) printx (i*0.0202+x, y, 0.89, 0.95, 0.8, 0.9);
if (code==70) printx (i*0.0202+x, y, 0.95, 1.00, 0.8, 0.9);

if (code==71) printx (i*0.0202+x, y, 0.00, 0.05, 0.7, 0.8);


if (code==72) printx (i*0.0202+x, y, 0.05, 0.11, 0.7, 0.8);

if (code==75) printx (i*0.0202+x, y, 0.21, 0.26, 0.7, 0.8);


if (code==76) printx (i*0.0202+x, y, 0.26, 0.32, 0.7, 0.8);
if (code==77) printx (i*0.0202+x, y, 0.32, 0.37, 0.7, 0.8);
if (code==78) printx (i*0.0202+x, y, 0.37, 0.42, 0.7, 0.8);

if (code==80) printx (i*0.0202+x, y, 0.47, 0.53, 0.7, 0.8);


if (code==81) printx (i*0.0202+x, y, 0.53, 0.58, 0.7, 0.8);

if (code==83) printx (i*0.0202+x, y, 0.63, 0.68, 0.7, 0.8);


if (code==84) printx (i*0.0202+x, y, 0.68, 0.74, 0.7, 0.8);
if (code==85) printx (i*0.0202+x, y, 0.74, 0.79, 0.7, 0.8);
if (code==86) printx (i*0.0202+x, y, 0.79, 0.84, 0.7, 0.8);
if (code==87) printx (i*0.0202+x, y, 0.84, 0.89, 0.7, 0.8);
if (code==88) printx (i*0.0202+x, y, 0.89, 0.95, 0.7, 0.8);
if (code==89) printx (i*0.0202+x, y, 0.95, 1.00, 0.7, 0.8);

if (code==90) printx (i*0.0202+x, y, 0.00, 0.05, 0.6, 0.7);

if (code==165) printx (i*0.0202+x, y, 0.58, 0.63, 0.4, 0.5);

if (code==97) printx (i*0.0202+x, y, 0.37, 0.42, 0.6, 0.7);


if (code==98) printx (i*0.0202+x, y, 0.42, 0.47, 0.6, 0.7);
if (code==99) printx (i*0.0202+x, y, 0.47, 0.53, 0.6, 0.7);
if (code==100) printx (i*0.0202+x, y, 0.53, 0.58, 0.6, 0.7);
if (code==101) printx (i*0.0202+x, y, 0.58, 0.63, 0.6, 0.7);
if (code==102) printx (i*0.0202+x, y, 0.63, 0.68, 0.6, 0.7);
if (code==103) printx (i*0.0202+x, y, 0.68, 0.74, 0.6, 0.7);
if (code==104) printx (i*0.0202+x, y, 0.74, 0.79, 0.6, 0.7);

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);

if (code==109) printx (i*0.0202+x, y, 0.00, 0.05, 0.5, 0.6);


if (code==110) printx (i*0.0202+x, y, 0.05, 0.11, 0.5, 0.6);
if (code==111) printx (i*0.0202+x, y, 0.16, 0.21, 0.5, 0.6);
if (code==112) printx (i*0.0202+x, y, 0.21, 0.26, 0.5, 0.6);
if (code==113) printx (i*0.0202+x, y, 0.26, 0.32, 0.5, 0.6);
if (code==114) printx (i*0.0202+x, y, 0.32, 0.37, 0.5, 0.6);
if (code==115) printx (i*0.0202+x, y, 0.37, 0.42, 0.5, 0.6);
if (code==116) printx (i*0.0202+x, y, 0.42, 0.47, 0.5, 0.6);
if (code==117) printx (i*0.0202+x, y, 0.47, 0.53, 0.5, 0.6);
if (code==118) printx (i*0.0202+x, y, 0.53, 0.58, 0.5, 0.6);
if (code==119) printx (i*0.0202+x, y, 0.58, 0.63, 0.5, 0.6);
if (code==120) printx (i*0.0202+x, y, 0.63, 0.68, 0.5, 0.6);
if (code==121) printx (i*0.0202+x, y, 0.68, 0.74, 0.5, 0.6);
if (code==122) printx (i*0.0202+x, y, 0.74, 0.79, 0.5, 0.6);

if (code==164) printx (i*0.0202+x, y, 0.11, 0.16, 0.5, 0.6);


}
}

//-------------------------------------------------------------

La función print_string va ubicando cada caracter en pantalla y los va


almacenando en lo que se puede denominar el buffer de salida hasta
completar los 30 caracteres. En la función init del programa, se puede
cargar la imagen que permite seleccionar cada caracter para su
visualización.

glBindTexture (GL_TEXTURE_2D, 7);


load_texture ( "consola.raw", 256, 256, 3, GL_RGB, GL_NICEST);
// códigos y fuente

A continuación, la función que permite hacer la captura directamente


desde el teclado. Es la misma función keyboard() de OpenGL, con
varias órdenes case, los cuales diferencian un caracter de los demás.

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;

case '+': code=43; strcat_s(linea,"+"); tecla=1;break;


case ',': code=44; strcat_s(linea,","); tecla=1;break;
case '-': code=45; strcat_s(linea,"-"); tecla=1;break;

case '.': code=46; strcat_s(linea,"."); tecla=1;break;


case '/': code=47; strcat_s(linea,"/"); tecla=1;break;
case ':': code=58; strcat_s(linea,":"); tecla=1;break;
case ';': code=59; strcat_s(linea,";"); tecla=1;break;
case '<': code=60; strcat_s(linea,"<"); tecla=1;break;
case '=': code=61; strcat_s(linea,"="); tecla=1;break;
case '>': code=62; strcat_s(linea,">"); tecla=1;break;
case '?': code=63; strcat_s(linea,"?"); tecla=1;break;
case '@': code=64; strcat_s(linea,"@"); tecla=1;break;

case '[': code=91; strcat_s(linea,"["); tecla=1;break;


case ']': code=93; strcat_s(linea,"]"); tecla=1;break;
case '^': code=94; strcat_s(linea,"^"); tecla=1;break;
case '_': code=95; strcat_s(linea,"_"); tecla=1;break;
case '`': code=96; strcat_s(linea,"`"); tecla=1;break;
case '{': code=123; strcat_s(linea,"{"); tecla=1;break;
case '|': code=124; strcat_s(linea,"|"); tecla=1;break;
case '}': code=125; 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;

case 'A': code=65; strcat_s(linea,"A"); tecla=1;break;


case 'B': code=66; strcat_s(linea,"B"); tecla=1;break;
case 'C': code=67; strcat_s(linea,"C"); tecla=1;break;
case 'D': code=68; strcat_s(linea,"D"); tecla=1;break;
case 'E': code=69; strcat_s(linea,"E"); tecla=1;break;
case 'F': code=70; strcat_s(linea,"F"); tecla=1;break;
case 'G': code=71; strcat_s(linea,"G"); tecla=1;break;
case 'H': code=72; strcat_s(linea,"H"); tecla=1;break;
case 'I': code=73; strcat_s(linea,"I"); tecla=1;break;
case 'J': code=74; strcat_s(linea,"J"); tecla=1;break;
case 'K': code=75; strcat_s(linea,"K"); tecla=1;break;
case 'L': code=76; strcat_s(linea,"L"); tecla=1;break;
case 'M': code=77; strcat_s(linea,"M"); tecla=1;break;
case 'N': code=78; strcat_s(linea,"N"); tecla=1;break;
case 'O': code=79; strcat_s(linea,"O"); tecla=1;break;
case 'P': code=80; strcat_s(linea,"P"); tecla=1;break;
case 'Q': code=81; strcat_s(linea,"Q"); tecla=1;break;
case 'R': code=82; strcat_s(linea,"R"); tecla=1;break;
case 'S': code=83; strcat_s(linea,"S"); tecla=1;break;
case 'T': code=84; strcat_s(linea,"T"); tecla=1;break;
case 'U': code=85; strcat_s(linea,"U"); tecla=1;break;
case 'V': code=86; strcat_s(linea,"V"); tecla=1;break;
case 'W': code=87; strcat_s(linea,"W"); tecla=1;break;
case 'X': code=88; strcat_s(linea,"X"); tecla=1;break;
case 'Y': code=89; strcat_s(linea,"Y"); tecla=1;break;
case 'Z': code=90; strcat_s(linea,"Z"); tecla=1;break;
case 'Ñ': code=165; strcat_s(linea,"Ñ"); 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;

case 13: code=13; break;


case 8: code =8; tecla=2; 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;
}
}

Cuando tecla = 1, el valor de code es llevado a la función print_string


para su evaluación y poder así imprimirlo en pantalla. El contador l
permite saber cuántos caracteres se han utilizado (longitud de buffer).
Las funciones del teclado como backspace y Enter son manejadas
como un caracter de control, los cuales no imprimen caracter alguno
en pantalla, pero sí cumplen su efecto normal. Con backspace (8), se
borra un caracter, se regresa a la posición anterior y el contador l se
decrementa en 1. Si l alcanza el valor de 29, o se pulsa Enter, se corta
la captura y pasa a una nueva captura dejando almacenada la frase
correspondiente en el arreglo texto[30].

El bitmap o textura correspondiente a los caracteres, puede ser


modificado para que se disponga de otros caracteres y sus respectivas
fuentes, por lo que se debe entonces modificar el tamaño del espacio
de cada caracter si se desean letras más grandes.

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
.

Figura 6.2 Displays de 7 segmentos definidos.

6.3 Pulsadores, interruptores y LEDs


Algo menos complejo aún, es cuando se quiere pulsar, encender o
apagar un dispositivo a través de un interruptor virtual. A menos que
sea un selector o control de varias posiciones como el de regulador de
velocidades o voltajes de una fuente, los pulsadores y LEDs tienen dos
estados, 1 o 0.

Figura 6.3 Diversos tipos de pulsadores y LEDs virtuales.

Por lo general, se suele utilizar una foto del interruptor de frente


cuando está arriba en posición ON y cuando está abajo o en posición
OFF.

Estos difieren singularmente en que los modelados en 3D pueden


rotarse a voluntad y verlos desde otra perspectiva diferente a la
frontal, pero su programación al final puede ser la misma. Si es un
potenciómetro, puede girar la imagen a voluntad.

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 mouse(int button, int state, int x, int y)


{
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
moving = 1;
startx = x;
starty = y;
}
if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) {
moving = 0;
}
}

//-------------------------------------------------------------------------------------
void oneclick()
{
// TECLA01

if (moving==1 && startx < 20.0 && startx > 10.0


&& starty > 30.0 && starty < 35.0 )
keypresed=1;

if (moving==0 && keypresed==1)


{tecla01=tecla01+1;
if(tecla01==2) tecla01=0;
keypresed=0;}
}

El tamaño de la imagen donde está el interruptor está delimitado por


startx (entre 10 y 20) y starty (entre 30 y 35). Si al pasar el puntero
por encima de esas coordenadas y se presiona el botón izquierdo del
mouse, entonces el interruptor cambiará de estado. La variable
tecla01=1, indica que está por ejemplo en ON y al sumar otro click,
tecla01=2, pasa a estado de OFF, e inicia nuevamente el conteo.
Realmente no es un proceso complejo el de hacer que los interruptores
y pulsadores cambien de estado por muy grande que sea el dispositivo

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.

Figura 6.4 Modelo que activa un engranaje al pulsar el botón.

// Push.cpp : Defines the entry point for the console application.


//

#include "stdafx.h"

#include<windows.h>
#include <GL/glut.h>
#include<iostream>
#include <stdlib.h>

using namespace std;

int startx, starty, moving, zoom;


int savex, savey, pulsador;
float angle1, angle2;

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();

glTranslatef (-2.8, 1.4, -10.0);


glPushMatrix();
glColor3f(1.0f, 0.2f, 0.2f);
Cylinder = gluNewQuadric(); //interruptor, presionado con el puntero
if (pulsador==0) {gluCylinder(Cylinder, 0.4, 0.4, 0.5, 16, 1);
glColor3f(0.8f, 0.0f, 0.0f);} //si está presionado cambia de color
else glColor3f(1.0f, 0.3f, 0.2f);
if (pulsador==0) glTranslatef (0.0, 0.0, 0.5);
else glTranslatef (0.1, -0.1, 0.5);
Disk = gluNewQuadric();
gluDisk(Disk, 0.0, 0.4, 16, 1);
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;
}

if (pulsador==1 && moving==0)


{
savex = mx;
savey = my;
}

if (moving==1 && startx >120 && startx <180


&& starty >120 && starty <180)
{
pulsador = pulsador + 1;
if (pulsador==2) pulsador = 0;

printf ("%d ", pulsador);


printf ("%d ", startx); printf ("%d \n", starty);
}
}

//--------------------------------------------------------------------------------------------------------------
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);

Al hacer click en un punto, se leen las coordenadas iniciales y luego al


hacer click en otro punto, se leen también las coordenadas finales y se
puede trazar una figura con sólo dos variables x,y, pero con un número
ilimitado de puntos.

click = click +1;


*
*
If (click==2) {
glBegin(GL_LINES);
glVertex2f(x1, y1);
glVertex2f(x2, y2);
glEnd();
click=0;
}

Para analizar un poco más sobre la traslación y rotación de un objeto


a voluntad, el siguiente listado muestra la forma como el puntero del
mouse se relaciona con el medio virtual, para modificar el estado de
dicho objeto.

Las funciones del mouse de manera independiente sólo sirven para


señalar o apuntar a un píxel en pantalla, el cual está definido por
coordenadas x,y.

301
Simulación Virtual Interactiva
.

Figura 6.5 Modelo que permite rotar y trasladar un objeto a voluntad con el mouse.

Ahora se utilizará para que pueda trasladar y rotar el cilindro que


aparece en la figura.

// TYR.cpp : Defines the entry point for the console application.


//
#include "stdafx.h"
#include<windows.h>
#include <GL/glut.h>
#include<iostream>
#include <stdlib.h>
using namespace std;

int startx, starty, moving, zoom;


int rotarsp, trasladasp;
int grid, rota, trasl=1;
float x,y;
float anglex, angley;
float savex, savey;

GLUquadricObj *Cylinder; //inicia el cilindro

//--------------------------------------------------------------------------------------------------------------
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();

glRotatef (90.0, 0.0, 1.0, 0.0);


glBegin(GL_LINES);
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);

glTranslatef (0.0, 0.0, -70.0); //aleja la vista en el viewport

if (trasl==1) //en caso de ser trasladado


{
glRotatef (-savey, 1.0, 0.0, 0.0);
glRotatef (-savex, 0.0, 0.0, 1.0);
glRotatef ( savex, 0.0, 1.0, 0.0);
dibujagrid(); //activa el grid
glTranslatef (x, 0.0, y); //ubica el cilindro en el plano
dibujacilindro(); //dibuja el cilindro
}
if (rota==1) //en caso de ser rotado
{
glRotatef (-angley, 1.0, 0.0, 0.0);
glRotatef (-anglex, 0.0, 0.0, 1.0);
glRotatef ( anglex, 0.0, 1.0, 0.0);
dibujagrid(); //activa el grid

glPushMatrix();
dibujacilindro(); //dibuja el cilindro

savex=anglex; //guardar coordenadas x,y


savey=angley;
}

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;
}
}

void motion(int mx, int my)


{
if (moving) {
anglex = anglex + (mx - startx);
angley = angley - (my - starty);
//recibe las coordenadas de traslado
//según el mouse
if (trasl==1) {y = y + (mx-startx); x = x - (my-starty);}

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;
}

Al presionar “R” en el teclado, es posible cambiar al modo de


rotación. Luego, presionando “T”, se pasa al modo de traslación. La

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.

Para ampliar el concepto y de manera práctica, se harán unos cambios


significativos en el modelo del auto del numeral 2.2.15, para incluir el
steering wheel o mando. Aunque estos dispositivos traen sus propios
instaladores, MS WindowsTM los acepta sin ningún tipo de previa
configuración.

Figura 6.6 Modelo del auto con steering wheel.

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 ;
}

Ahora no es necesario el retorno del timón puesto que el steering


wheel proporciona el retorno de manera mecánica.

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);
}

if (k> 1.0) k= 1.0; //controlando la aceleración


if (k<-1.0) k=-1.0;

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;

if (k!=0){ //cámara detrás del vehículo


if (idl==1) dcar=dcar + 0.3;
if (idr==1) dcar=dcar - 0.3;
}

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

glutTimerFunc( 20, update, 0);


glutPostRedisplay ();
}

A continuación se incluye la función joystick(), la cual retorna el valor


del botón presionado, y las tres coordenadas de rotación o traslación
según sea necesario. En el bloque main del programa se incluye
también la correspondiente función de llamada glutJoystickFunc().

//--------------------------------------------------------------------------------------------
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);

glutTimerFunc(20, update, 0);


glutKeyboardFunc ( keyboard );
glutDisplayFunc ( display );
glutIdleFunc ( idle_func );
glutMainLoop ( );
return 0;
}

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.

6.6 Electrónica digital


Un gran aporte a la Simulación Virtual Interactiva lo hace la
electrónica digital en toda su extensión. Desde LEDs, resistencias,
encoders, motores paso-a-paso, hasta PICs, permiten desarrollar toda
clase de dispositivos que faciliten la interactividad con el medio
virtual.

El modelo de avión puede ahora contar con un panel de control, donde


es posible alojar un dispositivo como el horizonte artificial, altímetro,
indicador de viraje, etc.

Si no se desea construir instrumentos de manera virtual (software), se


pueden fabricar de manera real y así aportar más al realismo a lo que
se quiere simular.

La tecnología USB es actualmente una especificación muy popular, la


cual conecta varios dispositivos a la computadora y también entre
microcontroladores. Algunos PICs proporcionan módulos USB. La
familia de PICs 18F2x50, 18F4x50 por ejemplo, tienen capacidades
de interfaz USB incorporadas.

Entre varios dispositivos controladores y de programación, los PICs se


convierten en el corazón de los dispositivos a simular por su gran
facilidad de ser programados y la capacidad de transmitir y recibir
datos.

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

Figura 6.7 PIC18F4550 con módulo USB de Microchip Technology Inc

Pero lo más importante, es su capacidad para leer casi cualquier tipo


de sensor (potenciómetro, de calor, temperatura, etc.) que permita
utilizarlos como un medio de percibir la realidad y llevarla al mundo
virtual. El pensamiento, reacciones y lógica humana pueden ser
conjugados perfectamente con la computadora y con el medio virtual a
través de estos dispositivos. El concepto HID (Human Interface
Device) sugerido por Tom Schmidt de DEC y acuñado por Mike Van
Flandern de Microsoft, se refiere a esa interfaz de usuario en
computadoras para la interactividad.

Entre los dispositivos HID están las pantallas alfanuméricas, los


lectores de código de barras, controles de volumen en los
altavoces/auriculares, pantallas auxiliares y sensores, entre otros. HID
tiene un protocolo estándar y entre las normas compatibles están USB,
Blutooth e I2C.

Anteriormente las conexiones de puerto serial o paralelo eran los


predilectos para incorporar toda clase de dispositivos a la
computadora. El USB 2.0 supera con 480 Mbps a las transmisiones
del puerto serie de 115 Kbps.

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.

Estos dispositivos se programan previamente antes de ser


incorporados al circuito principal, a través de entradas directas por
programa de computador vía RS-232 (serial), paralelo o USB. Operan
como una computadora procesando datos y entregando información a
través de las diferentes vías dispuestas para ello. Son programados
bajo la acción de un oscilador (cristal) que sincroniza los envíos de
paqueticos de bits a cada una de los puertos o las interfaces. Cada
dispositivo alrededor del PIC recibe o entrega los datos necesitados.

Aunque los microcontroladores que soportan los dispositivos de


control de marca conocida y dispuestos para la venta son parecidos en
su estructura a los microcontroladores que se ofrecen en el mercado,
éstos últimos son fácilmente programados y dispuestos a operar en el
medio que se quiera. Cada vez estos PICs son más especializados,
permitiendo la creación de equipos que como en este caso permiten
modificar e interactuar con el software del simulador virtual que se
esté construyendo. Una palanca, un botón, un tablero y muchos otros
elementos pueden ser fabricados con base en estos cerebros
electrónicos.

Inicialmente los PICs fueron concebidos pensando en una forma para


obtener la lectura de sensores industriales y enviar información a los
LCDs (Liquid Cristal Display) que indican numéricamente el estado
de dichos sensores. Pero la necesidad creciente en otros campos de la
electrónica los hacen los dispositivos predilectos para el aprendizaje y
la elaboración de circuitos y dispositivos de alta calidad.

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.

Estos son algunos elementos por mencionar, pues la gama de


dispositivos es mayor y muchos de ellos más especializados. Por
ejemplo, un cuentarrevoluciones análogo es un motor que permite ser
modificado en rotación para que llegue al tope que se desea e indique
por una aguja su ubicación. La información es convertida por el PIC
de digital a análoga, lo que no sucede con los motores de paso a paso,
los cuales reciben la información digital compuesta por un paquete de
bits.

Entre las características principales del 18F4550, están:

Frecuencia de operación 48 MHz


Memoria de programa 32 Kbytes
Memoria RAM 2 Kbytes
Memoria EEPROM 256 bytes
Líneas de E/S 35
Fuentes de interrupción 20
Temporizadores 4
Conversor A/D 10 bits 13 canales
Comparadores análogos 2
Comunicación serial EAUSART, SPI, I2C
Comunicación USB 1
Módulos PWM 2

Un programa en C en los entornos de desarrollo para estos PICs,


tienen el siguiente aspecto:

313
Simulación Virtual Interactiva
.

#include <18f4550.h> //archivo de cabecera


#fuses
XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,
NOVREGEN
#use delay(clock=48000000) //configuración del oscilador
void main() {
set_tris_a(0x0); //puertos de salida
set_tris_b(0x0);
set_tris_c(0x0);
set_tris_d(0x0);
set_tris_e(0x0);
//----------------------------------
disable_interrupts(global);
disable_interrupts(int_timer1);
disable_interrupts(int_rda);
disable_interrupts(int_ext);
disable_interrupts(int_ext1);
disable_interrupts(int_ext2);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_psp(PSP_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE);
//---------------------------
output_a (0); //envía bit 0 a los puertos
output_c (0);
output_d (0);
output_e (0);
while(1){
output_b (0); //envía bit 0 al portb
delay_ms(1000); //retardo 1 Seg
output_b (0xff); //envía bit 1 al portb
delay_ms(1000); //retardo 1 Seg
}
}

Este programa ejemplo permite encender y apagar los LEDs


conectados al puerto PORTB.

314
6.7 Tarjetas gráficas

Las tarjetas gráficas o de video, permite convertir datos digitales a


imágenes de video, tal como los juegos. También se les denomina
aceleradoras gráficas y entre las más comunes están las marcas
NVIDIA, G-FORCE, ATI. Una tarjeta gráfica posee un procesador,
memoria del tipo RAM (GDDR) y un chip BIOS de la tarjeta para
almacenar la configuración. Al procesador se le denomina GPU
(Graphics Processing Unit), coprocesador dedicado al procesamiento
de gráficos (cálculos matemáticos y geométricos) para aligerar la
carga de trabajo de la CPU en la motherboard de la computadora,
tanto en simulaciones virtuales e interactivas como en videojuegos.

Las capacidades de operación (frecuencia del núcleo) superan los


750MHz. Lo esencial para los propósitos de la simulación es que
soporten OpenGL. Las siguientes son algunas de las características de
los efectos empleados o generados mediante las tarjetas gráficas:

Antialiasing: corrección efecto diente de sierra con respecto a los


píxeles del monitor. 2, 4, u 8 muestras por píxel.

Shader: procesado de píxeles y vértices para efectos de iluminación,


sombras, entre otros. Arquitectura shader superescalable unificada.

HDR: técnica novedosa para representar el amplio rango de niveles de


intensidad de las escenas reales (desde luz directa hasta sombras
oscuras).

Mapeado de texturas: técnica que añade detalles en las superficies de


los modelos (imágenes), sin aumentar la complejidad de los mismos.
Anisotropía23 de alta calidad y filtrado de textura HDR.

Motion Blur: efecto de difuminado debido a la velocidad de un objeto


en movimiento.

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.

Efecto Fresnel: reflejos sobre un material dependiendo del ángulo


entre la superficie normal y la dirección de observación.

Figura 6.8 Tarjeta gráfica

6.8 Sockets, protocolos de comunicación


Los sockets son una forma o método de comunicación entre procesos
que se encuentran en diferentes equipos en una red. Establecen una
vía de comunicación por medio de la cual se puede transmitir o recibir
información entre procesos de manera rápida y funcionan en el nivel
de Transporte basados en el protocolo de red IP.

El término socket define un concepto abstracto por el cual dos


programas locales (misma computadora) o remotos (red) pueden
intercambiar cualquier flujo de datos. Un socket está estructurado por
una dirección IP, un protocolo de transporte y un número de puerto.

316
Figura 6.9 Modelo Cliente - Servidor

La dirección del protocolo de red y la dirección IP, identifican una


computadora. El número de puerto identifica a un programa dentro de
una computadora.

Los sockets permiten implementar una arquitectura cliente-servidor.


La comunicación ha de ser iniciada por uno de los programas que se
denomina programa cliente. El segundo programa espera a que el otro
inicie la comunicación y es por este motivo que se le denomina
programa servidor.

Cada computadora de una red tiene asignado un número único, que


sirve para identificarle y distinguirle de los demás, de forma que
cuando un computador quiere comunicarse con otro, manda la
información a dicho número. La dirección IP es un número del
formato (###.###.###.###) , ejemplo 165.100.12.1.

El procedimiento que cumple el socket de un programa


servidor empieza con su apertura, establecida con la
función socket(), la cual devuelve y prepara al descriptor de archivos
que el sistema operativo asociará a una conexión en red. Una vez
abierto el socket, éste se asocia al programa, lo que se consigue con la
función bind(). Con la función listen(), el sistema atiende la conexión
y las colas de llegada. La función accept(), indica al sistema para que
entregue al siguiente cliente si lo hay. La lectura y escritura de datos
se lleva a cabo por medio de las funciones read() y write(). La
función close(), cierra la comunicación y el socket.

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:

Sockets con conexión (TCP): Stream Socket


Sockets sin conexión (UDP): Datagram Socket

Protocolo de Control de Transmisión (TCP Transport Control


Protocol ) - Es un protocolo orientado a la conexión, lo que requiere
que ambas computadoras estén conectadas y listas para intercambiar
datos. El host en la red envía un paquete a otro computador
garantizado por TCP, ya que por cada paquete enviado y marcado con
un número único se debe esperar por una respuesta de satisfacción de
recepción. El sistema de destino recibe los datos y agrega una
comprobación de los mismos y avisa en caso de un error por lo que es
posible reenviar el paquete.

Protocolo de Datagramas de Usuario (UDP User Datagram


Protocol) - Es un protocolo orientado a la no conexión que utiliza
paquetes tipo datagramas de 64KB. No se necesita de sincronización
alguna para enviar datos, solo es necesario crear el paquete UDP y
enviarlo al destino.

El sistema tiene en cuenta la dirección origen, dirección destino y


datos, colocando el mensaje en red sin preocuparse por la fiabilidad
del paquete, por lo que no espera una respuesta de recibido del otro
computador. Es más utilizado para las simulaciones y juegos de video
en red, pues los datos no esperan respuesta y son transmitidos a alta
velocidad. Se pueden desarrollar modelos alternativos para saber si el
paquete llegó a su destino. Los listados siguientes permiten transmitir
y recibir un socket entre dos computadoras utilizando la IP del server:

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;

char ip[] = "###.###.###.###"; // IP del equipo a enviar

char SendBuf[] = "Hola! ¿Cómo estás? !!!!"; //Mensaje a enviar

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")

const int BufLen = 1024;


int i;
//----------------------------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
SOCKET RecvSocket;
sockaddr_in RecvAddr;
int Puerto = 2345;
char RecvBuf[BufLen];
sockaddr_in SenderAddr;
int SenderAddrSize = sizeof(SenderAddr);
WSAStartup(MAKEWORD(2,2), &wsaData);
RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Puerto);
RecvAddr.sin_addr.s_addr = INADDR_ANY;
bind(RecvSocket, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr));
recvfrom(RecvSocket,RecvBuf, BufLen,0,(SOCKADDR
*)&SenderAddr,&SenderAddrSize);

printf("%s\n",RecvBuf); // Muestra el mensaje en pantalla


scanf_s ("%d", i);
closesocket(RecvSocket);
WSACleanup();
return 0;
}

320
6.9 Sonido

A menos que se prefiera utilizar la biblioteca OpenAL (Open Audio


Library), la cual es la API de audio multiplataforma desarrollada
por la firma Creative Labs para la reproducción de audio posicional y
multicanal en tres dimensiones, es posible cargar fragmentos de audio
(.wav) para dar respaldo sonoro a las aplicaciones que se desarrollen
con OpenGL y Win32. Esto se logra simplemente utilizando la
función PlaySound():

#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])


{

PlaySound(TEXT("Bmgearup.wav"),NULL, SND_LOOP | SND_ASYNC);


scanf_s ("%c",&c);
return 0;
}

Varias opciones de configuración de la función PlaySound pueden hacer


parte de los controles del programa. En el ejemplo siguiente se busca
accionar un mecanismo por medio del teclado:

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);

Los archivos de extension (.wav) son muy fáciles de producir, pero


muy pesados en cuanto a la cantidad de información que contienen,
por lo que al utilizarlos, se debe contabilizar el tiempo en que debe
cumplir su propósito antes de ejecutar otra orden. La mezcla de
sonidos puede ser un tanto contraproducente si los sonidos trabajan de
manera independiente.

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

Una ecuación diferencial ordinaria (EDO) es una relación entre una


función de una variable y sus derivadas. La ecuación diferencial
contiene las derivadas de una o más variables dependientes con
respecto a una o más variables independientes

Una ecuación diferencial ordinaria lineal es aquella en la que la


función o sus derivadas están multiplicadas solamente por funciones
de la variable independiente, es decir no deben aparecer productos de
la variable independiente consigo misma ni de ninguna de sus
derivadas. Cuando en la ecuación diferencial se encuentran potencias
de la función o sus derivadas y multiplicadas por las derivadas la
ecuación es no lineal.

Algunas ecuaciones diferenciales no tienen una solución analítica


sencilla, por lo que a veces es necesario realizar aproximaciones. Por
otro lado, necesitan ser llevadas a la computadora para su ejecución.
Al emplear estas técnicas, es posible que se presenten errores de

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

∫dx = g∫t dt + vo∫dt

x = xo + vot + ½gt2

Ahora, teniendo en cuenta las ecuaciones aplicadas en el numeral


4.2.1, sobre la mecánica del vuelo, estas ecuaciones operan bajo la
condición de que las fuerzas deben ser constantes para que sean
efectivas. En caso de que la fuerza cambie, cambiaría por ende la
aceleración y las ecuaciones ya no son efectivas.

Para corregir esto se requiere de métodos numéricos. Entre los


métodos de solución numérica de ecuaciones diferenciales están el
método de Euler, el método de Taylor y el método de Runge-Kutta.

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

El método de Euler es de primer orden y permite resolver


numéricamente estas ecuaciones de manera fácil utilizando la notación
de derivada:

dy/dx = lim y(y + ∆x) y(x) /∆x


∆t → 0

Lo cual se puede escribir como:

y(x + ∆x) = y(x) + ∆x x f(y(x), x, g(x))

El método se basa de forma general en la pendiente estimada de la


función para extrapolar desde un valor anterior a un nuevo valor:

nuevo_valor = valor_anterior + pendiente x ∆paso

Partiendo entonces de que:

a = F/m

se escriben las siguientes ecuaciones, para obtener las nuevas


velocidades y posiciones, tal como se han utilizado en los diferentes
modelos y programas:

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:

yk+1 = yk + y’(tk)h + y’’(tk) h2/2! + … + y(N)(tk)hN/N!;

Para k = 0, 1 ,…. n-1

7.4 Método de Runge-Kutta


Mejorando sustancialmente al método de Euler, el método iterativo de
Runge-Kutta25 logra ser exacto como el método de Taylor, pero sin
tener que realizar operaciones y resolver o calcular derivadas
superiores. Lo primero es especificar el problema del valor inicial:

y' = f(t,y), y(t0) = y0

y n+1 = yn + h/6 (k1 + 2k2 + 2k3 + k4)

donde los valores de la ecuación son:

k1 = f(tn, yn)

k2 = f(tn + h/2, yn + h/2k1)

k3 = f(tn+h/2, yn+h/2k2)

k4 = f(tn + h, yn + hk3)

k1..k4 representa la pendiente en cada intervalo.


24
Brook Taylor (1685 - 1731), matemático británico.
25
Carl David Tolmé Runge (1856 –1927) matemático, físico y espectroscopista
alemán. - Martin Wilhelm Kutta (1867 - 1944) físico y matemático alemán.

326
Promediando la pendiente entonces:

(k1 + 2k2 + 2k3 + k4) / 6

Las soluciones obtenidas mediante el método de Euler son menos


exactas que las obtenidas utilizando el método de Runge-Kutta.
Téngase en cuenta que una ecuación diferencial de segundo orden es
equivalente a un sistema de dos ecuaciones diferenciales de primer
orden.

A continuación se muestra un listado del método de Runge-Kutta,


aplicado al último ejemplo elemental del numeral 4.2, cuya ecuación
está expresada como:

dv/dt = 9.8 – 0.253/m v2

// RK4S.cpp : Defines the entry point for the console application.


//
#include "stdafx.h"
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

#define MAX 100


char c;
double y[MAX+1];
double t[MAX+1];

double f(double t, double y)


{
return (9.8*t - 0.127*y*y*t);
}

void RK4(double ti, double tf, double yi, int n)


{
double k1, k2, k3, k4;
double h;
int i;

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);

//El nuevo valor de y[] y t[]


y[i+1]=y[i]+(k1 + 2.0*k2 + 2.0*k3+ k4)/6;
t[i+1]=t[i] + h;
}
}

void init(void)
{
RK4(0.0, 5.0, 0.0, MAX);
}

int _tmain(int argc, _TCHAR* argv[])


{
int i;

init ();

for (i=0; i<MAX; i++)


{
printf ("%f %f\n",t[i], y[i] );
}
scanf_s ("%c",&c);
return 0;
}

A continuación se imprimen los datos que arroja el programa. La


tendencia de la velocidad terminal se puede apreciar en la segunda
columna.

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.

Roger D. Smith, Vertical Interface Methodology for Connecting Constructive


andVirtual Level Simulations, ModelBenders, LLC.

Mark J. Kilgard (1996). The OpenGL Utility Toolkit GLUT. Programming


Interface. Silicon Graphics Inc.

Richard S. Wright, Jr. OpenGL Super Bible!


http://www.goodreads.com/book/show/1043684.OpenGL_SuperBible

Jackie Neider (1994) The Red Book. Programming Guide. Silicon Graphics Inc.

David M. Bourg, Physics for game developers, O„Reilly.

David Baraff, Differential equation basics. - An introduction to physically based


modeling - Rigid body simulation - Unconstrained Rigid Body Dynamics.
SIGGRAPH ‟97 Course Notes, 1997.

Mark D. Ardema , Newton-Euler Dynamics, Santa Clara University, Santa Clara,


California, ©2005 Springer Science+Business Media, Inc.

Roy Featherstone, Rigid Body Dynamics. Algorithms, The Austrailian National


University. Canberra, ACT Austrailia, © 2008 Springer Science+Business Media,
LLC

Robert B. McGhee, Bachmann, Zyda, Rigid Body Dynamics, Inertial Reference


Frames, and Graphics Coordinate Systems: A Resolution of Conflicting
Conventions and Terminology, Naval Postgraduate School, Monterey, California,
November 2000

Frederico R. Garza, A Collection of Nonlinear Aircraft Simulations


in MATLAB, George Washington University.

Peter H. Zipfel, (2007) Modeling and Simulation of Aerospace Vehicle Dynamics,


Second Edition, University of Florida, Gainesville, Florida.

Sibley School of Mechanical and Aerospace Engineering. Cornell University.


https://courses.cit.cornell.edu/mae5070/

335
Simulación Virtual Interactiva
.
Brian Beckham, Physics of Racing Series.
http://phors.locost7.info/

Beer, F. y Jonhston, R. (1997). Mecánica vectorial para ingenieros.


Dinámica. 6ª ed. México: McGraw-Hill.

Sears, Zemansky & Young, Física Universitaria, Addison-Wesley Iberoamericana


&a Ed. © 1982

Resnick, R., Holliday, D. Física Vol. I, 4ta Edición, Ed. CECSA, México, 12006.

Serway, R. Física Vol. I, 4ta Edición, Ed. Mc Graw-Hill, México, 2007.

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

Jairo Uparella es investigador independiente sobre temas de la


Simulación Virtual basada en la física y de Informática. Tiene un
título de B.Sc. en Ingeniería con especialización en Ciencias
Computacionales y es programador en OpenGL/C++, modelador 3D
de escenarios virtuales y animador 2D/3D con una experiencia en el
tema de más de 15 años. Tuvo la oportunidad de crear el primer
prototipo de simulador para entrenamiento de comandantes de
submarinos, así como el simulador de tiro para entrenamiento de la
Armada de Colombia en el 2002. Construyó de manera virtual los
equipos de la planta de crudo de ECOPETROL refinería Cartagena en
el 2010. Además de ser docente en Computación Gráfica,
programación C++, OpenGL, escenarios virtuales y de procesos, es
escritor de libros técnicos y revistas. Su primer libro “Historia y
Evolución de la PC” lo escribió en 1996 después de haber sido
columnista y director de las páginas de Informática del diario local
EL UNIVERSAL. Su segundo libro “Semántica, Paráfrasis y otros
problemas de la Informática” lo escribió en 1999. También ha sido
conferenciante de temas de la Informática, entre estos la Simulación
Virtual, Internet y de medios virtuales para el aprendizaje.
Actualmente desarrolla simuladores náuticos e instrumentación para
su propia investigación, tales como Radar/Arpa, ECDIS, Conning,
GPS, Ecosonda, buques a 6DOF, en ambientes marítimos y fluviales y
ha hecho un gran avance en la Simulación Virtual de las consolas de
radares tipo AN/TPS-70 con sistema ATCS (Air Traffic Control
Simulator) para la edición de aviones en un proyecto para la Fuerza
Aérea de Colombia en el 2012. Es columnista e investigador en la
revista ERBzine de Tarzana California, USA, referente a las novelas
de Edgar Rice Burroughs, Tarzán de los monos.

e-mail: juparella@yahoo.com
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

También podría gustarte