You are on page 1of 25

1. Anlisis y Diseo Orientado a Objetos 1.1.

Elementos del Modelo de Objetos Fundamentales Abstraccin Denota las caractersticas esenciales de un objeto que lo distinguen de los dems, y establece as barreras conceptuales bien definidas respecto de la perspectiva del observador. Contrato: establece las suposiciones que realiza objeto cliente respecto al servidor, abarcando las responsabilidades del servidor. Firma: cada una de las operaciones que ayudan al contrato tiene una firma nica que abarca todos los parmetros formales y tipo que retornan. Protocolo: conjunto de operaciones que puede realizar un cliente sobre objeto, incluye formas de llamada y ordenes que admite.

Tipos de Abstraccin De entidades: objeto es modelo til en dominio de solucin del problema. De acciones: objeto proporciona conjunto general de operaciones, que realizan funciones del mismo tipo. De mquinas virtuales: objeto que agrupa operaciones, virtuales todas usadas por un nivel superior, o que utilizan operaciones de un nivel inferior. De coincidencia: objeto que almacena operaciones que no tienen relacin entre s.

Encapsulamiento Es el proceso de almacenar en un mismo compartimiento elementos de una abstraccin, que constituye su comportamiento y estructura. Oculta los detalles de la implementacin de un objeto.

Modularidad Es el acto de fragmentar un programa en componentes individuales para reducir su complejidad. Crear fronteras definidas y documentadas dentro del 1

programa, pues son claves para entender el problema. Jerarqua Son una clasificacin u ordenacin de abstracciones. Las dos jerarquas mas importantes de un sistema son: Estructura de Clases: Jerarqua de clases. Herencia. Estructura de Objetos: Jerarqua de partes. Agregacin.

Una subclase puede heredar la estructura y comportamiento de su superclase. Secundarios Tipos (tipificacin) Son las puestas en vigor de la clase de objetos, de modo que los objetos de tipos distintos no pueden intercambiarse o, si pueden hacerlo, solo lo harn en formas restringidas. La comprobacin de tipos impide que se mezclen abstracciones. Concurrencia La concurrencia es la propiedad que distingue un objeto activo de uno que no est activo. Permite a diferentes objetos actuar al mismo tiempo. Persistencia Capacidad de un objeto por la que su existencia trasciende en el tiempo, es decir, que contina existiendo despus de que su creador deja de existir, y/o el espacio, es decir, la posicin del objeto vara respecto al espacio de direcciones en el que fue creado. La persistencia conserva el estado de un objeto en el tiempo y en el espacio.

2. Sobrecarga de Operadores

2.1. Qu es la sobrecarga de operadores? Es solo otra forma de hacer una llamada a una funcin, una notacin mas clara para tipos de datos definidos por el programador. Permite expresiones claras para nuevos tipos de datos creados por el usuario. 2.2. Cmo se sobrecargan los operadores? Los operadores se sobrecargan escribiendo una definicin de funcin (con encabezado y cuerpo) como lo hara normalmente, excepto que el nombre de la funcin ahora ser la palabra reservada operator seguido por el smbolo del operador que se va a sobrecargar. Por ejemplo, el nombre de la funcin operator+ se utilizara para sobrecargar el operador suma ( +). 2.3. Cules son los operadores que no pueden sobrecargarse? Los operadores que NO pueden sobrecargarse son: . .* :: ?:

2.4. Cules son los operadores (sobre clases) que no necesitan sobrecargarse explcitamente? Los operadores que no necesitan sobrecargarse explcitamente son dos. El operador de asignacin (=) puede utilizarse con cada clase sin sobrecarga explicita. El comportamiento predeterminado del operador de asignacin es una asignacin de miembros de los datos miembro de la clase. Adems, el operador de direccin (&) puede utilizarse con objetos de cualquier clase sin sobrecarga; simplemente devuelve le direccin del objeto en memoria. 2.5. Para que tipos de clases es recomendable la sobrecarga? La sobrecarga es especialmente apropiada para las clases matemticas. Requieren la sobrecarga de un conjunto importante de operadores, en general, para mantener la consistencia de la manipulacin de dichas clases en la realidad. 2.6. Restricciones en sobrecarga de operadores

La precedencia de un operador no se puede modificar mediante la sobrecarga. Sin embargo, se puede utilizar parntesis para forzar el orden de evaluacin. La asociatividad (es decir, si el operador se aplica de derecha a izquierda, o de izquierda a derecha) no se puede modificar mediante la sobrecarga. No es posible modificar numero de operandos de un operador: los unarios permanecen unarios sobrecargados, y los binarios permanecen como binarios sobrecargados. El nico operador ternario (?:) no puede sobrecargarse. No es posible crear nuevos operadores; solo se pueden sobrecargar los existentes. No es posible modificar la manera en que un operador funciona con objetos predefinidos. Solo funciona la sobrecarga en este caso, con objetos de tipos definidos por el usuario, o con una mezcla de objeto de tipo definido por el usuario y objeto de tipo integrado. 2.7. Formas de sobrecargar operadores A travs de mtodos miembro. A travs de mtodos NO miembro con funciones amigas. A travs de mtodos NO miembro con funciones NO amigas (globales).

Casos de Sobrecarga

3. Plantillas (Templates)

3.1. Plantillas 3.1.1. Qu son? Los templates son funciones o clases definidas para tipos no especificados. 3.1.2. Para que sirven? Al utilizarlo se pasa el tipo como un argumento ya sea explcita o implcitamente. Adems, al ser componentes del lenguaje proveen control total de tipos y de mbito. 3.2. Funciones plantillas 3.2.1. Qu son y para que sirven? Proveen un comportamiento que puede ser invocado con distintos tipos. Tiene una representacin similar a una funcin. Se utilizan generalmente para realizar operaciones similares sobre distintos tipos de datos. 3.2.2. Cules son los prototipos? template <class T> void NombreFuncion (T& ref) {/* declaracin de funcin genrica */}; 3.2.3. Cmo se llama (invoca) a la funcin plantilla? Se la invoca como cualquier otra funcin, pasndole los parmetros correspondientes para que realice las instrucciones declaradas en su cuerpo. 3.3. Clases plantillas 3.3.1. Qu son y para que sirven?

Las plantillas de clases fomentan la reutilizacin de cdigo al permitir la creacin de instancias de versiones de las clases genricas para tipos especficos. Tambin se conocen como tipos parametrizados, ya que requieren de uno o ms parmetros de tipo para especificar la manera de personalizar una plantilla de clase genrica para formar una especializacin de plantilla de clase.

3.3.2. Cul es el prototipo? Ejemplo template <class T> class Minimax { public: T min(T a, T b); T max(T a, T b); }; template <class T> T Minimax<T>::min(T a, T b) {return (a<b)?a:b; }; template <class T> T Minimax<T>::min(T a, T b) {return (a>b)?a:b; }; 3.3.3. Cmo se especializa una clase plantilla para un tipo determinado? El programador que desea producir una variedad de especializaciones de plantilla de clase escribe solo una definicin de plantilla de clase. Para cada especializacin de plantilla de clase adicional, utiliza una notacin simple y concisa, el compilador escribe el cdigo fuente para dicha especializacin que requiere el programador. 3.4. A que se denomina programacin genrica? Por qu decimos que es un paradigma ms novedoso y amplio que el de la programacin orientada a objetos? Es un paradigma de programacin centrado en los algoritmos ms en los datos, parametrizados al mximo y expresados de la forma ms independiente posible, permitiendo que sirvan para la mayora de tipos y estructuras de datos. 3.5. En C++ este proceso se realiza en tiempo de compilacin o en tiempo de ejecucin?

La instanciacin de una plantilla en C++ se realiza en tiempo de compilacin, cuando el compilador escribe el cdigo fuente que requiere el programador para la misma.

4. Contenedoras (STL)

4.1. Qu es la STL? La STL (del ingls Standard Template Library) es una biblioteca de clases y funciones templates creada para estandarizar y optimizar la utilizacin de algoritmos y estructuras de datos en el desarrollo de software en C++. 4.2. Cules son sus elementos fundamentales? La STL posee tres componentes fundamentales: contenedores, iteradores y algoritmos. 4.3. Qu criterios se deben tener en cuenta para elegir el contenedor adecuado? Para cualquier aplicacin especfica podran ser apropiados varios contenedores distintos de la STL. Se debe seleccionar el contenedor mas apropiado que logre el mejor rendimiento, es decir, un balance entre velocidad y tamao, para dicha aplicacin. 4.4. Descripcin breve de cada contenedor y lista de comandos comunes Los contenedores se dividen en tres categoras principales: contenedores de secuencia, contenedores asociativos y adaptadores de contenedores. Contenedores de secuencia: representan estructuras de datos lineales como vectores y listas enlazadas. vector: inserciones y eliminaciones al final, acceso directo. deque: inserciones y eliminaciones al final, acceso directo. list: lista doblemente enlazada, insercin y eliminacin en cualquier parte. Contenedores asociativos: son contenedores lineales que por lo general pueden localizar elementos almacenados en ellos rpidamente. Pueden almacenar conjunto de valores o pares clave/valor.

set: bsqueda rpida, no se permiten duplicados. multiset: bsqueda rpida, se permiten duplicados. map: mapeo uno a uno, no se permiten duplicados, bsqueda rpida basada en claves. multimap: mapeo uno a uno, se permiten duplicados, bsqueda rpida basada en claves. Adaptadores de contenedores: implementa las pilas y colas que permiten a un programa ver a un contenedor secuencial en una manera restringida. stack: ultimo en entrar, primero en salir (LIFO). queue: primero en entrar, primero en salir (FIFO). priority_queue: el elemento de mayor prioridad siempre es el primero en salir.

5. Polimorfismo

Un objeto de la superclase puede ser instanciado como cualquiera de sus clases descendientes Es esta tal vez, la mejor forma de definir el polimorfismo, como una tcnica de programacin que nos permite programar en forma general, en vez de programar en forma especfica. Para aplicar esta tcnica, debemos tener en cuenta un mecanismo muy importante tal como la herencia. La herencia es una forma de reutilizacin de software para crear clases que asimilan los atributos y mtodos de una clase existente, redeclarandolos para que realice nuevas y distintas actividades. Adems, el polimorfismo, funciona mediante los manejadores de apuntadores a clases base y manejadores a referencias a clases bases, pero con manejadores de nombres. El encadenamiento tardo, quiere decir que los miembros que sern llamados en una instancia se definen en tiempo de ejecucin. Una forma de indicar que miembros de una clase pueden ser encadenados tardamente, se realiza a travs de los miembros virtuales. En la declaracin de clases base, no debemos olvidar que los atributos y mtodos que vayan a ser redefinidos en las clases derivadas deben ser declarados como virtuales. Declarar una funcin virtual, es decirle al compilador que dicha funcin ser modificada o redefinida completamente en sus clases derivadas. Al declarar como virtual un mtodo de una clase, automticamente quedara definido como virtual para todas sus clases derivadas. Para definir un mtodo como virtual, lo que hacemos es anteponer en la misma lnea, la palabra reservada virtual, de esta manera decimos que dicho mtodo esta incluido en la clase derivada y a su vez ser redefinida, ya sea parcial o totalmente. Algo muy importante a tener en cuenta para utilizar polimorfismo, es que los contructores de clases NO pueden ser declarados como virtuales, mientras que los destructores pueden y deben ser virtuales. El instanciamiento de clases derivadas a travs de clases base se realiza de la sgte manera: 10

Madre *puntero; puntero = new Hija; puntero->MetodoVirtualClaseHija(); delete puntero; Esta tcnica, se denomina upcasting. Como vemos, los operadores que aqu aparecen, new y delete, son manejadores de apuntadores, claves en la implementacin del polimorfismo. Estos operadores son usados para controlar la asignacin y liberacin de memoria en un programa, para cualquier tipo de dato predefinido o definido por el usuario, en lo que se denomina administracin de memoria dinmica. Por otra parte, tambin tenemos la posibilidad de crear miembros de una clase madre como virtuales puros, esto es aplicndoles una condicin extra: virtual void NombreFuncion () = 0; Dicha igualacin a 0, quiere decir que esta funcin de clase madre, debe ser si o si redefinida completamente en las clases derivadas. Las clases abstractas, son aquellas que poseen al menos uno de sus miembros virtual puro, y no pueden instanciarse, tampoco tendra sentido hacerlo. Por otra parte, cuando posee todos los mtodos virtuales puros, se la denomina clase abstracta genuina. Otro aspecto muy importante a tener en cuenta, solo por conocimiento teorico de cmo se realizan las llamadas a funciones hijas a travs de madres, es la tabla de mtodos virtuales. Esta TMV, se genera cuando C++ compila crendola para cada clase, a partir de las funciones virtuales que posee cada una de ellas. Por otra parte, la TMV se utiliza para seleccionar la implementacin de la funcin apropiada cada vez que se llama a una funcin virtual de esa clase. Debemos notar la existencia de distintos niveles de apuntadores. Primer nivel, los apuntadores a las funciones en la TMV, que apuntan a las funciones reales que se ejecutan cuando se invoca a una funcin virtual. Segundo nivel, en cambio, cada vez que se crea una instancia del objeto de una clase con funciones virtual, el compilador adjunta al objeto un apuntador a la TMV de esa clase. Finalmente, podemos hacer mencin a la utilizacin simultnea de polimorfismo y la STL. Para que nos puede servir esto? Pues la respuesta es muy sencilla, conociendo el upcasting, y con el uso de la STL podemos crear listas 11

dinmicas de punteros a clases madres, de manera tal de ahorrar cdigo y ampliar la extensibilidad de los programas. Por ejemplo: vector<Madre*> Contenedor;

12

6. Recursividad

Una funcin que se llama a s misma, se dice que es recursiva. La resursividad en las funciones puede darse de dos formas: Directa: la funcin se llama a s misma directamente. Indirecta: la funcin llama a otra funcin, que a su vez llama a la primera. Se dice que un procedimiento es recursivo si en parte esta formado por si mismo o se define en funcion de s mismo. 6.1. Propiedades Se reserva espacio para almacenar el nuevo conjunto completo de las nuevas variables. Hay variables con valores presentes y pendientes. La profundidad de la recursin debe ser finita, y adems pequea. Siempre debe poseer una condicin de salida, por la cual el ciclo recursivo finalice. 6.2. Tipos de Recursividad 6.2.1. Divide y Vencers El esquema divide y vencers es una tcnica para resolver problemas que consiste en dividir el problema original en subproblemas (de menor tamao), resolver los subproblemas y finalmente combinar las soluciones para dar una solucin al problema principal. En cada nivel del procedimiento este paradigma consta de los siguientes tres pasos: Dividir el problema en subproblemas. Resolver cada uno de los subproblemas. Combinar soluciones de subproblemas para obtener la solucin del problema original. Para que esta tcnica funcione deben cumplirse los dos requisitos siguientes: Primero, los subproblemas deben ser ms simples y sencillos que el problema original. Segundo, despus de un nmero finito de subdivisiones debe encontrarse un subproblema que pueda resolverse de manera 13

directa.

14

6.2.2. Bsqueda Exhaustiva A veces parece que no hay mejor manera de resolver un problema que tratando todas las posibles soluciones. Casi siempre es lenta, pero a veces es lo nico que se puede hacer. Tambin es til plantear un problema con esa tcnica y a partir de ah encontrar una mejor solucin. Otro uso prctico es resolver un problema con un tamao de datos de entrada lo suficientemente pequeo. La mayora de estos problemas pueden ser reducidos a generar objetos de combinatoria, como cadenas de caracteres, permutaciones y subconjuntos. 6.2.3. Algoritmos de rastro inverso Encontrar solucin a problemas sin seguir una regla especfica de clculo, sino por ensayo y error. Descomposicin al tanteo: Tareas parciales que se pueden expresar recursivamente. Se explora un nmero finito de subtareas: Hay incongruencias? -> Rastreo inverso. Suprime solucin mas reciente. Ensayo de una nueva posibilidad.

Es til donde hay muchas posibilidades iniciales, pero quedan pocas tras aplicar reglas posteriores.

15

7. Graficacin, OpenGL

OpenGL contiene comandos para dibujo, no posee comandos para abrir ventanas, ni para leer eventos de teclado y/o mouse. Para ello se usa a GLUT, cuyas instrucciones comienzan con el prefijo glut. En OpenGL, las instrucciones se escriben con minsculas ( gl) y las constantes son con maysculas (GL). 7.1. Ventanas 7.1.1. Iniciar Ventana Para inicializar una ventana en OpenGL, se requiere de 5 rutinas bsicas: glutInit (int *argc, chat **argv) //inicializa GLUT, debe ser llamada antes que cualquier rutina. glutInitDisplayMode (unsigned int mode)//se especifica modelo RGB o ndices, buffer sencillo o doble. glutInitWindowPosition (int x, int y)//ubicacin de esquina superior izquierda de nuestra ventana en la pantalla. glutInitWindowSize (int x, int y)//tamao en pixeles de nuestra ventana. glutCreateWindow (char *string)//crea la ventana con un contexto OpenGL. La pantalla se despliega cuando es llamada la funcin glutMainLoop(). 7.1.2. Limpiar Pantalla Se utiliza la instruccin: glClearColor (red,green,blue,alpha); //configura color de fondo para limpieza, en modo RGBA. Para el negro por ejemplo se utiliza el comando: glClearColor (0.0,0.0,0.0,0.0); La instruccin glClear (mask); limpia el buffer. Por ejemplo: glClear (GL_COLOR_BUFFER_BIT); 7.1.3. Completar Dibujo Para ellos se usan las siguientes instrucciones:

16

glFlush (); //llama a ejecucin a los comandos OpenGL, sin garantizar que se completen en tiempo finito. glFinish (); //fuerza que TODOS los comandos OpenGL se terminen de ejecutar; no contina hasta que todos estn terminados. 7.2. Sistema de Coordenadas 7.2.1. Cambio de Tamao Cuando se inicializa, se mueve o se cambia de ubicacin una ventana, el sistema de ventana genera un evento avisando el cambio. Si se esta utilizando la librera GLUT esta notificacin es automtica, solo hay que registrar la funcin callback: glutReshapeFunc (mi_redibujar); La funcin de callback recibe el alto y ancho de la nueva ventana. La funcin glViewPort() ajusta el rectngulo de dibujo para que utilice toda la ventana. La funcin gluOrtho2D() pone el origen (0,0) en la esquina izquierda inferior y (w,h) como la esquina derecha superior. 7.3. Primitivas OpenGL Son usadas para realizar los dibujos que se desean realizar. Las primitivas son: puntos, lneas y polgonos. Estas primitivas se describen por sus vrtices: coordenadas que definen punto, extremos de segmentos de lnea y esquinas de polgonos. Puntos: nmeros de punto flotante llamados vertex. Todos los clculos se realizan con vectores tridimensionales, si no se define z, se asume su valor 0. Lneas: son en realidad segmentos de recta, y no como una extensin al infinito como en matemticas. Vrtices definen puntos extremos de cada segmento. Si se definen lneas conectadas se utiliza nicamente el punto de finalizacin de cada lnea. Rectngulos: OpenGL provee una primitiva para dibujar directamente un rectngulo relleno: void glRect {s,i,f,d} (x1,y1,x2,y2); Polgonos: reas encerradas por lazo cerrado de segmentos de recta, con vrtices indicando extremos de segmentos que lo forman. Los polgonos se dibujan rellenos por defecto. 17

Hay funciones avanzadas para crear polgonos huecos, colores distintos para distintas caras, etc. Poseen restricciones: Los bordes no pueden intersectarse. Solo polgonos convexos, es decir, si dados dos puntos internos, el segmento que los une esta tambin en el interior. 7.3.1. Implementacin de Primitivas

Vrtices

Para los vrtices se utiliza el siguiente comando: glVertex {2,3,4} {sifd} [v] (coordenadas); Esta instruccin, se utiliza siempre entre glBegin() glEnd(). Parmetros de glBegin()

Los parmetros de glBegin() son los siguientes:

Tamao de un Punto

18

El tamao de un punto se modifica con: void glPointSize (GLfloat size); //el argumento tiene que ser >0.0 y como defecto es igual a 1.0.

Modificar Lneas El ancho de la lnea se puede cambiar con: void glLineWidth (GLfloat size); Para cambiar la trama: glLineStipple (1, 0x3f07); glEnable (GL_LINE_STIPPLE);

7.3.2. Primitivas: Patrones de Relleno El patrn es una serie de 16 ceros y unos: 1 => hay que dibujar un punto. 0 => no hay que dibujar un punto. El patrn puede ser escalado utilizando un factor de escala entre 1 y 255 Cada subserie de unos y ceros se repite segn el factor de escala. Patrones de Lnea

Convertimos los pixels a dibujar en 1 y los dems en 0. Por ejemplo para realizar la siguiente trama:

En binario sera: 1110011111100111 Convertimos este binario en hexadecimal y nos queda glLineStipple (1, 0xE7E7); Patrones de Relleno de Polgonos 19

Los polgonos pueden rellenarse con un patrn de 32x32 bits: glPolygonStipple (const GLubyte *mask); Y para activarlo, hacemos: glEnable (GL_POLYGON_STIPPLE); 7.4. Analoga de la cmara Viewing: apuntar a lo que se desea fotografiar. Modeling: ajustar la escena en la composicin. Projection: se elije el lente y se ajusta el zoom. Viewport: se determina el tamao final de la impresin de la foto. 7.5. Transformaciones de Vrtices en OpenGL

Transformacin de Vista: se logra con la instruccin: void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); Posicin de la Cmara, Punto de Referencia, Direccin arriba. Transformacin de Modelo: utilizadas para posicionar y orientar el modelo, como rotar, trasladar o escalar. void glTranslatef {fd} (TYPE x, TYPE y, TYPE z); void glRotate {fd} (TYPE angle, TYPE x, TYPE y, TYPE z); void glScale {fd} (TYPE x, TYPE y, TYPE z); Transformacin de Proyeccin: determina como se proyectar el objeto en la pantalla. Existen dos tipos bsicos: Perspectiva: hace que los objetos ms lejanos se vean ms pequeos. glFrustrum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) 20

Antes de usarse hay que indicar en reshape() el comando glMatrixMode() con el argumento GL_PROJECTION, as afecta a la matriz de proyeccin. Para que afecte al modelo se debe agregar el argumento GL_MODELVIEW. El comando glLoadIdentity() inicializa la matriz de transformacin actual. Ortogonal: mantiene las dimensiones reales de los objetos. El volumen de visualizacin es un paraleleppedo. No cambia el tamao del objeto. glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) 7.6. Primitivas OpenGL Son usadas para realizar los dibujos que se desean realizar. Las primitivas son: puntos, lneas y polgonos. Estas primitivas se describen por sus vrtices: coordenadas que definen punto, extremos de segmentos de lnea y esquinas de polgonos. Puntos: nmeros de punto flotante llamados vertex. Todos los clculos se realizan con vectores tridimensionales, si no se define z, se asume su valor cero. Lneas: son en realidad segmentos de recta, y no como una extensin al infinito como en matemticas. Vrtices definen puntos extremos de cada segmento. Polgonos: reas encerradas por lazo cerrado de segmentos de recta, con vrtices indicando extremos de segmentos que lo forman. Los polgonos se dibujan rellenos por defecto. Hay funciones avanzadas para crear polgonos huecos, colores distintos para distintas caras, etc. Poseen restricciones: Orillas no pueden intersectarse. Solo polgonos convexos, es decir, si dados dos puntos internos, el segmento que los une esta tambin en el interior. 7.6.1. Definicin de los vrtices La instruccin principal usada para ello es: glVertex {1,2,3,4} {b,s,i,d} [v] (TYPE coords)

21

Donde las coordenadas posibles son 1, 2, 3 4, y los tipos de datos son sufijos. Ejemplo: glVertex2s (2,3); GLdouble dvect[3] = {5.0,9.0,1992.0}; glVertex3dv (dvect); Las llamadas que se hacen a glVertex son efectivas solo entre las instrucciones glBegin() y glEnd(), pues los vrtices son en realidad argumentos de estas instrucciones.

7.7. Representacin y Matrices

Escalamiento Escalamiento x= sx x y= sy y Notacin matricial

x ' s x y ' = 0
P=S P Rotacin Rotacin

0 x sy y

Sx=2 Sy=1

Sx=5/2 Sy=3/2

x=x cos(a) y sin(a) y=x sin(a) + y cos(a) Notacin matricial

x ' cos(a ) y ' = sin( a )

sin( a ) x cos(a ) y

22

Traslacin Traslacin x = x + dx y = y + dy

23

7.8. Coordenadas homogneas Todo punto 2D (P1) puede ser representado por cualquier punto a lo largo del rayo 3D (llamado espacio homogneo) Las coordenadas ordinarias corresponden al punto donde z=1

Usando coordenadas homogneas cada punto pasa a ser:

xh x y yh h
Donde X = (x*h) / h X = (x*h) / h Para este caso, h = 0 no est permitido. Para nuestros casos h = 1. Reescribiendo las transformaciones en coordenadas homogneas:

1 T (d x , d y ) = 0 0

0 1 0

dx s x d yS ( s x , s y ) = 0 1 0

0 sy 0

0 cos( a ) R (a ) = 0 sin( a ) 0 1

sin( a ) cos(a ) 0

0 0 1

Nota: Transformaciones respecto al origen.

24

7.9. Bases de la GLUT (pasos a seguir)

Estructura de la aplicacin. Configurar y abrir una ventana. Iniciar estados en OpenGL. Registrar las funciones callback: render. resize. Input: keyboard, mouse, etc.

Definir el ciclo de procesamiento de eventos.

25

You might also like