Sunteți pe pagina 1din 63

UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA

PROYECTO DE INVESTIGACION

DESARROLLO DE SOFTWARE PARA EMULAR TRAYECTORIAS Y MOVIMIENTOS DE OBJETOS

AUTOR: HERNANDEZ DURAN MARICELA LICENCIATURA EN COMPUTACION 99217893

ASESOR: DR. LEONARDO TRAVERSONI DOMINGUEZ

JUNIO DE 2005

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

ndice:
Introduccin..... 1. Descripcin del problema... 2. Conceptos bsicos.......
2.1. Cuaternios........
2.1.1. Definicin y Representacin....... 2.1.2. Operaciones Bsicas........ 2.1.3. Rotacin.

5 6 8 8 8 9 11 14 15 16

2.2. Interpolacin.......
2.2.1. LERP....... 2.2.2. SLERP..

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

3. Desarrollo del proyecto..


3.1. Matlab Matemtica?......................................... 3.2. Desarrollo de funciones bsicas de algebra de cuaternios 18 3.3. Desarrollo de algoritmos de interpolacin.

17 17

20

3.4. Trabajando con el video


3.4.1. Formato del video 3.4.2. Creacin de filtros.

23 23 24 28 28 30 31 33
33 42

3.5. Creacin de burbuja virtual..


3.5.1. Generando burbuja virtual sin interpolacin.

4. Conclusin.... 5. Bibliografa 6. Anexos...


6.1. Funciones.. 6.2. Matlab

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Introduccin
Generalmente los movimientos de objetos son estudiados por partes, es decir: se estudia la curva de su trayectoria, su velocidad su aceleracin y otros componentes importantes todos por separado, y por esta razn cuando se quiere reproducir el movimiento del objeto es necesario realizar un procedimiento para cada uno de los componentes. Al utilizar anlisis cuaterninico es posible reproducir el movimiento del objeto con un solo procedimiento cuyo argumento son cuaterniones. Los cuaterniones son capaces de representar movimiento continuo y variable, adems de que brindan gran eficiencia computacional, su composicin es simple y sus rotaciones y traslaciones son eficientes. Estos elementos son usados actualmente en varias disciplinas principalmente en la robtica: al manipular piezas mecnicas para tener control del movimiento espacial de un robot surge la necesidad de contar con herramientas matemticas para especificar la orientacin y la posicin. Muchos programadores de videojuegos han comenzado a utilizar los cuaternios extensivamente ya que estos facilitan el control de cmaras virtuales mediante movimientos diferentes, como ejemplo tenemos los ttulos TOMB RAIDER. Muchas veces se conoce de un movimiento varios momentos pero no su totalidad y de lo que se trata es obtener un movimiento que incluya (interpole) todas las observaciones mediante el uso de anlisis cuaterninico.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

1 Descripcin del problema


Teniendo varios videos simultneos de algn objeto o varios videos no simultneos y adems conociendo la posicin relativa de las cmaras en cualquier instante, se quiere construir un nuevo video viendo el objeto desde cualquier otro punto, as como en cmara lenta o con zoom. Una manera de hacer esto es usando interpolacin de las diferentes imgenes (cuadros del video) con el fin de obtener el cuadro entero, adems de interpolar el movimiento del objeto en cada cuadro para poder reproducirlo con mas detalle en un nuevo video. Con este fin fueron filmados dos videos de una burbuja de aire ascendente dentro de un cubo lleno de agua, la burbuja es reproducida por medio de una aguja hipodrmica la cual esta insertada en la parte inferior del cubo de agua, el dimetro de la burbuja es de un milmetro.

Figura 1. Video esclavo

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Las cmaras fueron colocadas en posicin ortogonal, cada cuadro de los dos videos obtenidos estn sincronizados uno con otro, es decir, el movimiento de la burbuja del primer cuadro obtenido con la cmara 1 (la cual se denominar video maestro) corresponde con el movimiento de la burbuja del primer cuadro obtenido con la cmara 2 (la cual se denominar video esclavo), cada video se compone de 51 cuadros sincronizados.

Video esclavo

Video maestro Fig. 2 Posicin de las cmaras

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

2 Conceptos bsicos
2.1 Cuaternios
2.1.1 Definicin y representacin

Cada uno de los conjuntos de los nmeros que conocemos extiende al anterior y su construccin es motivada por la necesidad de resolver ecuaciones; sin embargo existe otro conjunto de nmeros que extiende al conjunto de los nmeros complejos cuya construccin no es motivada en la resolucin de una ecuacin, este conjunto es el conjuntos de los cuaternios y se denota por H , en honor a su creador, el irlands William Rowan Hamilton (1805 - 1865). Los cuaternios se definen como el conjunto de nmeros tal que:
H = {a + bI + cJ + dK : a, b, c, d R}

Donde I, J y K son tales que:


I 2 = J 2 = K 2 = IJK = 1

La construccin de los cuaternios tiene sentido gracias a que existen I, J y K con las propiedades especificadas, adems de que se puede definir:
0 1 0 i i 0 , J = I = 1 0 i 0 , K 0 i

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Mediante las tres matrices complejas de 2x2, con i = 1 . Dada esta construccin, un cuaternio h H puede pensarse como la matriz de nmeros complejos siguiente:

1 0 0 1 0 i i 0 h = a 0 1 + b 1 0 + c i 0 + d 0 i a 0 0 b 0 ci di 0 h= 0 a + b 0 + ci 0 + 0 di a + di b + ci h= b + ci a di

Otra forma de representar un nmero cuaternio en forma matricial es el siguiente:

a b h= d c

b d c a c d c a b d b a

Por fines prcticos esta ser la forma a representar a los nmeros cuaternios en los diversos algoritmos implementados durante el desarrollo de este proyecto.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

2.1.2 Operaciones Bsicas

Se define la suma y el producto entre cuaternios mediante la aritmtica usual de matrices y de los nmeros complejos. El conjunto de los nmeros cuaternios cumple con casi todas las propiedades de campo a excepcin de:
z1 z 2 = z 2 z1z1 , z 2 R

Es decir, el producto no es conmutativo. Un conjunto que posee todas las propiedades de campo excepto por la anterior se conoce como anillo con divisin o campo asimtrico. De esta manera, dado un cuaternio q = w + xi + yj + zk , donde w, x, y, z R , se definen las siguientes operaciones: - suma y resta
q 0 q1 = (w0 + x 0 i + y 0 j + z 0 k ) (w1 + x1i + y1 j + z1 k ) q 0 q1 = (w0 w1 ) + ( x0 x1 )i + ( y 0 y1 ) j + ( z 0 z1 )k

- multiplicacin
q 0 q1 = (w0 + x 0 i + y 0 j + z 0 k )(w1 + x1i + y1 j + z1 k ) q 0 q1 = (w0 w1 x0 x1 y 0 y1 z 0 z1 ) + (w0 x1 x0 w1 y 0 z1 z 0 y1 )x + (w0 y1 x0 z1 y 0 w1 z 0 x1 ) j + (w0 z1 x0 y1 y 0 x1 z 0 w1 )k

- conjugado
q * = (w + xi + yj + zk ) = w xi yj zk
*

10

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

El cual satisface las siguientes propiedades:

(p )

* *

=p

( pq )* = q * p *
- norma
N (q ) = N (w + xi + yj + zk ) = w 2 + x 2 + y 2 + z 2

Y satisface las siguientes propiedades:


N (q * ) = N (q )
N ( pq ) = N ( p )N (q )

- inverso multiplicativo
q 1 = q * N (q )

Con las siguientes propiedades:

(p )

1 1

=p

( pq )1 = q 1 p 1

11

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

2.1.3 Rotacin Un nmero cuaternio q = w + xi + yj + zk tambin puede ser expresado de la siguiente forma: q = w + v , donde v = xi + yj + zk . Si nosotros vemos a v como un vector en 3D (x, y, z ) , entonces la multiplicacin de cuaternios puede ser representada usando el producto punto y el producto cruz de vectores de la siguiente forma:

(w0 + v0 )(w1 + v1 ) = (w0 w1 v0 v1 ) + w0 v1 + w1v0 + v0 v1


De esta forma es claro que q0 q1 = q1q0 si y solo si v0 v1 = 0 Un cuaternio puede ser expresado como un vector en 4D (w, x, y, z ) , por lo tanto se define el producto punto de dos cuaternios como:
q 0 q1 = w0 w1 + x0 x1 + y 0 y1 + z 0 z1

Un cuaternio unitario es un cuaternio q tal que N (q ) = 1 , por lo tanto un cuaternio unitario puede ser representado como: q = cos + usen , donde u es un vector en 3D. Y finalmente: cmo girar un punto arbitrario del espacio en torno a un eje arbitrario del espacio?. Bueno, representar un punto ( un vector un eje que pasa por el origen) del espacio en forma de cuaternio es muy fcil, dado el vector p = (x, y, z ) , el cuaternio que le corresponde es: q = (0, x, y, z ) , es decir, un cuaternio que contiene al vector, pero cuya magnitud es igual a 0.

12

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Un cuaternio, de alguna manera, representa la rotacin de un punto cualquiera alrededor de un eje del espacio arbitrario, Por qu?, consideremos un eje del espacio que pasa por el origen (o lo que es lo mismo, un vector): v = (x, y, z ) y consideremos tambin un punto arbitrario en el espacio P = ( x0 , y 0 , z 0 ) que queremos girar radianes alrededor de el eje v . Ahora generemos un cuaternio unitario a partir del eje v y del ngulo de la siguiente manera: q = qw + qx i + qy j + qz k , donde:
qw = cos( 2 )

qx = sen( 2 )x v
qy = sen( 2 ) y v qz = sen( 2 )z v

Es decir:
q = (cos( 2 ), sen( 2 )v v )

Pues bien, dado este cuaternio generado a partir del eje (o vector) v y del ngulo , obtenemos el siguiente resultado:
P = q(0, P )q 1

Es decir, que el punto P una vez rotado, esto es: P viene dado por este simple producto de cuaternios.

13

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Y P P X V

Z
Fig. 3 Rotacin de cuaternios

La rotacin tambin puede verse en forma matricial como se muestra en la siguiente matriz:

1 2 y 2 2 z 2 2 xy 2wz 2 zx + 2wy 2 2 R = 2 xy + 2wz 1 2 x 2 z 2 yz 2wx 2 zx 2wy 2 yz + 2wx 1 2 x 2 2 y 2

2.2 Interpolacin
Recordemos que un nmero cuaternio representa movimiento y para poder reproducir el movimiento de un objeto con mas detalle, es necesario recurrir a la interpolacin, existen varios mtodos que interpolan el movimiento, en este caso se estudiaron 2 de estos mtodos: LERP y SLERP.

14

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

La idea general detrs de la interpolacin de una rotacin entre cuaternios consiste en tener una variable t [0,1] , cuando t = 0 el cuaternio de rotacin interpolado es igual al cuaternio inicial a , es decir, es igual al punto de inicio del movimiento, y cuando t = 1 el cuaternio de rotacin interpolado es igual al cuaternio final b , es decir, es igual al punto final del movimiento, para valores entre 0 y 1 el cuaternio de rotacin interpolado se mover desde el cuaternio a hasta el cuaternio b , el movimiento resultante depender de la cantidad de valores que tome t durante el proceso de interpolacin. Es importante notar que los cuaternios al ser normalizados son nmeros que estn sobre la esfera unitaria de tres dimensiones, y en una cuarta dimensin se representa la rotacin nuevamente sobre la esfera unitaria.

a b

Fig. 4 Interpolacin proyectada sobre la esfera unitaria

15

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

2.2.1 LERP En primer lugar tenemos a la interpolacin lineal (LERP), este es el ms simple de los mtodos, como su nombre lo dice consiste nicamente en la interpolacin lineal entre 2 cuaternios y se define de la siguiente manera: sean q0, q1 H y t [0,1] , esta interpolacin est dada por:
Lerp (q 0 , q1 , t ) = q0 (1 t ) + q1t

La curva de interpolacin para la interpolacin lineal entre cuaternios, da como resultado una lnea recta en el espacio de los cuaternios, la curva por consiguiente esta por debajo de la esfera unitaria, adems la velocidad del movimiento no es constante, la velocidad es mayor en medio de la curva generada.

q0

q1

Fig. 5 Interpolacin lineal

16

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

2.2.2 SLERP EL siguiente mtodo de interpolacin utilizado es SLERP (Spherical Linear Quaternion Interpolation), a diferencia de LERP, el movimiento generado con SLERP es constante, esto se debe a que en lugar de realizar interpolacin lineal simple, la curva sigue un gran arco sobre la esfera unitaria (cuaternio) desde un marco clave a otro. La formula usada para este mtodo es la siguiente:
sen((1 t ) ) sen(t ) Slerp(q0 , q1 , t ) = q 0 sen( ) + q1 sen( )

Donde t [0,1] y es el ngulo entre q0 y q1 , esta dado por:


= cos 1 (q 0 q1 )

q0

q1

Fig. 6 interpolacin lineal esfrica

17

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

3 Desarrollo del proyecto


3.1 Matlab Matemtica?
El primer paso fue elegir el lenguaje de programacin a utilizar, era necesario desarrollar funciones que permitieran manipular de una manera sencilla las operaciones con nmeros cuaternios, al principio se pens en trabajar con matemtica, y se desarrollaron algunos algoritmos de rotacin de cuaternios, primero con un punto, despus con una recta, con un tringulo y finalmente con un cubo. Al mismo tiempo se desarrollaron estos algoritmos en Matlab. Finalmente se decidi trabajar con Matlab ya que el lenguaje de programacin que ofrece Matlab es mas flexible con el manejo de funciones y variables, lo que hace los algoritmos menos complejos y mas cortos; lo cual reduce el tiempo de programacin. Matlab permite un fcil manejo de operaciones con matrices, como se mencion al principio, un cuaternio puede representarse por medio de una matriz de 4x4 por lo que de esta manera el problema de sumar, restar, multiplicar un cuaternio se reduce simplemente a operar matrices en Matlab. Por otra parte con Matlab es muy sencillo manipular video, con matemtica se puede mostrar una animacin a partir de varias graficas generadas y solo puede verse la animacin si se est trabajando en Matemtica; sin embargo con Matlab esto es totalmente distinto, pueden generarse videos a partir de varias graficas generadas y mostrarse en ese momento como con matemtica pero adems, pueden generarse videos en formato avi, por lo que una animacin generada por matlab puede verse sin necesidad de tener a Matlab en ejecucin; adems de que cuenta con un gran nmero de funciones que permiten generar graficas mas completas y vistosas para el usuario.

18

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

3.2 Desarrollo de funciones bsicas de algebra de cuaternios


Al comenzar a manipular nmeros cuaternios se crearon 2 funciones, las cuales permiten representar un cuaternio por medio de un vector en R4 como una matriz de 4 x 4, estas funciones son m=qua_mat(q) y q=mat_qua(m) las cuales solo representan un cuaternio de vector a matriz y viceversa, estas funciones son muy importantes, al representar un cuaternio por medio de la matriz, se puede operar de manera directa, y al terminar de operar un numero cuaternio se regresa a su forma vectorial para poder graficar el resultado. Gracias a estas funciones, no es necesario realizar funciones para las operaciones de suma, resta, multiplicacin y divisin de cuaternios, sin embargo para el conjugado tenemos la funcin q=conjq(q). Para poder realizar rotaciones con cuaternios primero se necesita un cuaternio unitario, sabemos que la direccin del giro realizado por el cuaternio depender del signo utilizado en la formula:
q = (cos( 2 ), sen( 2 )v v )

Por lo que se realizaron 2 funciones q=qrder(v,r) que regresa un giro a la derecha y q=qriz(v,r) que regresa un giro a la izquierda. Estas funciones a la vez invocan a otra funcin: m=modulo(v) la cual calcula el modulo de un vector.

19

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Con estas funciones se puede ahora realizar la rotacin de un cuaternio, la funcin que realiza las rotaciones de cuaternios es: p=rotacionqua(p,v,r), en esta funcin solo se aplica la siguiente formula:
P = q(0, P )q 1

Con la finalidad de apreciar grficamente la rotacin de puntos utilizando cuaternios, se crearon las funciones gqua.m y g=grqua(p,v,r), las cuales son una pequea demostracin de generacin de movimiento a partir del uso de nmeros cuaternios. La primer funcin nicamente muestra la trayectoria del punto rotado, pero la segunda funcin muestra una pequea animacin del movimiento generado por la rotacin, con este fin es creada una nueva funcin llamada M=video(X,Y,Z), esta funcin crea un apequea animacin del movimiento pero no crea ningn archivo .avi, pero si regresa una matriz con la informacin de cada frame generado por la animacin del movimiento.

6 7.5 4 7 2 0 z -2 -4 -6 6.5 6 z 5.5 5 4.5 4 6 5 4 5 3 0 y -5 0 1 2 x 3 4 5 6 7 y 2 1 3 4 x 5 6 7

Fig. 7 Rotacin con cuaternios

20

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Nota: Todas las funciones utilizadas se incluyen en el anexo de este reporte.

3.3 Desarrollo de algoritmos de interpolacin


Con el objetivo de mostrar el movimiento con mas detalle es necesario realizar interpolaciones del mismo, al inicio se mencionaron algunos mtodos de interpolacin con cuaternios, cada uno de estos mtodos fue implementado en Matlab. El primero de estos mtodos implementados es lerp en la funcin q=lerp(q1,q2,t), en este algoritmo se encuentra implementada la siguiente frmula:
Lerp (q 0 , q1 , t ) = q0 (1 t ) + q1t

En este caso t est tomando valores entre 0 y 1, y adems se indica el nmero puntos que se quieren obtener entre q1 y q 2 , por lo tanto:

t = 1

numpuntos

El siguiente algoritmo de interpolacin implementado fue Slerp, este algoritmo se encuentra en la funcin q=slerp(q1,q2,t) en el cual se implementa la siguiente ecuacin:
sen((1 t ) ) sen(t ) Slerp(q0 , q1 , t ) = q 0 sen( ) + q1 sen( )

21

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Nuevamente t toma valores entre 0 y 1 y hay que indicar en nmero de puntos que se desea tener. El resultado de estos algoritmos de manera grafica es mostrado en una funcin la cual invoca a estas dos funciones de interpolacin, esta nueva funcin nicamente muestra un ejemplo de interpolacin de un cuaternio a otro utilizando por un lado lerp y por otro Slerp. Esta funcin se llama demointerpolacion.m. En este programa tambin nos aseguramos de que los resultados obtenidos sean correctos, por lo que se le aplica una rotacin a q0 y el resultado de esta rotacin ser el cuaternio q1 , con esto se tiene una idea de la trayectoria que describe el movimiento a interpolar.

rotacion de q0

Interpolacion lineal

Interpolacion lineal esferica

2 2 Z 2

q0
3 Z

q0
q1
-1 -2 Y -3 -3 -2 -1 X 0 1

2 2 2 0 -1 -2 Y -3 -2 -1 X 0 1

2.5

q1

q0
2 0 -1 -2 Y -3 -2 -1 X 0

q1
1

Fig. 8 Ejemplo de interpolacin con cuaternios

22

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Otra representacin de la interpolacin pero proyectada sobre la esfera unitaria, se obtiene con la funcin: demoesfera.m, para poder realizar esta interpolacin primero es necesario realizar una proyeccin que va del espacio a la esfera unitaria, esto se realiza en la funcin mapa.m.

Fig. 9 Ejemplo de interpolacin con cuaternios proyectados sobre la esfera

23

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

3.4 Trabajando con el video


3.4.1 Formato del video Los videos esclavo y maestro son archivos .avi; estos videos contienen 51 cuadros, cada cuadro tiene 480 pixeles de ancho y 420 pixeles de alto, su compresin de video es: Descomprimido y el tamao de muestra del video es de 8 bits. Para poder trabajar con los videos en Matlab solo se necesita ejecutar el comando open nomarch.avi para que queden cargados los datos del video en el workspace de Matlab, de esta manera se observa un arreglo de 1 x 51 el cual contiene en cada entrada una estructura; cada estructura contiene 2 variables: cdata y colormap; cdata es una matriz de 420 x 480 y colormap es una matriz de 256 x 3. Estos datos fueron guardados en un archivo con el siguiente comando save(arch.mat,var1,var2,), de esta forma, los datos correspondientes a los videos estarn disponibles en cualquier momento al ejecutar dentro de las funciones el comando load arch.mat. Este formato de video solo se utiliz para el primer filtro (ver 3.4.2), posteriormente se necesito cambiar el formato de video con un tamao de muestra del video de 24 bits. Con este nuevo formato se tiene ahora un arreglo de 1 x 51 y en cada entrada de este hay nicamente una variable: cdata la cual es un arreglo de 420 x 480 x 3, la cual puede verse como 3 matrices de 420 x480 y donde cada matriz corresponde a un color RGB(Rojo, Verde, Azul). Con este nuevo formato se puede trabajar solo con una matriz de 420 x 480 ya que como el video se encuentra en escala de grises, las 3 matrices contienen exactamente los mismos valores en cada entrada.

24

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

3.4.2 Creacin de filtros Para poder reproducir el moviendo de la burbuja en un nuevo video, es necesario saber la trayectoria de su movimiento, una vez que se sabe cual es la trayectoria que describe la burbuja al ascender por el tanque de agua es posible construir un nuevo video. Como sabemos, el video est compuesto por 51 cuadros, cada cuadro i contiene a la burbuja en el tanque de agua en el tiempo t i , por lo tanto si sabemos la posicin de la burbuja en cada cuadro podremos saber la trayectoria de la burbuja en todo el video. Durante el ascenso de la burbuja esta llega a deformarse, lo cual no ayuda si se quiere saber su posicin, sin embargo, si en lugar de buscar la posicin de la burbuja completa solo se busca la posicin de un solo punto dentro de la burbuja los resultados sern ms precisos. Este punto ser interpretado como la posicin de la burbuja. Para encontrar este punto dentro de la burbuja fue necesario construir un filtro, el cual al ser aplicado a cada video el resultado obtenido son las posiciones de la burbuja o coordenadas del punto sobre un plano y se obtiene un vector por cada cuadro. La funcin con la que se obtienen estas coordenadas es punto.m, las posiciones de la burbuja son guardadas en un archivo el cual podr ser utilizado posteriormente para la construccin de un nuevo video. La funcin punto.m invoca a una nueva funcin: COORD=analiza_video(M,g,freq,infx,supx,borde), esta funcin analiza a los videos aplicando un filtro paso alto, con esta funcin obtenemos las coordenadas de la burbuja para el plano.

25

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

El filtro paso alto se encuentra en la funcin IMFIN=filtro_pasoalto(img,g,freq,ajuste), en esta funcin se crea un filtro paso-alto, el cual es aplicado a cada cuadro del video para obtener finalmente la posicin de la burbuja.

Al ejecutar la funcin punto.m se obtienen 2 archivos cm.mat y ce.mat, en cada archivo se encuentra guardada una matriz de 2 x 51, es decir contiene 51 pares ordenados los cuales indican la posicin de la burbuja en cada frame, si se grafican estos vectores obtenemos la siguiente grafica para el anlisis del video maestro:

Analisis del video maestro 450 400 350 300 250 200 150 100 50 0 248

248.5

249

249.5

250

250.5

251

251.5

Fig.10 Coordenadas del video maestro

26

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Por otro lado graficando los vectores obtenidos en el anlisis del video maestro obtenemos la siguiente grafica:

Analisis del video esclavo 450 400 350 300 250 200 150 100 50 0 204

206

208

210

212

214

216

218

220

222

224

Fig.11 Coordenadas del video esclavo

Debido a que las cmaras fueron colocadas en posicin ortogonal, es posible obtener la trayectoria de la burbuja en el espacio, para obtener las coordenadas en X y Z se toman los valores del anlisis del video maestro y para las coordenadas en Y se toma solo un valor de los vectores obtenidos en el anlisis del video esclavo, el valor que no es utilizado es igual a las coordenadas en Z del video maestro:
Z Z

(xi, zi)

(yi, zi)

X Video maestro Video esclavo


Fig.12 Composicin de coordenadas.

27

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Si se grafican estos valores podemos observar la trayectoria que sigue la burbuja al ascender por el tanque de agua como se muestra en la siguiente figura:
Trayectoria de la burbuja compuesta por las coordenadas del video maestr y del video esclavo

450 400 350 300 250 200 150 100 50 0 225

220

215

210

205

248

249

250

251

252

y del video maestro

x del video esclavo

Fig. 12 Trayectoria de la burbuja en el espacio

Posteriormente se pretendi aplicar otro filtro a los videos para poder encontrar el contorno del la burbuja y de esa manera se construira una burbuja virtual a partir de una elipse generada por cuatro puntos encontrados en el contorno del la burbuja, pero esto no pudo lograrse debido a la calidad de las filmaciones, en la funcin filtro_inverso.m se aplica este filtro al video maestro, este filtro trataba de eliminar todo el color externo a la burbuja tomando en cuenta que la nica variacin de color en cada cuadro del video esta precisamente en donde se encuentra la burbuja, ya que esta es lo nico que est en movimiento, el resultado obtenido es el siguiente:

28

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Fig. 13 Videos filtrados

En las figuras anteriores puede notarse como se pierde en algunas partes el contorno de la burbuja, por lo que finalmente no fue usado este filtro y la burbuja virtual fue creada a partir de una elipse utilizando una funcin de Matlab.

29

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

3.5 Creacin de burbuja virtual


3.5.1 Generando burbuja virtual sin interpolacin Finalmente se crearon 2 videos con burbujas virtuales y como no se logr obtener el contorno de la burbuja, se creo una burbuja virtual a partir de una elipse con una de las funciones que tiene Matlab en sus toolboxes: [x,y,z] = ellipsoid(xc,yc,zc,xr,yr,zr,n), en esta funcin se indica la posicin del centro de la elipse (xc,yc,zc) y su tamao (xr,yr,zr). El centro de la elipse son las posiciones que se obtuvieron con la funcin punto.m, los cuales estn guardados en archivos .mat. La funcin que crea los videos de la burbuja virtual es burbuja_virtual.m, en esta funcin adems de crear una burbuja virtual, se crea un video .avi en el cual se reproduce el movimiento de la burbuja. La creacin del video primero se abre el archivo .avi con el siguiente comando:
aviobj = avifile('arch.avi','fps',numframes,'compression','Indeo5')

Posteriormente se van agregando las graficas generadas (que contienen a la burbuja virtual) con los siguientes comandos:
frame= getframe(gca); aviobj = addframe(aviobj,frame);

Y al final es necesario cerrar el archivo con el siguiente comando:


aviobj = close(aviobj);

30

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Los videos se crean dentro del directorio en el cual se est trabajando en Matlab. Las siguientes imgenes muestran un cuadro de los videos creados de la burbuja virtual:

Fig. 14 Video burbuja virtual (maestro)

Fig. 15 Video burbuja virtual (esclavo)

31

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

4 Conclusin
Por el tipo de lenguaje de programacin, Matlab resulta ser una opcin rpida y sencilla para trabajar con este tipo de algoritmos ya que el cdigo generado es mas comprensible, adems de que la generacin de graficas y video resulta mas elegante y llamativo para el usuario. Por otro lado, la utilizacin de nmeros cuaternios para la generacin de movimientos de objetos resulta ser menos compleja para la implementacin de algoritmos, adems de que se ocupa mucho menos memoria y tiempo de procesador en comparacin con otros mtodos para generar movimiento. Desgraciadamente la calidad del video no permiti avanzar mas en la construccin de los videos de la burbuja virtual ya que era necesario encontrar el contorno de la burbuja para saber la inclinacin de la burbuja en cada frame para lograr interpolar el movimiento.

32

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

5 Bibliografa
1. Curves and Surfaces for Computer Aided Geometric Design, Gerald Farin, Second Edition, Academic Press INC, 1990 2. http://www.diku.dk/forskning/image/teaching/Studentproj ects/Quaternion/ Quaternions, Interpolation and Animation, Erick B. Dam, Martin Koch, Martin Lillholm, Department of Computer Science, University of Copenhagen, July 17, 1998 3. http://bilbo.edu.uy/~cnyc/cn/interpol/splines/ 4. Geometric Algebra With Applications In Science And Engineering, Eduardo Bayro Corrochano, Garret Sobczyk, Birkhauser Boston, 2001 5. http://home.cs.tum.edu/~zikic/downloads/quaternions/3d %20rotations%20and%20quaternions_cv.pdf The Clifford Algebra of Double Quaternions and the Optimization of TS Robot Desing, Shawn G. Ahlers, J. Michael McCarthy

33

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

6. http://home.cs.tum.edu/~zikic/downloads/quaternions/3d %20rotations%20and%20quaternions_cv.pdf 3D Rotations and Quaternions, Darko Zikic, Seminar Methods and Tools in Medical Imaging, 5 May 2004 7. http://imaging.utk.edu/publications/papers/dissertation/go ddard.pdf Pose and Motion Estimation from Vision Using Dual Quaternion-Based Samuel Goddard December 1997 8. http://www.win.tue.nl/~wstahw/2IV40/eberly99.pdf Quaternion Algebra and Calculus, David Eberly, September 27 2002 9. http://www.diku.dk/forskning/image/teaching/Studentproj ects/Quaternion/ 10. http://www.ep.liu.se/ecp/013/004/ecp01304.pdf Extended Jr., The Kalman University Filtering, of James Tennessee,

34

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

6 Anexos
6.1 Funciones
A continuacin se muestran las funciones creadas durante el desarrollo de este proyecto:

%qua_mat(q) representa al cuaternio q por medio de la matriz m %q = un numero cuaternio de la forma: (a, b, c, d) function m = qua_mat(q); m = [ q(1) -q(2) q(4) -q(3); q(2) q(1) -q(3) -q(4); -q(4) q(3) q(1) -q(2); q(3) q(4) q(2) q(1)];

%mat_qua(m): representa al cuaternio m por medio de un vector q %m = numero cuaternio de la forma: m= ( a, -b, d, -c % b, a, -c, -d % d, c, a, -b % c, d, b, a) function q = mat_qua(m); q = [m(1,1),m(2,1),m(3,2),m(4,2)];

%q=conjq(q): calcula el conjugado de un cuaternio q %q=cuaterno de la forma (a,b,c,d) function q = conjq(q); q = [q(1),-q(2),-q(3),-q(4)];

%q=qrder(v,r): calcula un cuaternio unitario para rotacion con giro a la %derecha %v=eje de giro (x,y,z) %r=angulo de rotacin %q=cuaternio (a,b,c,d) function q = qrder(v,r); q = [cos(r),(sin(r).*v)./modulo(v)];

%q=qrder(v,r): calcula un cuaternio unitario para rotacion con giro a la %izquierda %v=eje de giro (x,y,z) %r=angulo de rotacin %q=cuaternio (a,b,c,d) function q = qrizq(v,r); q = [cos(r),(-sin(r).*v)./modulo(v)];

35

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

%m=modulo(v): calcula el modulo de un vector %v=vector (x,y,z) %m=modulo function m = modulo(v); m = sqrt(sum(v.^2));

%p=rotacionqua(p,v,r): realiza la rotacion de un punto utilizando %multiplicacion de cuaternios %p=punto a rotar (p1,p2,p3) %v=eje de rotacion (x,y,z) %r=angulo de rotacion %regresa la posicion del punto despues de la rotacion function p = rotacionqua(p,v,r); p = pq(p); q = qrizq(v,r); q1 = conjq(q); aux = mat_qua(qua_mat(q)*qua_mat(p)*qua_mat(q1)); p = qp(aux);

%p=qp(q): de punto a cuaternio %q=cuaternio (a,b,c,d) %p=punto en el espacio (p1,p2,p3) function q = pq(p); q=[0,p(1),p(2),p(3)];

%p=qp(q): de cuaternio a punto %q=cuaternio (a,b,c,d) %p=punto en el espacio (p1,p2,p3) function p = qp(q); p = [q(2),q(3),q(4)];

%programa que realiza una pequea demostracin derotacion con cuaternios %r=angulo de rotacion %p=punto a rotar %v=eje de rotacion r=pi; p=[5,10,0]; v=[8,8,8]; grqua(p,v,r); title('rotacion con cuaternios');

36

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

%g=grqua(p,v,r): funcion que grafica la rotacion de un cuaternio %p=punto a girar (p1,p2,p3) %v=eje de rotacion (x,y,z) %r=angulo de giro function g = grqua(p,v,r); cont=1; for i=0:pi/32:r g = rotacionqua(p,v,i); X(cont)=g(1); Y(cont)=g(2); Z(cont)=g(3); cont = cont+1; end M=video(X,Y,Z);

%M=video(X,Y,Z): crea una animacion a partir de una serie de graficas %M=arreglo que contiene los datos de cada frame capturado durante la %creacion de cada grafica %X, Y y Z= son las coordenadas en el espacio function M=video(X,Y,Z); n=length(X); M = moviein(n); axes=[min(X) max(X) min(Y) max(Y) min(Z) max(Z)]; for j=1:n plot3(X(1:j),Y(1:j),Z(1:j)); AXIS(axes); xlabel('x'); ylabel('y'); zlabel('z'); grid on; M(:,j) = getframe; end movie(M);

%q=lerp(q1,q2,t): raliza el metodo de %cuaternios %q1 y q2=cuaternios (a,b,c,d) %t=valor entre 0 y 1 %q=cuaternio encontrado function q = lerp(q1,q2,t); q = (q1*(1-t)) + (q2*t);

interpolacion lineal entre

%q=slerp(q1,q2,t):_ implementa el metodo de interpolacion lineal esferica %q1 y q2=cuaternios (a,b,c,d) %t = valor entre 0 y 1 %q=cuaternio encontrado function q = slerp(q1,q2,t); s=sum(q1.*q2); theta = acos(s); q=( sin((1-t)*theta) / sin(theta) )*q1+( sin(t*theta) / sin(theta) )*q2;

37

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

%demointerpolacion.m: funcion que realiza una demostracion de %interpolacion con lerp y slerp %p=punto inicial %q=punto final %se interpolara de p a q, para verificar que el resultado es correcto %primero se realiza una rotacin de p y el punto obtenido por esta %rotacin es q, por esta razn se interpola de p a q p = [0,-3,0,2]; r = pi/3; v = [1e-05,1e-05,1]; np = 70; subplot(1,3,1) [q,xq,yq,zq] = grqua(p,v,r); grid on title('rotacion de q0') cont=1; for t=0:1/np:1 l = lerp(p,q,t); X(cont,1) = l(2); Y(cont,1) = l(3); Z(cont,1) = l(4); le = slerp(p,q,t); X(cont,2) = le(2); Y(cont,2) = le(3); Z(cont,2) = le(4); cont = cont+1; end subplot(1,3,2) Ml = video(X(:,1),Y(:,1),Z(:,1)); title('Interpolacion lineal') subplot(1,3,3) Mle = video(X(:,2),Y(:,2),Z(:,2)); title('Interpolacion lineal esferica')

38

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

%funcion demoesfera.m %esta funcion realiza interpolacion lineal, esferica sobre la esfera %unitaria(demostracion) p=[0.3,-0.6,0.8,1]; q=[0.2,-0.9,0.4,1]; subplot(1,3,1) plot3(p(1,2),p(1,3),p(1,4),'*b'); hold on plot3(q(1,2),q(1,3),q(1,4),'*b'); [x,y,z]=sphere(50); surf(x,y,z); shading interp colormap winter; alpha(0.65); grid on xlabel('X'); ylabel('Y'); zlabel('Z'); pmap=mapa(p); qmap=mapa(q); cont=1; np=5; for t=0:1/np:1 l = lerp(pmap,qmap,t); X(cont,1) = l(2); Y(cont,1) = l(3); Z(cont,1) = l(4); le = slerp(pmap,qmap,t); X(cont,2) = le(2); Y(cont,2) = le(3); Z(cont,2) = le(4); cont = cont+1; end subplot(1,3,2) [x,y,z]=sphere(50); surf(x,y,z); grid on hold on xlabel('X'); ylabel('Y'); zlabel('Z'); lim=length(X); plot3(X(1,1),Y(1,1),Z(1,1),'pk'); hold on plot3(X(lim,1),Y(lim,1),Z(lim,1),'pk'); hold on plot3(X(:,1),Y(:,1),Z(:,1),'-k'); shading interp colormap winter; alpha(0.65); title('L e r p') subplot(1,3,3) [x,y,z]=sphere(50); surf(x,y,z); grid on hold on

39

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

xlabel('X'); ylabel('Y'); zlabel('Z'); lim=length(X); plot3(X(1,2),Y(1,2),Z(1,2),'pk'); hold on plot3(X(lim,2),Y(lim,2),Z(lim,2),'pk'); hold on plot3(X(:,2),Y(:,2),Z(:,2),'-k'); shading interp colormap winter; alpha(0.65); title('S l e r p')

%funcion pm=mapa(q) %realiza una proyeccion de un cuaternio sobre la esfera unitaria function pm = mapa(q) [n,m]=size(q); for i=1:n c = (1 / ((q(i,1).^2)+(q(i,2).^2)+(q(i,3).^2)+(q(i,4).^2)) ); q1 = (q(i,1).^2)+(q(i,2).^2)+(q(i,3).^2)-(q(i,4).^2); q2 = (2.*q(i,1).*q(i,4)); q3 = (2.*q(i,2).*q(i,4)); q4 = (2.*q(i,3).*q(i,4)); pm = c*[q1 ,q2 ,q3 ,q4 ]; mq(i,:)=qp(pm); end

%punto.m %esta funcin localiza un punto fijo en la burbuja %M=arreglo que contiene las coordenadas en el plano de la trayectoria de %la burbuja en el video maestro %E=arreglo que contiene las coordenadas en el plano de la trayectoria de %la burbuja en el video esclavo load maestro; load esclavo; M=analiza_video(maestro,10,0.2,10,200,300,4); E=analiza_video(esclavo,10,0.2,10,200,300,4); save('cm.mat','M'); save('ce.mat','E'); figure(1) plot(M(:,1),M(:,2),'*k'); title('Analisis del video maestro'); figure(2); plot(E(:,1),E(:,2),'*k'); title('Analisis del video esclavo');

40

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

%COORD=analiza_video(M,g,freq,infx,supx,borde) %Se encuentran las coordenadas de la burbuja a partir de un objeto de %tipo video. %COORD : coordenadas del objeto observado %M=video a analizar %g , freq, ajuste=parametros del filtro,grado de polinomio y frecuencia %de corte del filtro paso-alto. ajuste,parametro para el contraste %infx, supx : definicion de la cinta(banda) en abscisas de busqueda de la %burbuja function COORD=analiza_video(M,g,freq,ajuste,infx,supx,borde); taille=size(M,2); COORD=zeros(taille,2); for i=1:taille %recuperacion de la imagen IM1=frame2im(M(i)); hauteur=size(IM1,1); %filtro paso alto IM2=filtro_pasoalto(IM1,g,freq,ajuste); %encuentra los indices de localizacion de la burbuja [indy,indx]=find(IM2(borde:hauteur-borde,infx:supx)<10); %Localizacion de la burbuja calculando la mediana sobre los renglones %y sobre las columnas COORD(i,1)=(median(indx)+infx); COORD(i,2)=(median(indy)+borde); end

%IMFIN=filtro_pasoalto(img,g,freq,ajuste) %IMFIN=imagen filtrada %img=imagen a filtrar %g=grado del polinomio de corte %freq=frecuencia de corte %ajuste=un parametro no muy importante que apunta sobre el contraste de %la imagen (entre mas grande es la imagen-> la imagen es mas clara) function IMFIN=filtro_pasoalto(img,g,freq,ajuste) % transformacion de la matriz en un vector lineal [m,n]=size(img); x=reshape(img,1,m*n); % rellenando un vector con ceros (para resolver el problema del desfase de la imagen) t=zeros(1,round((g+1)/2)); x1=[x,t]; x1=double(x1); d=size(x1); %Creacion de un filtro paso alto utilizando la funcion fir1 %que construye el filtro paso alto con las caracteristicas dadas A3=fir1(g,freq,'high'); %Filtrado : filtro es una funcion de matlab que %hace el producto de convolucion entre el filtro y la imagen y3=filter(A3,1,x1); %filtro pasoalto con contraste y4=(y3>(max(max(y3))+ min(min(y3))+ajuste)/2)*255; %transformacion del vector en matriz y=y4(round((g+1)/2)+1:d(2)); IMFIN=reshape(y,m,n);

41

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

%filtro_inverso.m %Este filtro funciona de la siguiente manera: %Primero se toma alguno de los cuadros de la pelicula, en este caso se tomo el ultimo cuadro (c=mov(51).cdata), este cuadro se compara contra %los dems cuadros con el fin de eliminar todo lo externo a la burbuja, %para esto se toma un valor(umbral) sobre el cual se comparan los valores %en cualquiera de las tres matrices (como el video esta en escala de %grises las tres matrices tienen los mismos valores), este valor puede %ser variado para mejorar la calidad del filtro, de esta manera se %compara cada uno de los cuadros contra el ultimo cuadro, %si el valor absoluto de la resta entre el valor (i,j,1) de la matriz en %el cuadro i y el valor (i,j,1) de la matriz del ultimo cuadro es menor %al umbral entonces a las entradas (i,j,1),(i,j,2),(i,j,3) de las %matrices en el cuadro i se les asignaran los valores de 255 a cada uno %para obtener el fondo blanco,esto funciona debido a que lo unico que %esta en movimiento en el video es la burbuja, por lo tanto los valores %del ultimo cuadro seran mucho mayores al umbral. mov = aviread('esclavo.avi'); % mov = aviread('maestro.avi'); numframes = length(mov); hp = 2 * pi / numframes; numfseg = 2; dur = numframes / numfseg; aviobj = avifile ( 'filtro_inverso_e.avi', 'fps', numfseg ); umbral = 20; for k = 1:50 cuadro=mov(k).cdata; t = size(cuadro); c=mov(51).cdata; for i = 1:t(1) for j = 1:t(2) if abs(c(i,j,1)-cuadro(i,j,1)) < umbral cuadro(i,j,1) = 255; cuadro(i,j,2) = 255; cuadro(i,j,3) = 255; end end end mov(k).cdata=cuadro; aviobj = addframe ( aviobj, mov(k) ); end aviobj = close ( aviobj);

42

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

%funcion burbuja_virtual.m %Esta funcin genera una burbuja virtual y reproduce la trayectoria de %ascenso por el tanque de agua %Genera un video .avi con el movimiento de la burbuja %Esta funcion es utilizada tanto para el video maestro como para el video %esclavo. load puntose;%E load puntos;%M My=M(51:-1:1,2); numframes = 50; hp = 2 * pi / numframes; num_frames_per_second = 2; aviobj = avifile('esclavo_virtual.avi', 'fps',num_frames_per_second,'compression','Indeo5') for i=1:50 hold on plot3(0,0,0,'.k'); plot3(480,0,0,'.k'); plot3(0,420,0,'.k'); plot3(0,0,480,'.k'); plot3(480,420,0,'.k'); plot3(480,0,480,'.k'); plot3(0,420,480,'.k'); plot3(480,420,480,'.k'); x = M(i,1); y = My(i); z = E(i,1); [x,y,z] = ellipsoid(z,y,x,6,6,6,40); %Para video esclavo: ellipsoid(z,y,x,6,6,6,40) h = surface(x,y,z,'EdgeColor','none','FaceColor','blue'); colormap hsv alpha(0.1) camlight('right','infinite') material shiny lighting flat grid off axis tight box on hold off set(gca,'nextplot','replace'); frame= getframe(gca); aviobj = addframe(aviobj,frame); delete(h); end aviobj = close(aviobj);

43

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Matlab
QU ES MATLAB? MATLAB = 'MATrix LABoratory' (LABORATORIO DE MATRICES). MATLAB es un medio computacional tcnico, con un gran desempeo para el clculo numrico computacional y de visualizacin. MATLAB integra anlisis numrico, matrices, procesamiento de seales y grficas, todo esto en un ambiente donde los problemas y soluciones son expresados tal como se escriben matemticamente. Escrito inicialmente como auxiliar en la programacin de clculo con matrices. MATLAB fue escrito originalmente en fortran, actualmente est escrito en lenguaje C. MATLAB es un lenguaje de programacin amigable al usuario con caractersticas ms avanzadas y mucho ms fciles de usar que los lenguajes de programacin como basic, pascal o C. Actualmente van en la versin 5.2. MATLAB cuenta con paquetes de funciones especializadas llamadas toolboxes. TOOLBOXES DE MATLAB Control system Toolbox, Robust Control Toolbox Frequency Domain System Identification Toolbox Fuzzy Logic Toolbox Higher Order Spectral Analisys Toolbox Image Processing Toolbox Model Predective Control Toolbox Mu Analisis and Synthesis Toolbox NAG Foundation Toolbox Neural Network Toolbox Nonlinear Control Design Toolbox Optimization Toolbox Quantitative Feedback Theory Toolbox Signal Processing Toolbox SIMULINK, SIMULINK Real Time Workshop Spline Toolbox Statistics Toolbox Symbolic Math Toolbox System Identification Toolbox.

44

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

INICIO DE MATLAB MATLAB se inicia directamente desde Windows. Al invocarse MATLAB aparecer la pantalla de comandos, algunas sugerencias y el smbolo >> , el cual indica la entrada de instrucciones para ser evaluadas. >> >> Comando o instruccin a evaluar < enter > Para hacer la suma de dos nmeros, escribimos : >> 5 + 5 < enter > Presionamos la tecla entrar. ans = 10 El resultado es desplegado y se guarda en la variable ans (answer). NOTA : El smbolo >> desaparecer, y ser reemplazado por un par de corchetes con la instruccin dentro de ellos. [ 5 + 5 ]. La instruccin aparecer en color verde. Para poder ver ejecutarse la instruccin, debemos ponernos en el rengln donde est la instruccin o marcarla con el ratn y presionar al mismo tiempo las teclas. <Ctrl> <Enter>

Otra forma de evaluar una instruccin, es poner el apuntador del ratn entre los corchetes de la instruccin y presionar el botn derecho del ratn; aparecer un men del cual se tiene que escoger evaluar celda. Hagamos la prueba con el rengln inmediato. 5+5 Presionar <Ctrl> <Enter>

La respuesta es desplegada en color azul y entre corchetes. HELP El comando help proporciona una lista de todos los tpicos que MATLAB puede proporcionar ayuda. help help 'comando' proporciona ayuda sobre el comando especificado.

45

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

help sqrt proporciona ayuda sobre la instruccin sqrt. Ejemplo: help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also SQRTM CMO FUNCIONA MATLAB? MATLAB puede almacenar informacin en variables tales como : a = 100 " <Ctrl> <ENTER> para evaluar la celda "

Cada vez que capturamos informacin en MATLAB y presionamos <ENTER> sta es desplegada inmediatamente ( letras en color azul ), pero si ponemos un punto y coma al final de la instruccin MATLAB omite el desplegado de informacin. Por ejemplo : b = 50 ; Si se quiere saber el valor de alguna variable capturada slo se tiene que poner el nombre de la variable y <ENTER> y MATLAB lo despliega. Estas variables residen en el espacio de trabajo de MATLAB. b Las variables son sensibles a las maysculas, por lo que las siguientes variables son diferentes : Variable = 1 variable = 1 Las variables pueden contener hasta 19 caracteres. stas deben empezar con una letra, seguida por cualquier nmero de letras, dgitos o guiones de subrayado. Los caracteres de puntuacin no son permitidos en las variables.

46

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Cuando se trabaja con muchas variables estas son difcil de recodar. El comando who muestra un desplegado de todas aquellas variables que se han estado utilizando. who whos Muestra las variables con informacin adicional.

CARACTERES ESPECIALES [] () = ' . ... , ; Son usados para formar vectores y matrices Usados para expresiones matemticas. Usado para hacer asignaciones. Transpuesta de una matriz Usado para separar texto Punto decimal [123;456] sqrt(2) x=5 A' 'texto' 3.1415

Al final de una lnea indican que continua 2,3,4,5,6 .... en el siguiente rengln. 7,8,9,10 ] Para separar elementos [1,2,3,4]

Para separar filas en las matrices. [ 1 2; 3 4] Para evitar que se despliegue la informacin capturada. [3] ; % !dir este

% Para hacer comentarios programa,etc. ! Para ejecutar un comando del Ms-dos OPERACIONES BSICAS SUMA C=a+b RESTA d=a-b MULTIPLICACION e=a*b

47

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

DIVISION F=a /b F=a\b

POTENCIA a^2 Como este ltimo clculo no tena variable asignada, la respuesta se guarda en la variable ans (answer ). BORRADO DE VARIABLES. Para borrar el valor de una variable simplemente ponemos clear a Borra la variable " a " a Checar que este borrada. clear a b c Borra las variables " a ", " b " y " c " " CLEAR " Borra todas las variables y no se pueden recuperar. FUNCIONES TRIGONOMTRICAS sin ( 0.5) As mismo COS ( X ) ASIN ( X ) SINH ( X ) ASINH ( X ) ATAN2 ( X,Y ) LOGARITMOS log (0.5) LOG10 ( X ) Logaritmo natural Logaritmo decimal. TAN ( X ) ACOS ( X ) COSH ( X ) ACOSH ( X ) ATAN ( X ) TANH ( X ) ATANH ( X ) Inversa Hiperblica Inversa- Hiperblica Seno de (0.5)

Inversa de la tangente en los cuatro cuadrantes.

FUNCIONES MATEMTICAS ESPECIALES. abs ( -3) ceil ( 123.123123) Valor absoluto o magnitud de un nmero complejo Redondea hacia ms infinito

48

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

FLOOR ( X ) FIX ( X ) ROUND ( X ) imag ( 30 - 5j ) REAL ( X ) ANGLE ( X ) CONJ ( X ) sign ( -5) exp ( 1 ) REM ( X,Y ) sqrt (2) OPERACIONES LGICAS

Redondea hacia menos infinito Redondea hacia cero Redondea hacia el entero ms prximo Parte imaginaria de un nmero complejo Parte real de un nmero complejo Angulo de un nmero complejo Complejo conjugado Funcin signo : Devuelve el signo del argumento (1 si es positivo, -1 si es negativo ) Exponencial : e ( x ) Resto despus de la divisin ( x / y) Raz cuadrada

En MATLAB se pueden hacer operaciones lgicas, por ejemplo. 1 < 2 Como 1 es menor que 2, la respuesta es cierta por lo que obtenemos un 1. 1<1 Obtenemos un 0, porque 1 no es menor que 1. Como se puede observar las nicas respuestas posibles con las operaciones lgicas son: Cierto = 1 y Falso = 0. Operadores relacinales: Mayor que Menor que Mayor o igual a Menor o igual a Igual a No igual a > < >= <= == ~=

Existen tres operadores lgicos : AND OR NOT & | ~

49

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

La variable NaN (Not a Number) Cuando en un lenguaje de programacin como basic, pascal o C, se da una situacin que el programa no pueda manejar, como una divisin como 0/0 el programa se detiene, marcando un error. Cuando en MATLAB se presenta una situacin similar el programa no se detiene, slo da una pequea advertencia de que se present una divisin entre cero. Y el resultado es un NaN, que es una variable interna no es un nmero). 0/0 Ejemplo: defina a=[1 2 0] y b=[1 2 0] ahora pida la divisin elemento a elemento (comando ./) a ./ b Arreglos (Arrays) Vectores. Si se desea calcular el seno de " 0 a 1 " con incrementos de 0.25, se pueden capturar los valores y despus mandar llamar el seno de la funcin. Seno de 0 a 1 con incrementos de 0.25 x = [ 0, 0.25, 0.5, 0.75, 1 ]

Se pueden omitir las comas cuando se capturan los nmeros. Con los nmeros capturados, se obtiene el seno de la variable x escribiendo simplemente : sin (x) MATLAB opera en radianes, donde 2 = 360 grados. Ahora se requiere obtener el coseno de cero a uno con incrementos de 0.01; lo que equivale a capturar 101 elementos. Para evitar capturarlos a mano, MATLAB nos permite crear un vector de la siguiente manera : Variable = ( Valor inicial : Con incrementos de : Valor final ) R = (0 : 0.01 : 1)

50

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

COS ( R ) R.

Ahora se puede obtener el coseno de la variable

Hagamos el siguiente vector : Y = ( 0 : 1 : 10) Si queremos saber cual es el cuarto elemento del vector ponemos : Y (4) Si nos interesan los elementos 5 al 10 : Y( 5 : 10 ) Otras opciones son : Y( 1 : 2 : 9) Toma los elementos del 1 al 9 con incrementos de 2 Y([ 1, 3, 7,10]) Toma los elementos 1, 3, 7 y 10 del array MODIFICACIONES DE LOS ARREGLOS Si el noveno elemento del array debi ser el nmero 20 en vez de 8, corregimos de la siguiente manera : Y(9) = 20 Otra forma de hacer arreglos, es con linspace : Linspace ( Valor inicial , Valor final , Nmero de elementos ) Regresando al ejemplo del coseno de 0 a 1 con incremento de 0.01 escribimos : Note el uso de comas (#, #, #) Z = linspace(0 , 10, 101) Linspace describe una relacin lineal de espaciado entre sus elementos. Logspace describe una relacin de espaciado " logartmica ". Logspace ( Primer exponente , ltimo exponente , Cantidad de valores )

51

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Logspace (0 , 2 , 10 ) Hemos creamos un arreglo que comienza en 10 0 y termina en 10 2, conteniendo 10 valores. Otra forma de crear arreglos es : x1 = 1 : 5 x2 = 10 : 5 : 100 Arreglo de 1 a 5, con incremento de 1 Arreglo de 10 a 100, con incrementos de 5.

Si se quiere concatenar x1 y x2 C = [ x1 x2 ]

MATEMTICAS CON ARREGLOS. a=1:6 incrementos de 1 b=1:2: 12 Define un vector de seis elementos con

Vector de seis elementos con incremento de 2

Arreglos con escalares

Se le puede sumar o multiplicar un nmero a todo el arreglo, por ejemplo a + 10 a * 10 Suma de un escalar con un arreglo Multiplicacin de un escalar con un arreglo

Operaciones con arreglos

Para hacer la suma de los arreglos a y b, solamente escribimos : a+b La respuesta se guarda en ans :

52

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Se pueden hacer operaciones como : Z = 100 - 2 * a + b La multiplicacin de arreglos se hace con ( . * ), ya que cuando se utiliza el asterisco sin punto indica multiplicacin matricial, y adems provoca un error. Z = a .* b La divisin tambin lleva un punto antes del signo, porque sino se utiliza el punto nos referimos a la divisin matricial que es muy diferente. Z = a ./ b La siguiente operacin obtiene el cuadrado del arreglo " a ". Z = a .^ 2

ORIENTACIN DE ARREGLOS Si separamos cada elemento del arreglo con punto y coma tenemos un arreglo de una sola columna : a = [ 1; 2; 3; 4; 5; 6 ]

Es necesario usar los corchetes, porque si no los usamos obtenemos el ltimo valor que capturamos : d = 1 ; 2; 30 ; 40 ; 50 ; 600 ; 1000 Para crear una columna con 20 elementos hacemos lo siguiente : d = ( 1 : 1 : 20 ) y trasponemos el rengln a columna, es decir buscamos la transpuesta. ( ' ) e = d'

53

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

MATRICES Se utiliza el punto y coma ( ; ) para hacer una matriz. Para formar la matriz 1 2 3 3 2 1 2 1 3 Escribimos : A = [ 1 2 3; 3 2 1; 2 1 3 ] OPERACIONES CON MATRICES Definamos las siguientes matrices ' g ' y ' h '. g = [ 1 2 3; 4 5 6; 7 8 9] h = [ 1 0 2 ; 11 2 3 ; 3 5 12 ] La suma de las matrices g y h se muestra enseguida: k=g+h k=g*h [L, U ] = lu (k) [d,e]= qr (k) Multiplicacin de dos matrices. Calcula la factorizacin LU de la matriz cuadrada k Calcula la factorizacin QR de la matriz k.

Calcula la descomposicin en valores singulares de la matriz k. rank(k) cond(k) Devuelve el rango de la matriz k. Devuelve el nmero de condicin de la matriz k.

Modificacin de las matrices. A = [ 1 2 3; 4 5 7; 7 8 9 ] Si nos equivocamos al capturar la matriz, por ejemplo si el nmero 7 del segundo rengln, tercer columna debi ser 6 en vez de 7, tendramos que capturar de nuevo la matriz. Pero con MATLAB es posible modificarla de la siguiente manera : A(2,3)= 6 Variable ( rengln, columna)= nuevo valor

54

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Si tenemos la matriz identidad de 4 x 4 : 1000 0100 0010 0001 A = [ 1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1] Pero por algn error la matriz identidad debi de haber sido de 5 x 5. Hay que capturar de nuevo la matriz ?. La respuesta es no. A(5,5) = 1 Agregamos un 1 en el rengln 5 columna 5, y como este no existan previamente, las columnas y renglones se completan agregando ceros. Que pasa ahora si queremos slo una matriz identidad de 3 x 3 y tenemos capturada una de 5 x 5. Podemos utilizar : Matriz ("Rengln" inicio : Fin , "Columna" inicio : Fin ) B = A ( 1 : 3, 1: 3) Ahora si queremos que la matriz identidad sea : 00 1 010 100 C = B ( 3 : -1 : 1 , 1 : 3 ) Poner dos puntos ( : ) indica que se deben tomar todas las columnas (1 : 5). Esto es valido tambin para los renglones. C=A(:,[135]) Toma todos los renglones, pero slo toma las columnas 1, 3 y 5. Si creamos las siguientes matrices A y B :

55

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

A=

[ 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5 ]

B = [ 6 7 8; 6 7 8; 6 7 8; 6 7 8 ] Podemos construir una matriz C uniendo las dos anteriores c=[AB] A partir de la matriz A queremos tomar las columnas 1, 2 y 5, y de la matriz B queremos tomar las columnas 1 y 3, para formar una matriz D. D = [ A(:,[ 1 2 5]) B(:, [ 1 3])] D( :,1)=[] Elimina la columna nmero uno. MATRICES ESPECIALES ones(2) zeros(5,4) rand(3) eye(4) Hace una matriz de unos, de 2 x 2. Hace una matriz de ceros, de 5 x 4. Hace una matriz de 3 x 3, Hace una matriz identidad de 4 x 4.

GRFICAS En MATLAB se pueden crear grficas tan simples como : D = [ 1 2 3 5 4 7 6 8 9 8 6 3 1 3];plot (D) o se pueden crear grficas tan complejas como : cplxroot(3,10) Superficie de una raz cubica.

Como se vi en el primer ejemplo es posible grficar una serie de puntos y MATLAB automticamente ajusta los ejes donde se grfica. Por ejemplo, para grficar la funcin seno se pueden crear un rango de valores

56

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

x = 0 : 0.1 : 20; y = sin(x); plot (x,y) z = cos(x); plot (x,z) plot ( x,y,x,z) plot (x,z,'*')

x = vector de cero a veinte con incrementos de 0.1 Seno del vector (x) Grfica del seno Coseno del vector anterior Grfica del coseno de x. Grfica del seno y coseno en la misma pantalla Grfica del coseno con los signos ' * '

Hace la grfica en azul, y los signos ' + ', intercambiando los ejes. plot ( z, x,'b+') Como se ve es posible grficar en Matlab con smbolos y adems escoger el color. Es posible agregar un cuadriculado a la grfica, para tener ms precisin, con el comando. grid Se pueden agregar ttulos a las grficas y etiquetas en los ejes con los comandos siguientes. title(' Grfica del coseno de x') Para ponerle etiquetas a los ejes se puede utilizar los comandos ylabel ('etiqueta') xlabel('etiqueta') axis off SUBPLOT El comando subplot nos permite desplegar en pantalla varias grficas. subplot(m,n,a) 'm' y 'n' son una matriz que representa las cantidades de grficas que se van desplegar; 'a' indicara el lugar que ocupara la grfica en el subplot. Hagamos la grfica de los siguientes puntos. La desplegaremos en cuatro puntos diferentes en pantalla para ver las caractersticas de subplot. Desaparece los ejes.

57

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

a=[ 1 ,2 ,3 9 ,8 ,7 ,4, 5, 6, 8, 7, 5]; plot (a) Vamos hacer una matriz de 2 x 2 para grficar, cuatro posibles ventanas o grficas. Y queremos que la primera grfica ocupe el lugar (1,1) de la matriz. entonces escribimos. subplot(2,2,1),plot(a) subplot(2,2,2), plot(a) subplot(2,2,4), plot(a) CLF borra todos los objetos de la grfica. CLF RESET Borra todo lo que hay en la grfica y resetea todas las propiedades de la figura. GRFICAS EN TRES DIMENSIONES. El comando plot se puede extender a 3 dimensiones con el comando plot3. El siguiente ejemplo hace una grfica de una espiral en tres dimensiones. t=0:pi/50:10*pi; plot3(sin(t),cos(t),t) zlabel ('etiqueta') Se utiliza para dar etiquetas al eje z, en las grficas en tres dimensiones. GRFICOS DE MALLA Y SUPERFICIE. z = peaks(10) El comando peaks crea un conjunto de valores que al ser grficados, se ven de la siguiente manera. plot(z) Se tomar como base la grfica anterior para demostrar algunas funciones de graficacin en tres dimensiones.

58

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

mesh(z) contour(z,10) surf(z) Es posible cambiar el sentido de orientacin de las grficas con el comando view(x,y) view(0,0) view(90,0)

gtext( texto ) Se utiliza para colocar texto en una grfica, con la ayuda del mouse. Simplemente se ejecuta el comando y con el mouse se selecciona la coordenada deseada y se presiona el botn derecho del mouse, quedando fijo el texto en la pantalla. OTROS COMANDOS What : actual dir : Listado de todos los archivos *.m en el directorio Lista todos los archivos en el directorio actual

type nombre_archivo :Lista el programa, (Programas con terminacin *.M). Which nombre_archivo : Da el path en el cual esta el archivo. Se pueden utilizar comandos de Unix tales como Ls, pwd.

COMO HACER UN PROGRAMA EN MATLAB Es posible realizar un programa en Matlab tal como se hace en otros lenguajes como el basic, pascal o el lenguaje C. Es necesario utilizar un editor para escribir el cdigo. Para cargar un editor, se puede hacer desde la ventana options, escogiendo editor preference, y cargando el editor que se desee utilizar.

59

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

Para escribir cdigo, requerimos crear un archivo *.M. Para esto necesitamos abrir new M.file en la ventana file. Ahora escribimos el cdigo y salvamos el archivo utilizando la terminacin archivo.M. Se puede correr el programa desde Matlab simplemente escribiendo el nombre del archivo que fue creado. Es posible abrir programas con la terminacin *.M desde Matlab, en el men file, open M.file. BUCLES FOR Tal como en otros programas de programacin en Matlab es posible crear programas con estructura con ciclos for. For x = Nmero incial : nmero final Instruccin End. for x = 1 : 10 x=x+1 end Tambin se pueden hacer operaciones como la siguiente : matriz = [ 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4] for x = matriz x = n(1)*n(2)*n(3)*n(4) end

60

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

BUCLES WHILE While permite que ciertas instrucciones sean repetidas un nmero indefinido de veces bajo el control de una condicin lgica. Por ejemplo, Cual es primer entero n para el cual n! (factorial) es un nmero de 100 dgitos ?. n = 1; while prod(1:n)<1.e100,n=n+1;end n IF ELSE END Se pueden utilizar estructuras como: If expresin (verdadero) accin End. If expresin (verdadero) accin 1 else (Falso) accin 2 End. If expresin (verdadero) accin 1 elseif expresin (verdadero) accin 2 ... else accin "n" End

(Falso)

61

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos Hernndez Durn Maricela

ANLISIS DE DATOS. En Matlab podemos hacer anlisis de datos estadsticamente o probabilisticamente. Entre estos anlisis estn clculos de medias, mximos, mnimos, desviaciones estndar, etc. Inventemos un conjunto de datos, los cuales podremos analizar. x =[ 9 1 ;23 34; 16 28 ;12 33 ;5 7; 9 4 ;12 34 ;5 14 ;43 6 ;3 6 ;12 9; 2 30 ;3 2; 2 4] plot (x) La representacin grfica de los puntos anteriores.

A continuacin se hace una anlisis de los datos presentados, habr dos respuestas porque tenemos dos columnas. media=mean(x) max(x) min(x) std(x) hist(x) TIPS DE MEMORIA. Para obtener la mxima velocidad en Matlab debemos tratar de vectorizar los algoritmos, por ejemplo : a=0 for a = 0:.0.1:10 a = a + 1; y(a)=sin(t) end La versin vectorizada sera : t= 0:0.01:10; y = sin(t) El primer ejemplo en MATLAB toma aproximadamente 15 segundos, mientras que el segundo toma slo 0.6 segundos. Obtencin de la media El mximo de los valores. El mnimo de los todos los valores La desviacin estndar Histograma.

62

S-ar putea să vă placă și