Está en la página 1de 40

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD

Escuela de Ciencias Bsicas, Tecnologa e Ingeniera


Ingeniera de Sistemas Mdulo del curso Computacin Grfica

UNIDAD 2 ALGORITMOS BSICOS DE DIBUJO EN 2 DIMENSIONES ...................................................... 3


CAPTULO 4 Requerimientos de software ................................................................................. 5
Leccin 16 JDK ............................................................................................................................... 5
Leccin 17 Estructura bsica de un programa en JAVA ................................................................ 7
Leccin 18 Tipos de datos y variables ........................................................................................... 8
Leccin 19 IDE para JAVA .............................................................................................................. 9
Leccin 20 Compilacin y ejecucin............................................................................................ 14
CAPTULO 5 Algoritmos bsicos ............................................................................................... 16
Leccin 21 Especificacin de una discretizacin ......................................................................... 16
Leccin 22 Segmentos de recta................................................................................................... 17
Leccin 23 Discretizacin de circunferencias .............................................................................. 23
Leccin 24 Dibujo de polgonos................................................................................................... 25
Leccin 25 Llenado de reas ....................................................................................................... 28
CAPTULO 6 Transformaciones ................................................................................................ 29
Leccin 26 Breve repaso sobre matrices..................................................................................... 30
Leccin 27 Cambios de escala ..................................................................................................... 32
Leccin 28 Rotacin .................................................................................................................... 33
Leccin 29 Coordenadas homogneas y traslacin .................................................................... 35
Leccin 30 Rotacin alrededor de un punto ............................................................................... 37
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

ASPECTOS DE PROPIEDAD INTELECTUAL Y VERSIONAMIENTO

El contenido didctico del curso acadmico Computacin Grfica fue diseado


inicialmente en el ao 2005 por Adriana roco Lizcano Dallos, docente de la UNAD,
Bogot, ingeniera de sistemas, en su desempeo como tutora.

Se han realizado las siguientes actualizaciones al contenido didctico:

Adecuacin del diseo segn plantilla material didctico UNAD.

Distribucin de unidades, captulos y lecciones segn el estndar CORE.

Adicin del captulo 4 Requerimientos de software.

Actualizacin de herramientas para el desarrollo, codificacin y libreras.

Estos cambios fueron realizados por Oscar Javier Abaunza Garca, docente de la
UNAD, CEAD Bucaramanga, ingeniero de sistemas, especialista en educacin
superior a distancia, en su desempeo como tutor y director del curso a nivel
nacional.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

UNIDAD 2 ALGORITMOS BSICOS DE DIBUJO EN 2 DIMENSIONES

Introduccin

Una vez se han clarificado algunos de los fundamentos de la computacin grfica


es necesario abordar el proceso de representacin. En esta segunda unidad
didctica se van a encontrar los mtodos para graficar las primitivas bsicas:
rectas, crculos, polgonos, para posteriormente abordar lo correspondiente a
llenado de reas y transformaciones.

Para ello se parte de la conceptualizacin matemtica de cada una de estas


primitivas, llegando al proceso de discretizacin necesario para su dibujo en un
dispositivo como el monitor. Aunque muchos de los lenguajes computacionales ya
tienen definidas en sus libreras grficas funciones que permiten dibujar estas
primitivas sin tener que incluirse en el problema de la discretizacin, la idea
fundamental es conocer cmo funciona el dibujado en el monitor, a partir de su
unidad bsica: el pxel? Se espera que este conocimiento redunde en un mejor
manejo de los algoritmos que describen este proceso.

En cada uno de los algoritmos bsicos se proporciona la codificacin en lenguaje


Java con el fin de acercarlo a la programacin. En la prxima unidad se mostrar
con un mayor nivel de detalle las posibilidades de un API para la graficacin. Aqu
dar sus primeros pasos....pero sern esenciales.

Intencionalidades Formativas

Propsitos

Introducir al estudiante en el conocimiento de los principales algoritmos y


estructuras de datos utilizados en Computacin Grfica para modelar y
visualizar escenas en 2 y 3 dimensiones, como fundamento para la
visualizacin grfica en el computador.

Proporcionar al estudiante los lineamientos tecnolgicos bsicos que le


permitan utilizar libreras grficas (Ej. OpenGL) en conjunto con lenguajes de
programacin estructurada como JAVA.

Objetivos

Conocer los algoritmos necesarios para el trazado de curvas en dos


dimensiones, a partir del estudio de su origen matemtico, geomtrico y la
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

ejemplificacin utilizando libreras grficas en conjunto con leguajes de


programacin.

Elaborar ejercicios de llenado de reas y transformaciones de figuras de dos


dimensiones, utilizando libreras grficas y lenguajes de programacin,
partiendo de la conceptualizacin geomtrica respectiva.

Competencias

El estudiante programa empleando algoritmos que permiten dibujar las


principales figuras geomtricas en dos dimensiones.

El estudiante conoce los fundamentos matemticos de la representacin de


grficos computacionales en tres dimensiones y utiliza los algoritmos que las
realizan.

Metas

Al finalizar esta unidad didctica el estudiante estar en capacidad de:

Usar libreras grficas para la construccin de grficos computacionales.


Utilizar y construir algoritmos para dibujo de grficos en 2D y 3D.
Describir el funcionamiento matemtico y geomtrico que permite el
dibujo de grficos en el computador.

Mapa Conceptual de la Unidad


UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Productos de Aprendizaje

Individual

Lectura autorregulada de la Unidad Didctica realizando fichas textuales y


mapas conceptuales para archivar en el portafolio.
Consultar en internet sobre los temas de la unidad y publicar preguntas en el
foro de la unidad correspondiente para que sean solucionadas por el tutor o
los compaeros.
Sustentacin individual de los programas desarrollados.

Pequeo Grupo Colaborativo

Desarrollo de tres (3) ejercicios de programacin aplicando algoritmos de


graficacin en JAVA. Los enunciados sern entregados por el tutor indicando las
fechas y condiciones de entrega.

Grupo de Curso

Por cada tipo de algoritmo que se estudia se realizar una prctica en


computadores, para repasar los conceptos bsicos y probar los algoritmos
codificados en JAVA.
Socializacin de los productos individuales y en pequeo grupo colaborativo.
Consolidacin de conceptos, glosario tcnico y mapa conceptual de la
unidad.

CAPTULO 4 Requerimientos de software

Este captulo presenta las herramientas necesarias para la construccin y


ejecucin de programas en el lenguaje de programacin JAVA, los requerimientos
mnimos de hardware y software para su correcto funcionamiento y los comandos
bsicos para su implementacin.

Leccin 16 JDK

El JDK (Java Development Kit) comprende todas las herramientas necesarias para
la programacin en JAVA, a continuacin se presenta una relacin de sus
principales componentes:

java Gestor de aplicaciones Java. Esta herramienta es el intrprete de


los archivos de clase generados por el javac (compilador).
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

javac Compilador de aplicaciones Java, convierte el cdigo fuente en


bytecode de Java.

appletviewer Esta herramienta es empleada para ejecutar y depurar


aplicaciones Java sin necesidad de un navegador web.

javadoc Generador de documentacin, genera automticamente la


documentacin del cdigo fuente desarrollado a partir de los
comentarios insertados en cada archivo.

jar Archivador, permite empaquetar en un nico archivo JAR las


libreras de clase empleadas en un programa desarrollado.

16.1 Instalacin de la herramienta

Para realizar la instalacin del JDK de JAVA es necesario descargarlo desde la


pgina http://www.oracle.com/technetwork/java/javase/downloads/index.html, all
deber hacer clic en el enlace de descarga y seleccionar el instalador
correspondiente a su sistema operativo.

Figura 29 Descarga del Instalador JDK


UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Leccin 17 Estructura bsica de un programa en JAVA

El desarrollo de un programa en JAVA requiere los siguientes componentes


bsicos en su estructura:

import java.awt.*; // Declaracin de libreras de clase a emplear


//package prueba; // Declaracin del paquete contenedor
public class nclase { // Declaracin de la clase (nombre de la clase)
public nclase() { // Declaracin del constructor de la clase
System.out.print("Texto a mostrar"); // Instrucciones (solo muestra un texto en pantalla)
} // Fin del constructor
public static void main(String[] args) { // Declaracin del mtodo principal
nclase prueba = new nclase(); // Creacin de una instancia de la clase
} // Fin del mtodo principal
} // Fin de la clase

Algunos apuntes para programar en Java:

El lenguaje de programacin Java es fuertemente tipado por lo cual debe


prestarse mucha atencin a los nombres de libreras, clases, comandos etc.
(distinguiendo maysculas y minsculas).
Al documentar el cdigo fuente se suelen emplear comentarios, estos se
pueden emplear de la siguiente manera:
o Comentarios de una sola lnea: // comentario
o Comentarios de ms de una lnea: /* comentarios */
o Comentarios de documentacin: /** comentarios */
Una sentencia es una instruccin que se le da al programa para realizar una
tarea especfica, toda sentencia debe finalizar con ; ej. import java.awt.*;
Un identificador es el nombre que identifica a una clase, una variable, un
mtodo o una funcin, estos siguen las siguientes reglas:
o Debe iniciar con una letra, el carcter subrayado (_) o signo peso ($).
o No puede emplear palabras reservadas (ej. utilizadas por el lenguaje).
o No puede contener espacios en blanco.
o Puede contener pero no iniciar por nmeros.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Leccin 18 Tipos de datos y variables

18.1 Tipos de datos primitivos

Java soporta los siguientes tipos de datos:

boolean Comprende dos valores true o false.

char Caracteres Unicode de 16 bits Los caracteres alfa-numricos son los


mismos que los ASCII con el bit alto puesto a 0. Valores desde 0 hasta
65535 (valores de 16-bits sin signo).

byte Tamao 8 bits. Valores desde -27 hasta 27 -1 (-128 a 127)

short Tamao 16 bits. Valores desde -215 hasta 215-1 (-32768 a 32767)

int Tamao 32 bits. Valores desde -231 hasta 231-1 (-2147483648 a


2147483647)

long Tamao 64 bits. Valores desde -263 hasta 263-1 (-9223372036854775808 a


9223372036854775807)

float Tamao 32 bits. Nmeros en coma flotante de simple precisin. Estndar


IEEE 754-1985 (de 1.40239846e45f a 3.40282347e+38f)

double Tamao 64 bits. Nmeros en coma flotante de doble precisin. Estndar


IEEE 754-1985. (de 4.94065645841246544e324d a
1.7976931348623157e+308d.)

Sin embargo los tipos de datos mayormente empleados en la programacin bsica


con JAVA son boolean, int y double.

18.2. Caracteres

En Java los caracteres no estn limitados a los presentes en la tabla ASCII, son
Unicode. Un caracter se presenta siempre entre comillas simples ej. 'A', '5', '', etc.
El tipo de dato char se emplea para almacenar estos caracteres.

Un tipo especial de caracteres comprenden la secuencia de escape, empleados


para representar caracteres de control o caracteres que no se imprimen. Una
secuencia de escape est formada por la barra invertida (\) y un caracter. La
siguiente tabla presenta las secuencias de escape ms utilizadas.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

\r Retorno de carro (hace que se mueva el cursor a la primera posicin de una lnea)

\t Tabulador horizontal (genera un espacio de separacin entre caracteres)

\n Nueva lnea (indica el final de una lnea de texto y el paso a la siguiente).

\\ Escribe una barra invertida.

18.3 Variables

booleanas Una variable booleana solamente puede guardar uno de los


dos posibles valores: true (verdadero) y false (falso). Ej.
boolean var1 = true;

enteras Una variable entera corresponde a cualquier combinacin de


cifras precedida por el signo ms + (opcional), para los
positivos, o el signo menos -, para los negativos. Ej. int var1 =
-254; las variables enteras se enuncian en java con las
palabras reservadas (int, byte, short, int, long) segn la
longitud de los valores a contener.

en coma flotante Las variables del tipo float o double (coma flotante) se
emplean para almacenar valores que poseen parte entera y
parte decimal. Ej. float var1 = 4.3f; double var1 = 3.5;

Valores constantes Cuando se declara una variable de tipo final, su valor


permanece y no es posible modificarlo durante la ejecucin del
programa. Ej. final int VAR1=256;

Leccin 19 IDE para JAVA

El JDK (Java Development Kit) de Java presentado previamente no contiene un


IDE (Integrated Development Environment - Entorno de desarrollo integrado). Sin
embargo existen multiples alternativas independientes.

A continuacin se presentan algunas de los IDE para JAVA ms populares:

IntelliJ IDEA: Considerado uno de los mejores entornos de desarrollo, posee


soporte para multiples lenguajes de programacin.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Figura 30 Entorno del IDE intelliJ IDEA

Las siguientes son algunas de sus principales caractersticas:

Asistencia inteligente de codificacin


Generacin de cdigo
Estilo de cdigo
Documentacin de cdigo
Navegacin y bsqueda
Anlisis de cdigo sobre la marcha
Propiedades del editor de archivos
Diseador de GUI Swing
Diagramacin de clases UML

Eclipse: Entorno de desarrollo integrado de cdigo abierto multiplataforma, el


entorno de desarrollo integrado (IDE) de Eclipse emplea mdulos (plug-in) para
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

proporcionar toda su funcionalidad al frente de la plataforma de cliente enriquecido,


a diferencia de otros entornos monolticos donde las funcionalidades estn todas
incluidas, las necesite el usuario o no.

El SDK de Eclipse incluye las herramientas de desarrollo de Java, ofreciendo un


IDE con un compilador de Java interno y un modelo completo de los archivos
fuente de Java. Esto permite tcnicas avanzadas de refactorizacin y anlisis de
cdigo.

Figura 31 Entorno del IDE Eclipse

Las siguientes son algunas de sus principales caractersticas:

Editor de texto con resaltado de sintaxis


Compilacin es en tiempo real
Control de versiones con CVS
Integracin con Ant
Asistentes (wizards) para creacin de proyectos
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Netbeans: NetBeans es un proyecto de cdigo abierto de gran xito con una gran
base de usuarios, una comunidad en constante crecimiento, y con cerca de 100
socios en todo el mundo. Sun MicroSystems fund el proyecto de cdigo abierto
NetBeans en junio de 2000 y contina siendo el patrocinador principal de los
proyectos.

La plataforma NetBeans permite que las aplicaciones sean desarrolladas a partir de


un conjunto de componentes de software llamados mdulos. Un mdulo es un
archivo Java que contiene clases de java escritas para interactuar con las APIs de
NetBeans y un archivo especial (manifest file) que lo identifica como mdulo. Las
aplicaciones construidas a partir de mdulos pueden ser extendidas agregndole
nuevos mdulos. Debido a que los mdulos pueden ser desarrollados
independientemente, las aplicaciones basadas en la plataforma NetBeans pueden
ser extendidas fcilmente por otros desarrolladores de software.

Figura 32 Entorno del IDE Netbeans

Modularidad. Todas las funciones del IDE son provistas por mdulos. Cada mdulo
provee una funcin bien definida, tales como el soporte de Java, edicin, o soporte
para el sistema de control de versiones. NetBeans contiene todos los mdulos
necesarios para el desarrollo de aplicaciones Java en una sola descarga,
permitindole al usuario comenzar a trabajar inmediatamente.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

JCreator: JCreator es una herramienta de desarrollo para JAVA. Es rpido,


eficiente y confiable. Es la herramienta perfecta para los programadores de todos
los niveles

Figura 33 Entorno del IDE JCreator

Figura 34 Pestaas y resaltado de sintaxis en JCreator

JCreator posee una amplia gama de funcionalidades, tales como:

Gestin de proyectos
Plantillas de proyecto
Finalizacin de cdigo
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

interfaz de depuracin
Editor con resaltado de sintaxis
Asistentes
Interfaz de usuario totalmente personalizable

Con JCreator es posible compilar o ejecutar directamente el programa Java sin


necesidad de activar el documento principal. JCreator identifica automticamente el
archivo con el mtodo principal o el archivo html cargador del applet de Java.

Para el desarrollo de las actividades prcticas del presente curso se recomienda el


empleo de JCreator (versin LE).

Para realizar la instalacin del JCreator es necesario descargarlo desde la pgina


http://www.jcreator.org/download.htm, all deber seleccionar el instalador
correspondiente a su sistema operativo y hacer clic en el enlace de descarga.

Figura 35 Descarga del Instalador de JCreator

Leccin 20 Compilacin y ejecucin

Empleando el IDE JCreator se tiene acceso a las herramientas de compilacin y


ejecucin de un programa en JAVA, a continuacin se presenta la ubicacin de
dichas herramientas en el entorno del IDE:

20.1 Compilacin

Al emplear la herramienta de compilacin, JCreator hace el llamado al compilador


de JAVA ejecutando el programa javac.exe.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Figura 36 Acceso a la herramienta de compilacin en JCreator

En caso de presentarse errores durante la compilacin, el recuadro de la derecha


presentar el mensaje de error generado indicando el nmero de fila
correspondiente. Si el programa es compilado efectivamente, el recuadro enunciar
Process completed.

20.2 Ejecucin

Una vez compilado el programa en JAVA, se genera un nuevo archivo en el


directorio original con la extensin .class, el cual puede ser interpretado ejecutando
el programa java.exe.

Figura 37 Acceso a la herramienta de ejecucin en JCreator

Los mensajes de salida producidos por la ejecucin del programa sern


visualizados en el recuadro de la derecha (General output).
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

CAPTULO 5 Algoritmos bsicos

En este captulo se revisan los fundamentos geomtricos y matemticos a partir de


los cuales se generan los algoritmos que dibujan primitivas grficas como lneas,
circunferencias y arcos. Para su desarrollo se utiliz el captulo correspondiente del
texto de Claudio Delrieux y se complementa con la codificacin en Java de los
algoritmos.

Es muy difcil escoger un conjunto de primitivas grficas que sea adecuado para la
representacin de todo tipo de entidades grficas. Sin embargo, el siguiente
subconjunto resulta suficiente en la prctica:

Puntos: Se especifican a partir de su localizacin y color. Su discretizacin es


directa, como se mencion con anterioridad.

Segmentos de recta: Son esenciales para la mayor parte de las entidades. Se


especifican a partir de un par de puntos que representan sus extremos.

Circunferencias: En algunos casos representar entidades curvadas con


segmentos poligonales puede ser inadecuado o costoso, por lo que en la prcticas
las circunferencias o crculos se adoptan como primitivas. Se especifican con la
posicin de su centro y su radio.

Polgonos: Son indispensables para representar entidades slidas. Se representan


a partir de la secuencia de puntos que determina la poligonal de su permetro.

Leccin 21 Especificacin de una discretizacin

En el momento de escoger un mtodo de discretizacin para una primitiva grfica,


es indispensable contar con criterios que permitan evaluar y comparar las ventajas
y desventajas de las distintas alternativas. Entre todas las especificaciones
posibles, podemos mencionar las siguientes:

Apariencia: Es la especificacin ms obvia, aunque no es fcil describirla en


trminos formales. Normalmente se espera que un segmento de recta tenga una
apariencia recta ms all de que se hallan escogido los pixels matemticamente
ms adecuados. Tampoco debe tener discontinuidades. Debe pasar por la
discretizacin del primer y ltimo punto del segmento. Debe ser uniforme, etc.

Simetra e invariancia geomtrica: Esta especificacin se refiere a que un


mtodo de discretizacin debe producir resultados equivalentes si se modifican
algunas propiedades geomtricas de la primitiva que se est discretizando. Por
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

ejemplo, la discretizacin de un segmento no debe variar si dicho segmento se


traslada a otra localizacin en el espacio, o si es rotado, etc.

Simplicidad y velocidad de cmputo: Como los mtodos tradicionales de


discretizacin de primitivas se desarrollaron hace tres dcadas, en momentos en
que las posibilidades del hardware y software eran muy limitadas, los resultados
eran muy sensibles al uso de memoria u operaciones aritmticas complejas. Por lo
tanto, los mtodos tienden a no depender de estructuras complejas y a ser
directamente implementables en hardware especfico de baja complejidad.

21.1 Mtodos de discretizacin

Dada una primitiva grfica a discretizar, debemos encontrar los pixeles que la
representen de la manera ms correcta posible. Para ello, lo ms adecuado es
caracterizar matemticamente a dicha primitiva, de modo que su discretizacin
pueda efectuarse en forma sencilla. Entre los diversos mtodos que pueden
plantearse destacamos los dos siguientes:

Evaluar su ecuacin diferencial a diferencias finitas: Este mtodo, denominado


DDA (discrete diference analyzer) consiste en plantear la ecuacin diferencial de la
primitiva a discretizar, y luego evaluar dicha expresin a intervalos adecuados.

Anlisis del error: Estos mtodos fueron desarrollados por Bressenham y se


basan en analizar, dado un pixel que pertenece a la discretizacin de la primitiva,
cul es el prximo pixel que minimiza una determinada expresin que evala el
error que comete la discretizacin.

Leccin 22 Segmentos de recta

El anlisis de los mtodos de discretizacin de rectas parte de considerar el


comportamiento esperado en determinados casos particulares. Dichos casos
surgen de suposiciones especficas que simplifican el problema, pero que al mismo
tiempo se pueden generalizar a todos los dems casos por medio de simetras.
Dado un segmento de recta que va de (x0; y0) a (x1; y1), se supone que:

x = (x1 - x0 ) 0,
y = (y1 - y0 ) 0, y
x y.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Esto equivale a trabajar en el octavo del espacio de pantalla sombreado en la


Figura 38, donde el origen es el pixel que corresponde a la discretizacin del punto
(x0;y0) y la zona sombreada a los lugares donde puede ubicarse el punto (x1;y1 ).

Figura 38 Espacio designado para caracterizar la discretizacin de rectas

22.1 Segmentos de recta DDA

Como ya se mencion, los mtodos DDA evalan la ecuacin diferencial de la


primitiva a intervalos finitos. En el caso particular de los segmentos de recta, la
ecuacin diferencial es:

El mtodo busca encontrar una secuencia de n + 1 puntos tales que (x0;y0) =


(x0;y0); (x1;y1); (xn;yn) = (x1;y1). La discretizacin de cada uno de ellos son los
pixeles de la discretizacin del segmento. Esta propiedad, si bien es trivial, es de
gran importancia porque determina que la discretizacin de un segmento de recta
es invariante frente a transformaciones afines. Esto significa que es equivalente
transformar los extremos del segmento y discretizar el segmento transformado, o
discretizar primero y transformar cada punto obtenido. Sin embargo, la primera
alternativa es mucho ms eficiente.

Dada la ecuacin diferencial y un incremento finito arbitrario , podemos


pasar de un pixel dado de la secuencia al siguiente por medio de la expresin

determina la frecuencia de muestreo del segmento. Un valor muy pequeo


determina que muchas muestras producirn puntos que sern discretizados al
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

mismo pixel. Por el contrario, un valor muy grande determinara que el segmento
aparezca punteado en vez de ser continuo como corresponde. Un valor prctico
es elegir x = 1 y por lo tanto n = x, es decir, la discretizacin tiene tantos pixeles
como longitud tiene el segmento en la variable que ms vara (ms uno, dado que
la secuencia tiene n + 1 puntos). Al mismo tiempo es fcil ver que

En la Figura 39 es posible ver el resultado de discretizar un segmento particular por


el mtodo DDA. Observese que los puntos extremos (x0; y0) a (x1;y1) son en
efecto puntos y por lo tanto estn ubicados en cualquier lugar dentro del pixel que
corresponde a su discretizacin.

Figura 39 Discretizacin de un segmento de recta con DDA

Un algoritmo sencillo escrito en lenguaje Java que computa la discretizacin de un


segmento de recta por el mtodo DDA se muestra en la Figura 40. Obsrvese que
se computan las variables en punto flotante, y que adems se requiere una divisin
en punto flotante que corresponde al clculo de m.

Un pequeo parntesis para explicar algunas sentencias que pueden causar


dudas:

1. Sobre el parmetro Graphics g (lnea 26), corresponde al contexto grfico de


la ventana (algo as como un lienzo) sobre el cual se dibuja.
2. La llamada al mtodo setColor (lnea 34) permite modificar el color actual
con el cual se est dibujando, se toma el color como un objeto de tipo Color
que puede ser de los preterminados de Java o creado a partir de los
parmetros r, g, b. Esta llamada al mtodo setColor permite modificar el
color del lpiz que dibuja sobre el contexto grfico.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Figura 40 Codificacin en Java del algoritmo DDA de dibujo de lneas

3. Java no tiene una sentencia bsica para dibujar puntos (pixeles), en este
caso se utiliza la sentencia g.drawRect (lnea 35) para dibujar un rectngulo
con un ancho y alto de 0, que en su ejecucin se traduce a pintar un nico
pixel ubicado en el punto enviado como parmetro.
4. En la misma sentencia g.drawRect (lnea 35) se utiliza el casting a enteros
para lograr la discretizacin de las coordenadas flotantes.

La ejecucin del algoritmo dara como resultado algo similar a lo mostrado en la


Figura 41 para 3 lneas diferentes.

Para poder discretizar un segmento de recta


en cualquiera de las posibilidades es
necesario considerar las simetras que se
aplican. Si por ejemplo no se cumple que y =
(y1 - y0) 0, entonces hay que considerar
pendientes negativas (simetra A), caso que el
algoritmo de la Figura 40 realiza
automticamente.

En cambio, si x = (x1 - x0 ) 0, entonces es


Figura 41 Ejecucin del algoritmo DDA necesario decrementar a x en el ciclo e iterar
en Java mientras no sea menor que x1 (simetra B).

Por ltimo, si no se cumple que x y, entonces es necesario intercambiar los


roles de las variables x e y (simetra C). Cualquier combinacin de situaciones se
puede resolver con combinaciones de simetras (ver Figura 42).
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Figura 42 Simetras para discretizar segmentos de recta

22.2 Segmentos de rectas por Bressenham

En el algoritmo DDA para segmentos de recta es necesario computar sumas entre


las variables en punto flotante, y adems se requiere una divisin en punto flotante
para computar la pendiente. El mrito del algoritmo que vamos a presentar consiste
en que todas las operaciones se realizan en aritmtica entera por medio de
operaciones sencillas, y por lo tanto, su ejecucin es ms rpida y econmica, y es
de fcil implementacin con hardware especfico.

El punto de partida del anlisis es el siguiente. Si la discretizacin de los puntos


extremos del segmento debe pertenecer a la discretizacin del segmento, entonces
es conveniente efectuar la llamada al algoritmo luego de discretizar los extremos.
Esto significa que (x0; y0) y (x1; y1),y por lo tanto x y y son enteros.

Luego, si p es un pixel que pertenece a


la discretizacin del segmento,
entonces en las condiciones
particulares mencionadas, el prximo
pixel solamente puede ser el ubicado a
la derecha (E o hacia el este), o el
ubicado en diagonal hacia la derecha y
hacia abajo (D o en diagonal) como se
Figura 43 Si p pertenece a la discretizacin el
muestra en la Figura 43.
prximo punto ser E o D

La decisin de ir hacia el paso E o D se toma en funcin del error que se comete en


cada caso. En este algoritmo se considera que el error es la distancia entre el
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

centro del pixel elegido y el segmento de recta, medida en direccin del eje Y
positivo del espacio de pantalla (es decir, hacia abajo). Si el error en p fuese cero,
entonces al ir hacia E el error pasa a ser m (la pendiente del segmento), y en D el
error pasa a ser m - 1 (ver Figura 44).

Figura 44 Error al desplazarse en E Figura 45 Eleccin del prximo pixel

En general, si en p el error es e, la actualizacin del error es:

Paso a E : e = e + m
Paso a D : e = e + m 1

Por lo tanto, la eleccin del paso E o D depende de que el valor absoluto de e+m
sea o no menor que el valor absoluto de e+m-1. Expresado de otra manera, sea e
el error en un determinado pixel. Si e +m> 0.5 entonces el segmento de recta pasa
ms cerca del pixel D, y si no, pasa ms cerca del pixel E (ver Figura 45).

Una de las economas de cmputo del mtodo proviene de poder evaluar el error
preguntando por cero. Es fcil ver que si se inicializa el error en e = m 0.5
entonces en cada paso hay que chequear e >0 para elegir D. La otra economa
proviene de realizar manipulaciones algebraicas para efectuar un cmputo
equivalente pero en aritmtica entera. Como se evala el error por cero, multiplicar
el error por una constante no afecta el resultado. Por lo tanto, multiplicamos el error
por 2x. A partir de dicho cambio, se constatan las siguientes igualdades:

y
e0 2x 0.5 2y x
x

Paso a E : e = e+2y
Paso a D: e = e+2(y-x)
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

De esta manera todas las operaciones se efectan en aritmtica entera, con su


correspondiente agilizacin del tiempo de procesamiento.

Figura 46 Algoritmo de Bressenham para segmentos de recta

La implementacin del algoritmo de Bressenham para segmentos de recta se


muestra en la Figura 46. Teniendo en cuenta que los productos por 2 en aritmtica
entera se efectan con un desplazamiento a izquierda, es posible observar que el
mismo utiliza operaciones elementales e implementables con hardware especfico
muy sencillo.

Leccin 23 Discretizacin de circunferencias

Como en el caso de los segmentos de recta, en la discretizacin de circunferencias


o crculos es posible trabajar un slo segmento de la circunferencia y se obtienen
las dems por simetra. Igualmente se dispone de algoritmos DDA y de
Bressenham para el dibujo de circunferencias. En este aparte se mostrar una
adaptacin del algoritmo DDA a partir de la ecuacin de la circunferencia, tomado
de la pgina internet de Roberto Albornoz.

Para poder realizar el dibujo de la circunferencia usaremos las ecuaciones de la


circunferencia en coordenadas polares que son:

x r * cos

y r * sen
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Estas ecuaciones sern las que ocuparemos para calcular cada punto (x,y) del
crculo, donde el r ser obviamente el radio de crculo y ser el ngulo que forma
el radio con la parte positiva del eje x. En forma grfica sera as:

Figura 47 Circunferencia con coordenadas polares

El ngulo deber estar en radianes ya que las funciones de seno y coseno que
incluye Java, trabajan con los ngulos en radianes. La frmula para transformar
grados a radianes es la siguiente:

gra dos *
radianes
180

Entonces para dibujar el crculo de un radio determinado, solamente tenemos que


hacer un ciclo desde 0 hasta 360, pero con incrementos pequeos, calcular cada
punto con las ecuaciones en coordenadas polares e ir dibujando cada punto. El
ciclo en vez de ir de 0 a 360 (ngulos en grados) ir de 0 a 6.28
(360*3.14/180=6.28) ya que el ngulo debe estar en radianes.

Como dijimos el ciclo de 0 a 6.28 debe hacerse con incrementos pequeos, no


contando de uno en uno, ya que para un crculo de radio muy grande, podran
aparecer huecos entre un punto y el siguiente, por lo tanto tenemos que usar un
incremento fraccionario. El valor 0.005 produce buenos resultados. Dibujar el
crculo punto a punto es una tarea un poco lenta, debido a que se debe calcular en
cada punto el seno y el coseno del ngulo, y estas funcionas son muy lentas. Para
solucionar esto se pueden crear tablas predefinidas o pre-calculadas. En la
siguiente figura se muestra el cdigo en Java que permitira dibujar el crculo en
una ventana.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Figura 48 Cdigo en Java para el dibujo de circunferencias

Ntese que al calcular las


coordenadas x e y, estamos
sumndoles las coordenadas cx e
cy. Esto se hace para trasladar el
centro del crculo a cualquier punto
que queramos. De esta forma,
para dibujar un crculo solamente
es necesario especificar las
coordenadas del centro (cx, cy), el
radio, el color del crculo y el
contexto grfico.
Figura 49 Resultado de la ejecucin del algoritmo
dibujo de circunferencias

Leccin 24 Dibujo de polgonos

Se considera un polgono una figura cerrada, formada a partir de varias lneas.


Para la discretizacin de polgonos se considerarn 2 tipos de polgonos: los
irregulares y los regulares, en concordancia con lo mostrado por Steven R
Davidson en su curso de grficos disponible en internet.

24.1 Polgonos irregulares

La graficacin de polgonos irregulares se realiza a partir de un conjunto de puntos


que se unen secuencialmente, el polgono se cierra al unir el primer y ltimo
puntos. A continuacin se muestra el cdigo Java que dibujara un polgono
irregular a partir de un vector de elementos de tipo Punto y el correspondiente
nmero de puntos.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Figura 50 Cdigo en java para el dibujo de polgonos

Cabe recordar que en Java, al igual que


en C, el ndice de los vectores inicia en
0. Por tanto, la primera lnea se dibuja
desde el primer punto (ndice 0) hasta el
segundo punto (ndice 1), contina del
segundo al tercero (ndice 2) y as
sucesivamente, hasta dibujar la lnea
del penltimo punto (ndice N-2) hasta
el ltimo punto del vector (ndice N-1).
Al finalizar el ciclo, dibuja la lnea de
cierre del polgono entre el ltimo punto
Figura 51 Resultado de la ejecucin del (ndice N-1) y el primero (ndice 0).
algoritmo de dibujo de Polgonos

Como se podr deducir del cdigo el objeto Punto incluye las coordenadas x e y de
un punto en el plano cartesiano.

24.2 Polgonos regulares

Un polgono regular se compone de aristas/lados de igual longitud. Esto implica


que el ngulo entre cada arista contigua es el mismo. Si trazamos un segmento del
centro a un vrtice y otro segmento del centro a otro vrtice contiguo, entonces el
ngulo entre estos dos segmentos es un divisor de 2 = 360. En otras palabras,
cada ngulo mencionado es inversamente proporcional a la cantidad de lados del
polgono regular. Podemos usar la siguiente frmula:

= 2 / N, donde es el ngulo, y N es la cantidad de lados

Crearemos polgonos regulares en base a una circunferencia que circunscribe


nuestro polgono regular. Esto implica, que el centro de la circunferencia coincide
con el centro geomtrico de cualquier polgono regular. Para esto, necesitamos
usar algunas funciones trigonomtricas, junto con el ngulo ya calculado. El paso
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

principal es averiguar la coordenada del siguiente vrtice de nuestro polgono.


Usaremos las siguientes frmulas:

x i = cx + r * cos( i* )
y i = cy + r * sen( i* )
donde:
i = 0,1,2,...,N-1,
r es el radio de la circunferencia, y
c = (cx, cy) es la coordenada del centro geomtrico de la circunferencia y del
polgono.

Al agregar el centro a nuestra frmula, conseguimos mover el centro geomtrico


del origen (0,0) al que nosotros deseemos. En la Figura 52 se muestra el cdigo
que generara los polgonos regulares.

Figura 52 Cdigo en java para dibujar polgonos regulares

Los parmetros de entra para el mtodo especifican el nmero de lados del


polgono (N), el punto centro de la circunferencia (centro), el radio de la
circunferencia (radio), el contexto grfico (g) y el color.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Observe que es necesario hacer un


proceso de conversin a entero del dato
resultante en la multiplicacin del coseno
del ngulo por el radio (lneas 46 y 47),
ya que las coordenadas de los puntos se
deben expresar como datos enteros. Los
datos as calculados se utilizan en la
conformacin de cada vrtice del
polgono (lnea 48). Finalmente, una vez
obtenidas las coordenadas de todos los
vrtices del polgono se realiza la llamada
al proceso de dibujarPolgonos explicado
en la seccin anterior (lnea 50). Figura 53 Resultado de la ejecucin del
algoritmo para dibujar polgonos regulares

Leccin 25 Llenado de reas

Si bien existen diversos mtodos, aqu presentaremos el ms econmico y


difundido, que se basa en encontrar la interseccin de todos los lados del polgono
con cada lnea de barrido (a y constante), por lo que el mtodo se denomina
conversin scan del polgono. Este mtodo es de gran importancia porque se
generaliza a una clase de algoritmos denominados scan-line para resolver
determinados problemas de iluminacin y sombreado en tres dimensiones.

Todo polgono plano puede descomponerse en tringulos. Por lo tanto el tringulo


ser la base del anlisis de la conversin scan de polgonos en general. Para
computarla es necesario dimensionar dos arreglos auxiliares de enteros minx,
maxx que para cada lnea de barrido almacenarn el menor y mayor x
respectivamente.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Figura 54 Dibujo scan de un polgono

1. Inicializar minx a infinito y maxx a menos infinito.


2. Discretizar cada arista del tringulo (con DDA o Bressenham) reemplazando
la sentencia de dibujado por
if (x>maxx[y]) maxx[y]=x;
if (x<minx[y]) minx[y]=x;
3. Para cada y activo, graficar una lnea de minx[y] a maxx[y].

CAPTULO 6 Transformaciones

Naturalmente, as como se desean dibujar grficos, tambin se desea moverlos,


rotarlos, cambiar su tamao, etc. En esta seccin se presentan los principales
fundamentos matemticos que subyacen al proceso de transformacin de los
grficos en dos dimensiones, a partir de lo mostrado por el euitmt WWW team de la
Universidad de Oviedo. Se espera que el estudiante en su proceso de
profundizacin realice los algoritmos que permitan hacer estas transformaciones.

Una de las mayores virtudes de los grficos generados por ordenador es la


facilidad con se pueden realizar algunas modificaciones sobre las imgenes. Un
gerente puede cambiar la escala de las grficas de un informe. Un arquitecto puede
ver un edificio desde distintos puntos de vista. Un cartgrafo puede cambiar la
escala de un mapa. Un animador puede modificar la posicin de un personaje.
Estos cambios son fciles de realizar porque la imagen grfica ha sido codificada
en forma de nmeros y almacenada en el interior del ordenador. Los nmeros son
susceptibles a las operaciones matemticas denominadas transformaciones.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Las transformaciones permiten alterar de una forma uniforme toda la imagen. Es un


hecho que a veces es ms fcil modificar toda la imagen que una porcin de ella.
Esto supone un complemento muy til para las tcnicas de dibujo manual, donde
es normalmente ms fcil modificar una pequea porcin del dibujo que crear un
dibujo completamente nuevo.

Es esta seccin se vern transformaciones geomtricas como el cambio de


escala, la traslacin y la rotacin, como se expresan de una forma sencilla
mediante multiplicaciones de matrices y se introducirn las coordenadas
homogneas con el fin de tratar de una manera uniforme las transformaciones y
como anticipo de las transformaciones producidas por la perspectiva en los
modelos tridimensionales.

Leccin 26 Breve repaso sobre matrices

Las imgenes grficas que se han generado estn compuestas por un conjunto de
segmentos que estn representados por las coordenadas de sus extremos.
Algunos cambios en la imagen pueden ser fcilmente realizados mediante la
aplicacin de algunas operaciones matemticas sobre estas coordenadas. Antes
de ver algunas de las posibles transformaciones, es necesario repasar algunas de
las herramientas matemticas que se necesitarn, como la multiplicacin de
matrices.

Para nuestro propsito, consideraremos que una matriz es un conjunto n-


dimensional de nmeros, por ejemplo:

son cuatro matrices diferentes.

Supongamos que se define la matriz A como:

Entonces el elemento situado en la segundo fila y la tercera columna ser A[2][3] y


tendr un valor de 6.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

La operacin matricial que ms se emplear ser la multiplicacin de matrices. La


multiplicacin de matrices es algo ms complicada que la simple multiplicacin de
dos nmeros; supone varios productos sencillos y sumas de los elementos de la
matriz. No todas las parejas de matrices pueden ser multiplicadas. Se pueden
multiplicar dos matrices A y B si el nmero de columnas de la primera matriz
A es igual al nmero de filas de la segunda matriz B. Por ejemplo, si
escogemos como matriz A la ltima que hemos visto y como matriz B la siguiente:

Entonces podemos multiplicar A por B porque la primera tiene tres columnas y la


segunda tres filas. Al contrario que la multiplicacin de nmeros, la multiplicacin
de matrices no es conmutativa, es decir, aunque podemos multiplicar A por B no
podemos multiplicar B por A, por que B tiene slo dos columnas que no se
corresponden con las tres filas de A. Cuando multiplicamos dos matrices se
obtiene como resultado otra matriz. Esta matriz producto tendr el mismo
nmero de filas que la primera de las matrices que se multiplican y el mismo
nmero de columnas que la segunda, es decir, a partir del ejemplo, la multiplicacin
de la matriz A3x3 con la matriz B3x2 da como resultado la matriz C3x2.

Los elementos de la matriz producto C se expresan en funcin de los elementos de


las matrices A por B mediante la siguiente frmula:

En nuestro caso particular de C = A B

La multiplicacin de matrices es una operacin asociativa. Esto significa que si


tenemos varias matrices para multiplicar a la vez, no importa cuales multipliquemos
primero. De forma matemtica: A(BC) = (AB) C

Esta es una propiedad muy til ya que permitir combinas varias transformaciones
grficas en una sola transformacin, produciendo como resultado unos clculos
ms eficientes.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Existe un conjunto de matrices que cuando multiplican a otra matriz, la reproducen.


Por esta razn reciben el nombre de matrices identidad. Son matrices cuadradas
(tienen el mismo nmero de columnas y de filas) con todos los elementos 0 excepto
los elementos de la diagonal principal, que valen todos 1. Por ejemplo

De forma matemtica A = AI

Leccin 27 Cambios de escala

Cmo se aplica todo esto a los grficos? Bueno, consideremos un punto P1=[x1
y1] como una matriz de 1x2. Si la multiplicamos por una matriz T2x2, obtendremos
otra matriz que puede ser interpretada como otro punto.

Por tanto, la matriz T es una aplicacin entre el punto original P1 y el nuevo punto
P2. Si suponemos la imagen compuesta por los vrtices de un polgono. Qu
pasar si transformamos cada uno de los puntos mediante una multiplicacin por
una matriz T y dibujamos el resultado? Qu aspecto tendr esta nueva imagen?
La respuesta, por supuesto, depende de los elementos de la matriz T. Si, por
ejemplo, escogemos la matriz identidad entonces la imagen no se ver alterada.

Sin embargo, si escogemos la matriz

entonces

Cada una de las nuevas coordenadas x tiene el doble de valor que las antiguas.
Las lneas horizontales sern dos veces ms largas en la nueva imagen. La nueva
imagen tendr la misma altura, pero parecer que la hemos estirado hasta alcanzar
el doble del ancho original.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

antes de la transformacin despus de la transformacin

En general, las transformaciones de la forma

Cambian el tamao y la proporcin de la imagen. Se denominan transformaciones


de escalado. Ex es el factor de escala para la coordenada x y Ey es de la
coordenada y.

Leccin 28 Rotacin

La siguiente transformacin grfica que vamos a ver es la rotacin. Para introducir


esta transformacin recordaremos brevemente algunos conceptos trigonomtricos.
Sea un punto p1=(x1, y1) y lo giramos alrededor del origen un ngulo para pasar
a una nueva posicin p2=(x2, y2). Queremos encontrar la transformacin que
convierte (x1, y1) en (x2, y2). Pero, antes de comprobar si alguna transformacin
es la adecuada, debemos saber primero que (x2, y2) debe escribirse en funcin de
(x1, y1) y . Para esto es necesario recordar las razones trigonomtricas de seno y
coseno.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

A la vista de esta figura sabemos que

Es importante sealar que cuando la longitud del segmento es la unidad

Tambin emplearemos las siguientes relaciones trigonomtricas para determinar


como gira un punto:

Ahora estamos listos ya para determinar la rotacin de un punto alrededor del


origen.

A la vista de esta figura tenemos:

Donde L es la distancia del punto al origen de coordenadas. Por otro lado:

Que nos lleva a

De forma anloga:
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Dando

A la vista de estas ecuaciones podemos imaginar una matriz que relacione las
coordenadas del punto original y del punto girado:

As la matriz de transformacin para una rotacin en sentido contrario a las agujas


del reloj de ngulo alrededor del origen es

Para una rotacin en el sentido de las agujas del reloj, basta sustituir en la
expresin anterior el valor del ngulo por - . As nos queda

Leccin 29 Coordenadas homogneas y traslacin

Supongamos que necesitamos realizar un giro alrededor de un punto que no es el


origen. Si fusemos capaces de trasladar toda la imagen de un punto a otro de la
pantalla, podramos realizar este giro moviendo primero la imagen hasta que el
centro de rotacin coincida con el origen, luego realizamos la rotacin y, por ltimo,
devolvemos la imagen a su posicin original.

Desplazar la imagen recibe el nombre de traslacin. Se realiza de una forma


sencilla mediante la suma a cada punto de la cantidad que vamos a mover la
imagen.

En general, con el fin de trasladar un imagen (Tx, Ty), cada punto (x1, y1) se
convierte en uno nuevo (x2, y2) donde
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Desafortunadamente, esta forma de describir la traslacin no hace uso de matrices,


por lo tanto no podra ser combinada con las otras transformaciones mediante una
simple multiplicacin de matrices.

Tal combinacin sera deseable; por ejemplo, hemos visto que la rotacin alrededor
de un punto que no sea el origen puede realizarse mediante una traslacin, una
rotacin u otra traslacin. Sera deseable combinar estas tres transformaciones en
una sola transformacin por motivos de eficacia y elegancia. Una forma de hacer
esto es emplear matrices 3x3 en vez de matrices 2x2, introduciendo una
coordenada auxiliar w. Este mtodo recibe el nombre de coordenadas
homogneas. En estas coordenadas, los puntos estn definidos por tres
coordenadas y no por dos. As un punto (x, y) estar representado por la tripleta
(xw, yw, w). Las coordenadas x e y se pueden recuperar fcilmente dividiendo los
dos primeros nmeros por el tercero respectivamente. No emplearemos la
coordenada w hasta que no veamos las transformaciones tridimensionales de
perspectiva. En dos dimensiones su valor suele ser 1 para simplificar. Sin embargo,
lo veremos de forma general como anticipo de las transformaciones
tridimensionales.

En coordenadas homogneas la matriz de cambio de escala

se convierte en

Si aplicamos esta matriz a un punto (xw, yw, w) obtenemos

Si dividimos ahora por el tercer valor w tenemos (Exx, Eyy) que es el punto correcto
cambiado de escala.

En el caso de la matriz de rotacin en sentido anti-horario

Se convierte, usando coordenadas homogneas, en:


UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Si aplicamos esta matriz a un punto (xw, yw, w) obtenemos

Para dar el punto correctamente rotado

La matriz de transformacin para una traslacin Tx, Ty en coordenadas


homogneas es

Para comprobar que esto es as apliquemos la matriz a un punto genrico

Que nos da el punto trasladado

Leccin 30 Rotacin alrededor de un punto

Determinemos ahora la matriz de transformacin para la rotacin en sentido


antihorario alrededor del punto (xC, yC).

Haremos esta transformacin en tres pasos. Primero trasladaremos el punto (xC,


yC) al origen, luego haremos la rotacin alrededor del origen y, por ltimo,
devolveremos el centro de rotacin a su posicin original.

La traslacin que desplaza al punto (xC, yC) al origen es


UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

La rotacin es

Y la traslacin que devuelve al centro de rotacin a su posicin es

Para transformar un punto podemos realizar la siguiente multiplicacin

Pero, teniendo en cuenta la propiedad asociativa de la multiplicacin de matrices,


podemos multiplicar todas las transformaciones primero para obtener la matriz
global de transformacin

Cabe destacar que esta matriz se puede formar tambin mediante una rotacin
inicial de ngulo y una traslacin definida por los valores contenidos en la tercera
fila.

30.1 Otras transformaciones

Las tres transformaciones de cambio de escala, rotacin y traslacin son las ms


tiles y las ms usadas. Son tambin posibles otras transformaciones. Dado que
una matriz 2x2 cualquiera
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Puede convertirse en una matriz 3x3 en coordenadas homogneas como

Algunas de estas transformaciones como matrices 2x2:

-1 0
0 1 Reflexin respecto al eje y

1 0
0 -1 Reflexin respecto al eje x

-1 0
0 -1 Reflexin respecto al origen

0 1
1 0 Reflexin respecto a la recta y=x

0 -1
-1 0 Reflexin respecto a la recta y=-x

1 a
0 1 Deformacin en el eje y

1 0
b 1 Deformacin en el eje x

Las primeras tres reflexiones son simples cambios de escala pero con factores
negativos. Las simetras respecto a las rectas y=x e y=-x pueden realizarse
mediante un cambio de escale y un giro posterior. Es posible realizar las
deformaciones mediante una secuencia de rotaciones y cambios de escala, aunque
es mucho ms fcil aplicar la matriz resultante. De igual forma se pueden construir
transformaciones de cambio de escala y rotacin a partir de las deformaciones.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Escuela de Ciencias Bsicas, Tecnologa e Ingeniera
Ingeniera de Sistemas Mdulo del curso Computacin Grfica

Fuentes documentales unidad 2

ALBORNOZ Roberto. Programacin grfica en lenguaje C. [En lnea]


http://www.geocities.com/programacion_grafica/prog_graf.htm
Fecha de consulta: Septiembre de 2005.

DAVIDSON, Steven. Curso de grficos con clase. [En lnea]


http://graficos.conclase.net/curso/index.php
Fecha de consulta: Diciembre de 2005. steven@conclase.net

DELRIEUX, Claudio. Introduccin a la computacin grfica. [En lnea]


http://www.dc.uba.ar/people/materias/cgr/util.htm. Universidad Nacional del Sur.
Departamento de Ingeniera elctrica. Claudio@acm.org.

EUITMT WWW TEAM. Dibujo asistido por ordenador. Transformaciones 2 y 3 D.


[En lnea] http://www.mieres.uniovi.es/egi/dao/apuntes/. Universidad de Oviedo.
Campus Mieres. Fecha de consulta: Octubre de 2005. ltima modificacin: 9 de
Julio de 1999 - 13:36:26

También podría gustarte