benemérita universidad autónoma de pueblagca/notas2005.pdfgraficado por computadora, fcc buap...

60
Benemérita Universidad Autónoma de Puebla Facultad de Ciencias de la Computación “Graficado por Computadora” Notas de Curso Licenciatura en Ciencias de la Computación M. C. Graciano Cruz Almanza Puebla, Pue. Agosto, 2005 1

Upload: vonhi

Post on 29-Sep-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Benemérita Universidad Autónoma de Puebla

Facultad de Ciencias de la Computación

“Graficado por Computadora”

Notas de Curso

Licenciatura en Ciencias de la Computación

M. C. Graciano Cruz Almanza

Puebla, Pue. Agosto, 2005

1

Graficado por Computadora, FCC BUAP _________________________________________________________________________

INDICE

CAPITULO I._ INTRODUCCIÓN A LA GRAFICACIÓN

1.1 Importancia del graficado por computadora. 1.2 Aplicaciones y tipos de gráficas. 1.3 Dispositivos de representación.

CAPITULO II._ GRAFICAS EN 2 DIMENSIONES

2.1 Primitivas de graficado. 2.2 Transformaciones en dos dimensiones.

2.3 Geometría proyectiva. 2.4 Coordenadas homogéneas. 2.5 Transformaciones con coordenadas homogéneas. 2.6 Ventanas y recorte. 2.7 Ejemplos.

CAPITULO III._ GRAFICAS EN 3 DIMENSIONES

3.1 Transformaciones. 3.2 Geometría proyectiva en el espacio. 3.3 Coordenadas homogéneas en el espacio. 3.4 Transformaciones con coordenadas homogéneas.

3.5 Proyección paralela y perspectiva. 3.6 Líneas y caras ocultas. 3.7 Algoritmos de iluminación. 3.8 Ejemplos. BIBLIOGRAFÍA APÉNDICE A ._ IMPRESORAS

2

Graficado por Computadora, FCC BUAP _________________________________________________________________________

CAPITULO I

INTRODUCCIÓN A LA GRAFICACIÓN

1.1 Importancia del Graficado por Computadora.

En el desarrollo de sistemas software es muy importante hacer que la salida deje los resultados obtenidos en forma "entendible", en donde entendible quiere decir que el conjunto de datos que se muestran al usuario en el dispositivo de salida tengan sentido. Este sentido normalmente lo dan los formatos. Los formatos utilizados históricamente van desde tipos numéricos, con precisión específica, tablas, monetarios, hasta llegar a las gráficas como el pastel, las barras, polígonos, etc. Podemos decir que la graficación, también conocida como graficado por computadora, es la representación pictórica de la información en un dispositivo de salida a través de una computadora.

La importancia de la graficación no es obtener un conjunto de gráficas "bonitas", sino proporcionar una herramienta poderosa con la cual se obtenga información más clara. Es decir, que a partir de un conjunto de datos ( tablas ), se puedan obtener dibujos del comportamiento general de dichos datos. Así se tendrá una mejor visión del comportamiento de la salida y por lo tanto se tiene una mejor interpretación de los datos. La interpretación adecuada de los datos de salida permite al usuario, que normalmente no es un especialista en computación, la toma rápida de decisiones basándose en el comportamiento general de la información. Por ejemplo, el gerente de una empresa desea ver el desarrollo de las ganancias en el año, es decir el comportamiento de estos datos a través de los meses y no desea ver los detalles como sería ver las ganancias día a día. Finalmente las gráficas deben ser confiables, mostrar el comportamiento general de los datos, permitir decisiones rápidas y tener vista agradable para el usuario. Debemos remarcar que en este momento todos los sistemas software existentes incluyen algún tipo de gráfica que puede ser desde representación de los resultados hasta el mismo logotipo de la empresa.

3

Graficado por Computadora, FCC BUAP _________________________________________________________________________

1.2 Aplicaciones y tipos de Gráficas

El uso de la graficación en la actualidad se extiende a diversas áreas como la administración (gráficas de barras, de pastel, poligonales, etc.), la publicidad (logotipos, letreros, carteles, etc.), la industria (planos mecánicos, eléctricos, etc.), el arte ( geométrico, abstracto, etc.), el entretenimiento (caricaturas, películas, videojuegos, etc.), la educación (clases, cursos de capacitación, orientación vocacional, etc.) y la investigación (química, física, etc.) entre otras muchas.

Las gráficas se dividen en forma global en:

a) Gráficas Pasivas, donde el usuario no tiene control sobre la imagen. Las principales características son tener dibujos grandes , poco texto y muestran una idea principalmente. Ejemplos de gráficas pasivas son los carteles publicitarios, los comerciales, las películas, etc. b) Gráficas Interactivas, donde el usuario tiene control directo sobre la imagen y el proceso de graficado puede ser conversacional. Las principales características son tener dibujos medianos, texto opcional y muestran varias ideas. Ejemplos de gráficas interactivas son los videojuegos, sistemas de diseño, sistemas de información geográfica, etc. 1.3 Dispositivos de Representación Los dispositivos más utilizados para el despliegue de gráficas son el monitor, la impresora y el graficador, vea la figura 1.2. Otros dispositivos auxiliares para graficación son el ratón, el digitalizador, la pluma luminosa, etc.

Figura 1.2 Ejemplos de dispositivos monitor, impresora y graficador.

Estos dispositivos de despliegue varían en términos de tipo de comunicación, tamaño, precisión, aplicación y obviamente en sus costos.

4

Graficado por Computadora, FCC BUAP _________________________________________________________________________

El monitor es el dispositivo más utilizado por los usuarios para desplegar gráficas, este dispositivo contienen una pantalla que es el área de despliegue y tiene las siguientes características: tamaño (en pulgadas), número de puntos (resolución), número de colores por punto (colores), velocidad de despliegue (repintado), etc.

La impresora en los últimos años ha mejora mucho su calidad y su velocidad, lo

cual la ha elevado a un rango de utilidad muy alto. Es decir se usa para documentos, gráficos e incluso fotos. Algunas de sus características son: tipo de comunicación, número de puntos, colores, velocidad de impresión, etc. Ver el anexo A.

El graficador (también llamado plotter) es el dispositivo más utilizado en

aplicaciones CAD (Diseño Asistido por Computadora) debido a sus características particulares. Estas características permiten imprimir en papel de gran tamaño como planos arquitectónicos o planos eléctricos, hacer trazos continuos, utilizar diversos tipos de papel, utilizar varias plumas (colores), diversos grados de libertad, etc. En los últimos años han aparecido plotters de corte, que son graficadores que en lugar de tener una pluma, tienen una navaja y permiten hacer rótulos o avisos que pueden pegarse fácilmente a los autos, las puertas, etc., etc.

Para realizar trabajos gráficos de calidad es necesario contar con una pantalla que tenga 1024 * 1024 puntos como mínimo, o un graficador con paso de 0.001 de pulgada. Sin embargo, estos dispositivos son difíciles de adquirir dado su costo y su contrato de mantenimiento en instituciones de educación. Por lo pronto es suficiente con tener dispositivos de precisión media para poder mostrar los conceptos básicos a los alumnos.

La Facultad de Ciencias de la Computación de la BUAP, cuenta con equipo de cómputo de propósito general, el cual tiene pantalla de 800 * 600 puntos generalmente. Este equipo no es el óptimo, sin embargo, es suficiente para mostrar los conceptos en un curso de graficación a nivel licenciatura y poder desarrollar ejemplos ilustrativos.

La enseñanza del graficado por computadora tiene dos niveles: El nivel analista programador de sistemas gráficos y el nivel usuario de software comercial.

La mayoría de los profesionistas de otras disciplinas, como la Arquitectura, Ingeniería, Medicina, etc. Utilizan el nivel usuario de software comercial en sus áreas correspondientes. Esto es debido a que existe software de propósito específico en sus áreas. Por ejemplo, para el arquitecto existen sistemas software para el diseño de planos arquitectónicos que le permiten diseñar casas, presentar el diseño de los planos, una vista tridimensional de la casa, cantidades de material y hasta un costo estimado entre otras muchas cosas más.

El nivel de analista-programador es usado por los profesionales en Computación

(Licenciados o Ingenieros) como una base para el desarrollo de sistemas gráficos de una aplicación específica. Es decir se encarga del diseño e implementación de sistemas software especializado para resolver problemas específicos como los sistemas de diseño mecánico asistido por computadora, el diseño arquitectónico, etc., etc.

5

Graficado por Computadora, FCC BUAP _________________________________________________________________________

CAPITULO II

GRAFICAS EN DOS DIMENSIONES 2.1 Primitivas de Graficado

La unidad mínima de graficado es el punto, también llamado "pixel", y las líneas deben ser dibujadas sobre una pantalla de monitor como una sucesión de puntos muy cercanos de tal forma que para el ojo humano no haya separación alguna. Si se desea dibujar una letra por ejemplo, se usa una matriz de puntos con los pixeles adecuados encendidos.

Las computadoras facilitan al usuario dibujar puntos sobre la pantalla basándose en el uso de coordenadas cartesianas. De esta manera los usuarios utilizan parejas (x, y) para hacer referencia a un punto sobre la pantalla. Vea la figura 2.1. Normalmente el eje X corre de izquierda a derecha mientras que el eje Y corre de arriba hacia abajo. Note que el origen del sistema de coordenadas cartesiano está en la esquina superior izquierda.

X

Y

Figura 2.1 Sistema de coordenadas

Dada una pantalla, llamaremos "resolución", al núm

que pueden ser mostrados en un segmento dado. Una presolución de 100 puntos por pulgada, esto depende incrementa el número conforme pasan los años. Hay que ttiene un número finito de puntos tanto en el eje X, comresolución típica en una computadora personal es de 800dirección del eje X y 600 en dirección del eje Y.

En general las computadoras tienen un conjunto básigraficación, que son:

a) Inicialización de la pantalla en modo gráfico. b) Pintado en la pantalla de un punto.

La inicialización de la pantalla define el modo de

el caso de computadoras personales compatibles con IBmodos de operación:

de la pantalla

ero de puntos visibles distintos antalla típica puede tener una del modelo y obviamente se omar en cuenta que la pantalla o en el eje Y. Actualmente la *600 pixeles. Es decir 800 en

co de operaciones primitivas de

operación del dispositivo. En M, se tienen los siguientes

6

Graficado por Computadora, FCC BUAP _________________________________________________________________________

a) Modo texto ( 80 * 25 renglones ) b) Modo gráfico ( 640 * 480 puntos en 16 colores, es decir 4 bits ) c) Modo alta resolución ( 800 * 600 puntos con 8, 16 o 32 bits para colores )

El modo más conveniente es el de alta resolución, por lo tanto, será el utilizado en

estas notas para ejemplificar.

7

Graficado por Computadora, FCC BUAP _________________________________________________________________________

A continuación se da un ejemplo en lenguaje ensamblador ( normalmente se programa a este nivel por su velocidad ) para pintar un punto en la pantalla. ; ; PROGRAMA QUE ILUSTRA COMO PINTAR UN PUNTO EN ; PANTALLA GRAFICA DE ALTA RESOLUCION. ; ; REQUIERE TARJETA GRAFICA. ; STACK SEGMENT PARA STACK ; DEF. SEG. DE STACK DB 64 DUP ('MYSTACK ') STACK ENDS ; MYCODE SEGMENT PARA 'CODE' ; DEF. SEG. DE CODIGO MYPROC PROC FAR ; PROCEDIMIENTO ASSUME CS:MYCODE, SS:STACK INICIO: PUSH DS ; GUARDA REG. DS SUB AX, AX ; PONE CEROS EN AX PUSH AX ; GUARDA EN LA PILA ; ; CODIGO PARA PINTAR UN PUNTO EN LAS COORDENADAS (50,50) ; MOV AH, 00 ; MODO DE VISUALIZAR MOV AL, 06 ; PARA GRAF. 640*200 INT 10H ; LLAMADO AL BIOS MOV AL, 01 ; COLOR DEL PUNTO MOV DX, 50 ; COORDENADA Y (0-199) MOV CX, 50 ; COORDENADA X (0-639) MOV AH, 12 ; PARAMETRO PINTA PTO INT 10H ; LLAMADO AL BIOS RET ; REGRESA AL DOS MYPROC ENDP MYCODE ENDS END INICIO

8

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Los lenguajes de programación de alto nivel usados en la Facultad de Ciencias de la Computación, en los primeros semestres son “C” y PASCAL. Sin embargo, se puede utilizar cualquier lenguaje de programación de alto nivel que tenga como mínimo la primitiva de pintado de un punto.

Como un ejemplo del uso de la primitiva de pintado de un punto, se graficará una función en modo de alta resolución ( 640 * 480 puntos ) .

Recordemos la ecuación de la recta que pasa por dos puntos:

Sean P = ( X1, Y1 ) y Q = ( X2, Y2 ) dos puntos en el plano cartesiano. La ecuación de la recta que pasa por estos dos puntos es:

Y = ( )( )12

12XXYY

−− * ( )1XX − + Y1

La función a graficar estará en el programa y el usuario dará como datos de entrada

el intervalo ( dominio ) en el cual desea ver la grafica.

A continuación se muestra el programa ejemplo:

9

Graficado por Computadora, FCC BUAP _________________________________________________________________________

PROGRAM FUNCION; CONST MAXRENGLONES = 199; MINRENGLONES = 20; MAXCOLUMNAS = 639; COLOR = 1; VAR Renglon, (* RENGLON DEL PUNTO A PINTAR *) Columna : INTEGER; (* COLUMNA DEL PUNTO A PINTAR *) X1, X2, (* DOMINIO DE LA FUNCION *) DeltaX, (* SUB-INTERVALO *) Min, (* MINIMO DE LA FUNCION *) Max, (* MAXIMO DE LA FUNCION *) M, (* m DE LA TRANSFORMACION *) Fx, (* VALOR DE LA FUNCION EN X *) (* USADA SOLO POR CLARIDAD *) X : REAL; (* VARIABLE AUXILIAR *) FUNCTION Fun( VAR X : REAL ): REAL; BEGIN Fun := SIN( X ); END; PROCEDURE Marco; BEGIN FOR Renglon := 0 TO MAXRENGLONES DO BEGIN PLOT( 0, Renglon, COLOR ); PLOT( 639, Renglon, COLOR ); END; FOR Columna := 0 TO MAXCOLUMNAS DO BEGIN PLOT( Columna, 0, COLOR ); PLOT( Columna, 20, COLOR ); PLOT( Columna, 199, COLOR ); END; GOTOXY( 30, 2 ); WRITELN( 'F(X) = SIN( X )' ); END; PROCEDURE LeeDominio; BEGIN WRITELN('favor de dar el dominio, dos reales'); READLN( X1, X2 ); DeltaX := ( X2 - X1 ) / MAXCOLUMNAS; WRITELN('Un momento, por favor...'); END;

10

Graficado por Computadora, FCC BUAP _________________________________________________________________________

PROCEDURE MaxMin; BEGIN X := X1; Min := Fun( X ); Max := Min; FOR Columna := 0 TO MAXCOLUMNAS DO BEGIN Fx := Fun( X ); IF ( Min > Fx ) THEN Min := Fx; IF ( Max < Fx ) THEN Max := Fx; X := X + DeltaX; END; END; PROCEDURE PintaFuncion; BEGIN M := ( MaxRenglones - MinRenglones ) / ( Max - Min ); X := X1; FOR Columna := 0 TO MAXCOLUMNAS DO BEGIN Fx := Fun( X ); Renglon := ROUND( M * ( Fx - Min ) + MinRenglones ); PLOT( Columna, Renglon, COLOR ); X := X + DeltaX; END; END; BEGIN (* INICIA PROGRAMA PRINCIPAL *) CLRSCR (* LIMPIA LA PANTALLA *) ; LeeDominio; (* LEE EL DOMINIO DE LA FUNC *) ION MaxMin; (* CALCULA EL MAXIMO Y MINIMO *) HIRES; (* MODO DE ALTA RESOLUCION *) Marco; (* DIBUJA UN MARCO EN PANTALLA *) PintaFuncion; (* PINTA LA F(X) EN LA PANTALLA *) READLN; (* ESPERA DEL USUARIO UN <CR> *) END. Se sugiere al estudiante como ejercicio, anexarle el código correspondiente para que

Tomando únicamente las primitivas ( inicialización y pinta-punto ) el usuario esta lim

sean graficados los ejes X y Y, así como marcas de referencia.

itado. Por esta razón, es conveniente tener otras primitivas como la recta, el círculo, la elipse, etc. Una recta ( segmento ) se pinta en base a una secuencia de puntos.

11

Graficado por Computadora, FCC BUAP _________________________________________________________________________

El uso de la ecuación de la recta es poco recomendable dado el número de operac

iones en punto flotante que se deben realizar. Por esta razón la mayoría de los usuarios utilizan los algoritmos de BRESENHAM y el algoritmo DDA, que a continuación se muestran en PASCAL:

PROGRAM LINEA;

VAR A, B, C, D : INTEGER; PROCEDURE DDA( X1, Y1, X2, Y2 : INTEGER ); VAR Length, I : INTEGER; X, Y, XIncrement, YIncrement: REAL; BEGIN Length := ABS( X2 - X1 ); IF ABS( Y2 - Y1 ) > Length THEN Length := ABS( Y2 - Y1 ); XIncrement := ( X2 - X1 ) / Length; YIncrement := ( Y2 - Y1 ) / Length; X := X1 + 0.5; Y := Y1 + 0.5 ; FOR I:=1 TO Length DO BEGIN PLOT( TRUNC(X), TRUNC(Y), 1 ); X := X + XIncrement; Y := Y + YIncrement; END; END;

12

Graficado por Computadora, FCC BUAP _________________________________________________________________________

PROCEDURE BRESENHAM( X1, Y1, X2, Y2 : INTEGER ); VAR X, Y, I, DeltaX, DeltaY : INTEGER; E : REAL; BEGIN X := X1; Y := Y1; DeltaX := ( X2 - X1 ); DeltaY := ( Y2 - Y1 ); E := ( DeltaY / DeltaX ) - 0.5; FOR I:=1 TO DeltaX DO BEGIN PLOT( X, Y, 0 ); IF ( E > 0 ) THEN BEGIN Y := Y + 1; E := E - 1; END; X := X + 1; E := E + ( DeltaY / deltaX ); END; END; BEGIN (* INICIA PROGRAMA PRINCIPAL *) HIRES; (* ALTA RESOLUCION *) WRITELN( 'DEME LOS DOS PUNTOS DEL SEGMENTO' ); READLN( A, B, C, D ); DDA( A, B, C, D ); (* PINTA LINEA, ALGORITMO DDA *) DELAY( 200 ); (* ESPERA, PARA MEJOR VISION *) BRESENHAM( A, B, C, D ); (* BORRA, ALGORITMO BRESENHAM *) END. Se propone como ejercicio dibujar una gráfica de barras ( histograma ) del número de vocales que aparecen en un archivo de texto que bien puede ser el propio programa.

13

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Para dibujar triángulos, cuadrados, etc., simplemente hay que usar varias veces la

operación primitiva que pinta segmentos. Pero pintar un círculo no es tan inmediato, aunque se utiliza el mismo principio.

Para pintar un círculo en la pantalla, basta dar su posición y su tamaño. La posición puede especificarse por las coordenadas ( XC, YC ) del centro del círculo, y el tamaño mediante el radio R. También es necesaria la regla para determinar las coordenadas de los puntos que habrán de iluminarse para que se vea el círculo.

Al representar círculos, lo que realmente se pinta son aproximaciones de ellos, dado que la pantalla tiene un número finito de puntos. El círculo centrado en el origen puede ser dibujado de varias maneras. Una forma conveniente es determinar coordenadas sucesivas (X, Y) de puntos distribuidos uniformemente a lo largo del perímetro, de la siguiente forma:

X = R * COS ( A )

Y = R * SIN ( A ) Una vez calculados los puntos, se procede a unirlos con segmentos, obteniéndose

un polígono que - si se escoge un ángulo A "pequeño"- da la idea de círculo al ojo humano.

Cuando se desea aumentar la velocidad de graficado de un círculo se evita conectar los puntos ( X, Y ) calculados. Y para esto es necesario pintar los puntos de tal forma que para el ojo humano aparenten no estar separados. Se obtiene una buena aproximación de un círculo punto por punto, cuando los puntos son adyacentes en la ruta marcada por el círculo. La distancia entre puntos adyacentes es una unidad en dirección tanto horizontal como vertical, por lo que la separación angular ( en radianes ) de dos puntos en el círculo puede ser aproximada por el inverso del radio, 1/R. Como lo muestra la figura 2.2.

R d

Figura 2.2 Círculo de radio R, donde la distancia de p

Esta aproximación trabaja bien para la mayoría de los capaso angular pequeño, asegurará que el circulo no tendporque permite el uso de algoritmos simples de relleno.

1 unida

unto a punto es una unidad

sos, de tal forma que para un rá huecos . Esto es deseable

14

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Este círculo está centrado en el origen del sistema de coordenadas. Para un

círculo centrado en la posición ( XC , YC ) , se suma XC a todos los valores X y se suma YC a todos los valores Y. Estas sumas mueven ( trasladan ) el círculo del origen de coordenadas a la posición deseada.

Otra posibilidad para hacer el círculo más rápido es tomar en cuenta la simetría del círculo. No es necesario calcular individualmente todos los puntos de la curva, dado que la mitad de arriba tiene la "misma forma" que la mitad de abajo; y la de la izquierda, la "misma forma" que la de la derecha.

La simetría implica que para cada valor X en el círculo, corresponden dos valores de Y; y para cada valor de Y corresponden dos valores de X. Esto puede verse en la figura 2.3.

Figura 2.3 Simetría en el círculo

Siguiendo con esta idea, podemos encontrar cuatro puntos más del círculo que se desea dibujar, intercambiando las coordenadas X y Y. Esto es, si ( X, Y ) es un punto que forma parte del círculo con centro en el origen, se tiene que el punto ( Y, X ) también forma parte del círculo. El argumento es que tomando en cuenta la ley conmutativa de la suma en la ecuación del círculo, tenemos que X2 + Y2 = Y2 + X2.

Esto significa que será necesario calcular solamente los puntos correspondientes a una octava parte del círculo ( de 00 hasta 450 ), y todos los demás puntos que completan el círculo podrán encontrarse a partir de estos. La figura 2.4 muestra los ocho puntos que pueden ser dibujados calculando solamente el punto ( 3, 4 ).

15

Graficado por Computadora, FCC BUAP _________________________________________________________________________

(-4,-3)

(-4,3)

(-3,4) (3,4)

(4,3)

(-3,-4) (3,-4)

(4,-3)

Figura 2.4 Se encuentran ocho puntos a partir de un solo cálculo.

En algunos lenguajes de programación actuales existe la instrucción, o la rutina, para dibujar círculos y sus parámetros son normalmente el centro del círculo ( XC, YC ) y el radio R. Donde XC, YC y R, pueden ser constantes, variables o expresiones aritméticas.

Aunque el círculo es de las curvas más usadas, también es importante la elipse al realizar gráficas por computadora, siendo el círculo un caso particular. Las ecuaciones para la elipse pueden escribirse en la forma:

X = XC + Rx * COS ( A )

Y = YC + Ry * SIN ( A ) en que Rx y Ry denotan la longitud de los semiejes. Si Rx es igual a Ry tendremos un círculo.

Las curvas elípticas son usadas en muchas áreas de la graficación, por ejemplo las órbitas de los satélites, otro ejemplo es la visión en tres dimensiones de la base de un cilindro que se mostrará al usuario en forma de elipse, etc., etc.

16

Graficado por Computadora, FCC BUAP _________________________________________________________________________

2.2 Transformaciones en Dos Dimensiones

Un sistema de graficado debe permitir al usuario la aplicación de transformaciones a sus objetos gráficos. Por ejemplo, agrandar la gráfica de tal manera que pueda verle detalles, o reducirla para que una mayor parte del objeto a graficarse sea visible.

Las transformaciones más usadas en graficación son las traslaciones, cambios de escala y las rotaciones.

Cada una de las transformaciones genera un nuevo punto ( X', Y' ) a partir de las coordenadas de un punto ( X, Y ) en la gráfica original. Si el objeto a graficar incluye un segmento, es suficiente con aplicar la transformación a los puntos finales del segmento y entonces graficar el segmento entre los dos puntos finales transformados.

La transformación correspondiente a la traslación es de la forma:

X' = X + Tx

Y' = Y + Ty De tal manera que para cada punto ( X, Y ) se calcula un nuevo punto (X',Y').

Las transformaciones correspondiente al cambio de escala es:

X' = X * Sx

Y' = Y * Sy Así, a cada punto ( X, Y ) se le afecta por los factores de escala Sx , Sy para obtener el punto ( X', Y'). Si Sx y Sy son diferentes, tienen el efecto de distorsionar la figura, alargándola o achicándola en las direcciones de los ejes coordenados. Las reflexiones de un objeto respecto a los ejes coordenados pueden ser generadas usando valores de Sx y Sy iguales a -1.

Por último las transformaciones correspondientes a las rotaciones con centro en el origen y ángulo A son de la forma:

X' = X * COS ( A ) + Y * SIN ( A )

Y' = -X * SIN ( A ) + Y * COS ( A )

Secuencias de cualquier número de transformaciones pueden ser combinadas para definir nuevas transformaciones mediante la composición usual. En general, es necesario efectuar transformaciones más complicadas como rotar con respecto a un punto arbitrario.

17

Graficado por Computadora, FCC BUAP _________________________________________________________________________

La rotación con respecto a un punto arbitrario puede ser efectuada realizando tres transformaciones simples: una traslación, seguida de una rotación y después otra traslación para regresarlo a su posición original.

El orden en que las transformaciones son calculadas no debe ser modificado, ya que dichas transformaciones no conmutan. Por ejemplo suponga que tenemos un triángulo en el origen, y se le hacen las transformaciones rotación por 450 y después una traslación sobre el eje X, el resultado es mostrado en la figura 2.5 inciso a). Por otro lado suponga que al mismo triángulo se le aplican las mismas transformaciones solo que en orden inverso, es decir primero la traslación sobre el eje X y después la rotación por 450, el resultado es mostrado en la figura 2.5 inciso b). Note que el resultado es claramente diferente.

Figura 2.5 a) Rotación y traslación, b) traslación y después rotación.

Componer varias transformaciones tiene varias ventajas, debido a que podemos

representarlas de una forma más compacta. Además, es generalmente posible calcular las transformaciones con menos operaciones aritméticas, que si aplicáramos cada una de las transformaciones en secuencia.

Como es bien sabido, las transformaciones lineales del plano en sí mismo pueden ser representadas por matrices de 2 * 2, como se muestra en la figura 2.6. Es decir:

TRANSFORMACIONES LINEALES MATRICES DE 2 * 2

EN DOS DIMENSIONES.

18

Graficado por Computadora, FCC BUAP _________________________________________________________________________

En términos del resultado anterior tenemos que la transformación matricial de rotación con centro en el origen es expresada así: Rotación

[ ] [ ] ⎥⎦

⎤⎢⎣

⎡ −=

)()()()(

*''ACOSASINASINACOS

YXYX

y la transformación matricial para el cambio de escala es: Cambio de escala

[ ] [ ] ⎥⎦

⎤⎢⎣

⎡=

SySx

YXYX0

0*''

Es fácil verificar que estas fórmulas son equivalentes a las descritas al inicio de esta sección.

Y como la composición de transformaciones lineales corresponde a la multiplicación de matrices, en computación conviene realizar la multiplicación para tener representada la composición de varias rotaciones y cambios de escala mediante una sola matriz.

Algunos casos particulares, correspondientes a ciertas transformaciones importantes son: Reflexión en el eje Y:

[ ] [ ] ⎥⎦

⎤⎢⎣

⎡−=

1001

*'' YXYX

Reflexión en el eje X:

[ ] [ ] ⎥⎦

⎤⎢⎣

⎡−

=10

01*'' YXYX

Reflexión en el origen:

[ ] [ ] ⎥⎦

⎤⎢⎣

⎡−

−=

1001

*'' YXYX

Reflexión en la línea Y = X:

[ ] [ ] ⎥⎦

⎤⎢⎣

⎡=

0110

*'' YXYX

19

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Reflexión para Y = -X:

[ ] [ ] ⎥⎦

⎤⎢⎣

⎡−

−=

0110

*'' YXYX

Nótese sin embargo, que dentro de las representaciones matriciales no hay alguna para la traslación. Esto se debe a que la traslación no es una transformación lineal y por lo tanto no es posible asociarle una matriz de 2 * 2. Para salvar este obstáculo, se ha hecho uso de una herramienta matemática: las coordenadas homogéneas. En las próximas secciones se da una presentación de dichas coordenadas.

20

Graficado por Computadora, FCC BUAP _________________________________________________________________________

2.3 Geometría Proyectiva

La geometría de Euclídes que comúnmente se trabaja está estrechamente relacionada con longitudes, ángulos y áreas. Es una geometría de medida, o geometría métrica. Como es natural, en esta geometría, son de interés todas aquellas transformaciones que respetan las longitudes, ángulos, áreas y los objetos mismos, es decir, su forma. A este tipo de transformaciones se les denomina movimientos rígidos. Ejemplos de ellos son las traslaciones y las rotaciones.

Existen sin embargo, otro tipo de transformaciones, como la transformación de cambio de escala, que en general deforma; así, por ejemplo un círculo puede ser transformado en una elipse cambiando la escala de una de las coordenadas. Las transformaciones de este tipo están incluidas en las transformaciones llamadas proyecciones, que se resumen en dos tipos: proyección central y proyección paralela. Por ejemplo, consideremos dos líneas distintas L y L' en el plano y algunos puntos A, B, C, D, sobre L. La proyección central de dichos puntos de L desde O, proyectados sobre L', donde O es un punto que no pertenece ni a L ni a L', son los puntos A' B', C', D', que se muestran en la figura 2.6 .

L

O

’A’ B’

DCA B

Figura 2.6 Proyección de L en L

Si en lugar de usar líneas a través de un punto O paa L', se usan líneas paralelas con una dirección dada, distse ve en la figura 2.7

A’ B’ C’ D’

C D A B

Figura 2.7 Proyección Paralel

L

C D

’.

ra efectuar la proyección de L inta de las líneas L y L', como

a.

L

L’

21

Graficado por Computadora, FCC BUAP _________________________________________________________________________

La proyección es llamada proyección paralela. En general, las proyecciones no respetan ángulos, áreas, longitudes ni formas de figuras.

Diremos que una propiedad de una figura es proyectiva si es preservada por cualquier proyección. El estudio de las propiedades proyectivas y sus relaciones constituye lo que se denomina geometría proyectiva. Cabe hacer notar que en la proyección central mostrada anteriormente, un punto V sobre L no tendrá proyección sobre L' cuando la recta que pasa por O y V sea paralela a L', esto es mostrado en la figura 2.8 .

O V

L

Figura 2.8 Caso

Hay un solo punto sobre L con essobre L', que no es proyección de ningún pla paralela a L que pasa por O, como se mu

O

Figura 2.9 Caso dond Nuevamente hay un solo punto sobre L' con

Salvo estos dos puntos, hay una cdistintos y los punto de L'. Sin embargo, dos rectas paralelas no se intersectan. dichas excepciones. Si dos rectas paraledistinto a los ya conocidos. Este nuevo pmodo, por cada familia de rectas paralelasun punto al infinito correspondiente a tinfinito constituye lo que se denomina la r

cuando son

ta propiedaunto de L, estra en la f

e W’ no es

esta propi

orrespondelas excepci Así que, las se interunto es de en una diral direccióecta al infin

L

paralelas.

d. Similarmente, hay un punto W' y que resulta de intersectar a L' con igura 2.9.

L

W

L

una proyección.

edad.

ncia uno a uno entre los puntos de L ones se originan en el hecho de que si cambiamos esto, removeremos sectan, deberá ser en un nuevo punto nominado punto al infinito. De este ección dada, aumentaremos al plano n. El conjunto de todos los puntos al ito o línea al infinito.

22

Graficado por Computadora, FCC BUAP _________________________________________________________________________

El nuevo plano, obtenido de aumentarle al plano original los puntos al infinito, se denominan plano extendido. Usualmente también se denomina plano finito y puntos finitos al plano original y sus puntos, respectivamente.

La ganancia que se obtiene de esta construcción es que se suprimen muchas excepciones existentes en la geometría tradicional, y más aún, los resultados de ésta pueden verse como casos particulares de aquélla. Para utilizar los puntos al infinito y aprovechar las ventajas que ellos ofrecen, conviene introducir un sistema de coordenadas para ellos, las llamadas coordenadas homogéneas.

23

Graficado por Computadora, FCC BUAP _________________________________________________________________________

2.4 Coordenadas Homogéneas

Las coordenadas que se utilizan para los puntos en el plano extendido, se denominan coordenadas homogéneas y se definen en términos de las coordenadas cartesianas en R3. Primero definiremos las coordenadas homogéneas para puntos finitos.

Las coordenadas homogéneas ( X1, X2, X3 ) de un punto finito de coordenadas cartesianas ( X, Y ) son cualesquiera números X1, X2, X3, tales que X = X1/X3 y Y = X2/X3. Así, por ejemplo, dado el punto P = (X, Y), tanto ( X, Y, 1 ) como (2X, 2Y, 2) y (-3X, -3Y, -3) son coordenadas homogéneas del punto P. En general, dado cualquier número r distinto de cero, ( rX, rY, r) son coordenadas homogéneas de P. Un punto finito tiene entonces un conjunto infinito de coordenadas homogéneas. Nótese que la tercera coordenada debe ser distinta de cero. Inversamente, cualesquiera tres números X1, X2, X3, donde X3 <> 0, son coordenadas homogéneas de un punto finito, del punto ( X, Y ) donde X = X1/X3 y Y = X2/X3. Asi ( 3, -2, 4 ) es la representación en coordenadas homogéneas del punto (3/4, -1/2 ).

Se tiene, por tanto, que los puntos finitos tienen asociadas como coordenadas homogéneas todas las ternas (X1, X2, X3) para las cuales X3 <> 0. Solo restan las ternas de la forma ( X1, X2, 0 ). Estas ternas se asignan como coordenadas homogéneas de los puntos al infinito

Se define un punto al infinito por cada conjunto de rectas paralelas con una dirección dada, esto es, con una pendiente específica. Las coordenadas homogéneas para tal punto al infinito deben, por tanto, depender sólo de dicha pendiente. Así, cualquier terna ( X1, X2, 0 ) para la cual X2/X1 = LAMDA, es una coordenada homogénea del punto al infinito en la dirección de pendiente LAMDA.

Usualmente se escogen representaciones sencillas, por ejemplo para un punto finito ( X, Y ) se toman las coordenadas homogéneas ( X, Y, 1 ) y para el punto al infinito en la dirección de pendiente LAMDA se toma (1, LAMDA, 0)

24

Graficado por Computadora, FCC BUAP _________________________________________________________________________

2.5 Transformaciones en Dos Dimensiones con Coordenadas Homogéneas

En la sección 2.2 se mostró la importancia práctica de expresar las transformaciones en el plano mediante producto de matrices, de manera que un punto ( X, Y ) se transforma en el punto ( X', Y' ) así:

( ) ( ) ⎥⎦

⎤⎢⎣

⎡=

DBCA

YXYX *''

donde la matriz de 2 * 2 especifica completamente la transformación. Sin embargo, no hay representación matricial de este tipo para las traslaciones. Veamos que sucede, si en lugar de trabajar con coordenadas cartesianas normales, usamos coordenadas homogéneas. En este caso, tendremos que el punto ( X, Y, 1 ) se transforma en el punto ( X', Y', 1 ) y la matriz asociada a la transformación debe ser una matriz de 3 * 3, esto es, se debe tener:

( ) ( )⎥⎥⎥

⎢⎢⎢

⎡=

IFCHEBGDA

YXYX *11''

que se traduce en: X' = A*X + B*Y + C Y' = D*X + E*Y + F 1 = G*X + H*Y + I De esta manera tenemos que las rotaciones, cambios de escala y traslaciones se representan en las formas siguientes: Rotación:

[ ] [ ]⎥⎥⎥

⎢⎢⎢

⎡ −=

1000)()(0)()(

*11'' ACOSASINASINACOS

YXYX

25

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Cambios de escala:

[ ] [ ]⎥⎥⎥

⎢⎢⎢

⎡=

1000000

*11'' SySx

YXYX

Traslación:

[ ] [ ]⎥⎥⎥

⎢⎢⎢

⎡=

1010001

*11''TyTx

YXYX

Podemos finalmente representar cualquier transformación en el plano, resultado de componer rotaciones, cambios de escala y traslaciones como un producto de matrices.

26

Graficado por Computadora, FCC BUAP _________________________________________________________________________

2.6 Ventanas y Recorte

En una aplicación dada, por ejemplo en arquitectura, en que el usuario desea tener todo el plano del edificio a construir ( objeto ), podría ser de su interés ver solamente un piso del edificio. Es decir que en la aplicación se requiera poder ver partes de la gráfica, de tal manera que se puedan apreciar mejor los detalles. Esto da el efecto de ver el objeto a graficar a través de una ventana, más aún, es deseable agrandar esas porciones para obtener las ventajas de utilizar toda el área disponible de la pantalla.

A la región seleccionada para ver una porción del objeto a graficar se le llama "ventana" . Aunado al concepto de ventana, está el de puerto de visión, que es el rectángulo en la pantalla donde deseamos dibujar el contenido de la ventana. En muchas aplicaciones el puerto de visión es toda la pantalla. Por ejemplo, si tenemos el gráfico (árbol con nube) mostrado en la figura 2.10.

Figura 2.10 Mapeo de la ventana a la pantalla. y deseamos ver solamente la nube, definimos la ventana de tal manera que deje ver solamente a ésta. Ya que se escogió el área a graficar, hay que definir en que región de la pantalla se desplegará y se hace un mapeo a ésta. Resumiendo, diremos que la ventana define "qué" es lo que queremos ver, y el puerto de visión especifica "dónde" será desplegado. Estos dos conceptos son de gran ayuda ya que el usuario podrá examinar parte por parte un gráfico. Esto se hará definiendo una ventana de tamaño fijo y variando su posición.

Dada una ventana y un puerto de visión, definidos de la siguiente forma:

a pantalla Wyt

Wyb

Figura 2.11 T

ventan

Vyt

mapeo

Vyb

r r

Wxl

ransform

Wx

ación de puntos en la ventana

Vxl

a puntos en la

Vx

pantalla.

27

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Deseamos encontrar las transformaciones que nos llevan de la ventana a la pantalla. Esto se hará de la siguiente forma: tenemos el segmento determinado por Wxl y Wxr, y deseamos mapearlo al segmento determinado por Vxl y Vxr. Esta transformación podemos verla gráficamente como la recta que pasa por los puntos ( Wxl, Vxl) y ( Wxr, Vxr ).

r La ecuación q

De igual man

Con las dosYs ) en coord

La trapuntos que loque el segme

La foel cual consisparte del segsegmento la p

Vx

Vxl

Wxl Wxr

ue transforma Xw ( X de ventana ) en Xs en la pantalla es:

Xs = ( )( )WxlWxr

VxlVxr−− * ( )WxlXw − + Vxl

era, calculamos Ys a partir de Yw y tenemos:

Ys = ( )( )WybWyt

VybVyt−−

* ( )WybYw− + Vyb

ecuaciones anteriores, se transforma un punto ( Xw, Yw ) del objeto a ( Xs, enadas de la pantalla.

nsformación de la ventana es usada para cada segmento, aplicándola a los dos determinan; sin embargo, al pintar en el puerto de visión podría suceder nto no quede totalmente incluido en el área definida por el puerto de visión.

rma de resolver el problema es con el concepto de "recorte" de segmentos, te en que para cada segmento a dibujarse, se hará un análisis para ver qué mento cae dentro del puerto de visión. Este análisis permitirá "cortarle" al arte que no quede dentro del puerto de visión.

28

Graficado por Computadora, FCC BUAP _________________________________________________________________________

El algoritmo de recorte que se describirá fue escrito por Dan Cohen e Ivan

Sutherland. El algoritmo determina primero si la línea está totalmente contenida en el puerto de visión o está totalmente fuera del puerto de visión. Si no satisface ninguno de estos dos casos, entonces el segmento es dividido en dos partes y los dos análisis anteriores son aplicados nuevamente. Este algoritmo depende del hecho de que toda la línea esta totalmente dentro del puerto de visión o puede ser dividida de tal forma que una parte pueda ser descartada. El análisis es implementado extendiendo los bordes de la pantalla de tal forma que el espacio ocupado por el objeto sin recorte esté dentro de nueve regiones. La simplicidad del algoritmo es mostrada por la siguiente implementación en PASCAL la cual asume que el recorte se efectuará con:

Clipyt

Clipyb

Clipxl Clipxr

29

Graficado por Computadora, FCC BUAP _________________________________________________________________________

VAR Clipxl, Clipxr, Clipyb, Clipyt : REAL; PROCEDURE Clip( x1, y1, x2, y2 : REAL ); LABEL return; TYPE edge=(left, right, bottom, top ); outcode = SET OF edge; VAR c, c1, c2 : outcode; x, y : REAL; PROCEDURE code( x, y : REAL; VAR c : outcode ); BEGIN c:=[]; IF x < Clipxl THEN c:=[left] ELSE IF x > Clipxr THEN c:=[right]; IF y < Clipyb THEN c:= c + [bottom] ELSE IF y > Clipyt THEN c:=c+[top]; END; BEGIN code( x1, y1, c1); code( x2, y2, c2 ); WHILE (c1 <> []) OR (c2<>[]) DO BEGIN IF (c1*c2) <> [] THEN GOTO return; c:=c1; IF c=[] THEN c:=c2; IF left IN c THEN BEGIN y:=y1+(y2-y1)*(Clipxl-x1)/(x2-x1); x:=Clipxl END ELSE IF right IN c THEN BEGIN y:=y1+(y2-y1)*(Clipxr-x1)/(x2-x1); x:=Clipxr END ELSE IF bottom IN c THEN BEGIN x:=x1+(x2-x1)*(Clipyb-y1)/(y2-y1); y:=Clipyb; END ELSE IF top IN c THEN BEGIN x:=x1+(x2-x1)*(Clipyt-y1)/(y2-y1); y:=Clipyt END; IF c=c1 THEN BEGIN x1:=x; y1:=y; code(x,y,c1) END ELSE BEGIN x2:=x; y2:=y; code(x,y,c2) END END; showline( x1, y1, x2, y2 ); return: END;

30

Graficado por Computadora, FCC BUAP _________________________________________________________________________

2.7 Ejemplos Ejemplo1: Sistema de Información Geográfica (SIG).

Este Sistema dará al usuario información a nivel nacional y estatal de la producción de productos básicos (5), así como gráficas comparativas entre estos datos. Se contará con la información de las producciones de los cinco (5) productos básicos en los últimos diez (10) años. Se recomienda un menú principal que determine si desea información nacional o estatal. Si desea información nacional el Sistema mostrará el mapa de la república Mexicana dividida en zonas económicas y permitirá las siguientes opciones: a) Petróleo b) Maíz c) Café d) Trigo e) Luz f) Regreso

El usuario debe seleccionar alguno de los productos y se mostrarán dibujos ( uno por cada zona económica ) adecuados a la producción en cada zona. Es decir, si seleccionó petróleo, se verá un barril por zona económica y el tamaño del barril corresponderá a la producción en el último año. La opción de regreso irá al menú principal.

Si desea información estatal, se le pregunta al usuario el nombre del estado que desea ver. Se mostrará un mapa del estado en la mitad izquierda de la pantalla, con una gráfica de barras en la otra mitad. La gráfica de barras tendrá los datos de los últimos diez años en la producción de alguno de los productos seleccionados por el propio usuario.

Sugerencias para el Sistema:

a) Hacer un editor de mapas, con los siguientes comandos: Pinta / Borra punto referenciado por el cursor. Mueve cursor ( pueden ser las flechas ) para pintar o borrar dependiendo de la bandera de pinta / borra. Salva en disco el conjunto de puntos (X, Y) que corresponden a los puntos pintados por el usuario. b) Hacer los dibujos referentes a los productos en base a un arreglo que contenga las coordenadas de los segmentos que forman el dibujo. Las coordenadas deben ser unitarias para que sean afectadas por un factor de escala de acuerdo a la producción en ese año. Además el dibujo estará centrado en el origen para mejor manejo en la escala y la traslación. c) La información referente a los productos debe estar en un archivo dada la cantidad de datos.

La descripción del Sistema para dejarse como ejercicio puede sufrir modificaciones de acuerdo al profesor, como podrían ser: gráficas de pastel, barras en una pantalla, mapas en una pantalla, diferentes productos, etc., etc.

31

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Ejemplo 2: Editor de Circuitos Lógicos (EDICIR).

El editor de circuitos lógicos es un programa que permite la creación y / o modificación de circuitos lógicos en la pantalla, con una variedad de al menos 15 componentes lógicos. Los componentes que se sugieren pueden ser: LINEA, NEGADOR, OR, AND, NOR, NAND, etc.

El menú principal debe contener: a) Mueve cursor b) Pinta componente c) Borra Componente d) Salva circuito e) Recupera circuito f) Borra circuito g) Imprime circuito h) Ayuda i) Fin

El comando mueve cursor, permite colocar el cursor gráfico ( referencia en pantalla ) con un desplazamiento de un pixel dependiendo de las cuatro flechas.

El comando pinta componente, permite dibujar alguno de los 15 componentes en la posición del cursor. Estos componentes serán mostrados en un submenú para mejor entendimiento del usuario. Antes de pintar en la pantalla el componente, el usuario dará el ángulo de rotación y la escala que desea del componente. El comando de borra componente, permite borrar alguno de los componentes ya dibujados en el área de trabajo, basándose en la posición del cursor. Es decir, se borrar el componente más cercano al cursor. El comando salva circuito, consiste en guardar en un archivo el espacio del objeto ( no la imagen ), correspondiente al circuito que el usuario diseñó. Esto permite que el usuario pueda tener los circuitos que desee. El comando recupera circuito, recuperará un circuito almacenado en un archivo y lo mostrará en la pantalla. El comando borra circuito, limpiará la pantalla y borrará toda la estructura de datos ( no los archivos ) que contiene los componentes dibujados por el usuario. El comando imprime circuito, mostrará en la impresora el circuito diseñado por el usuario. El comando de ayuda, mostrará en el área de trabajo el contenido de un archivo de texto que contiene una breve descripción de los comandos del editor de circuitos lógicos.

La descripción del Sistema para dejarse como ejercicio puede sufrir modificaciones de acuerdo al profesor, como podrían ser: aumentar los componentes, hacer un editor de circuitos eléctricos, se imprima la lista de integrados, etc., etc.

32

Graficado por Computadora, FCC BUAP _________________________________________________________________________

33

Graficado por Computadora, FCC BUAP _________________________________________________________________________

CAPITULO III

GRAFICAS EN TRES DIMENSIONES

3.1 Transformaciones.

Las transformaciones son parte importante en la generación de imágenes en escenas de tres dimensiones. Estas son usadas para expresar posiciones de objetos en relación a otros.

Algunas transformaciones son expresadas por matrices y la composición es calculada mediante la multiplicación de matrices, para obtener una sola matriz.

De esta manera, la aplicación sucesiva de varias transformaciones se puede llevar a cabo mediante multiplicación por una sola matriz. Supongamos que dos transformaciones T1 y T2, son aplicadas sucesivamente. El mismo efecto puede obtenerse si aplicamos una matriz T3, la cual es el producto de las matrices T1 y T2. La concatenación de transformaciones puede verse así :

El punto ( X, Y, Z ) es transformado a ( X', Y', Z' ) por la transformación T1.

[ X', Y', Z' ] = [ X, Y, Z ] T1

El punto ( X", Y", Z" ) es generado por T2 :

[ X", Y", Z" ] = [ X', Y', Z' ] T2

de donde obtenemos:

[ X", Y", Z" ] = ( [ X, Y, Z ] T1 ) T2

= [ X, Y, Z ] ( T1 T2 )

Se debe tener cuidado en preservar el orden de aplicación cuando las matrices se multipliquen, ya que T1 * T2 no es necesariamente igual a T2 * T1. Recuérdese que el producto de matrices no es conmutativo.

Como en el caso de dos dimensiones, existen cuatro transformaciones básicas : rotación, cambio de escala, reflexión y traslación.

34

Graficado por Computadora, FCC BUAP _________________________________________________________________________

La transformación de rotación es más compleja que en dos dimensiones. Inicialmente, consideraremos los casos simples, en donde el eje de rotación coincide con uno de los ejes coordenados.

La rotación sobre el eje Z con un ángulo θ se puede ver fácilmente en la siguiente figura 3.1.

θ

Y Y’ X’ X

Figura 3.1 Rotación sobre el eje Z

En esta figura el eje Z, que es el de rotación, es perpendicular a esta página. De esta forma hemos reducido el problema a una rotación en dos dimensiones, así que el sistema queda como:

X' = X * COS( θ ) + Y * SIN( θ ) Y' = - X * SIN( θ ) + Y * COS( θ ) Z' = Z

De esta manera, en notación matricial la rotación con respecto al eje Z, en dirección de las manecillas del reloj es:

[ ] [ ]⎥⎥⎥

⎢⎢⎢

⎡ −=

1000)()(0)()(

*''' θθθθ

COSSINSINCOS

ZYXZYX

De una manera similar, encontramos la ecuaciones para realizar una rotación sobre el eje X, con un ángulo P.

Y' = Y * COS(P) + Z * SIN(P) Z' = - Y * SIN(P) + Z * COS(P) X' = X

35

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Y en notación matricial:

[ ] [ ]⎥⎥⎥

⎢⎢⎢

⎡−=

)()(0)()(0

001*'''

PCOSPSINPSINPCOSZYXZYX

Análogamente, daremos las ecuaciones y la matriz de rotación para el eje Y, con

un ángulo Q.

Z' = Z * COS(Q) + X * SIN(Q) X' = - Z * SIN(Q) + X * COS(Q) Y' = Y

Y en notación matricial:

[ ] [ ]⎥⎥⎥

⎢⎢⎢

−=

)(0)(010

)(0)(*'''

QCOSQSIN

QSINQCOSZYXZYX

Finalmente, la rotación en el espacio con respecto a los ejes X, Y, Z ( en ese orden ) y el origen como pivote, se obtiene por una composición de las tres rotaciones anteriores. Dicha composición se obtiene multiplicando las tres matrices de rotación.

Tomando la convención de rotar primero con respecto al eje X, después con respecto al eje Y, y por último con respecto al eje Z, obtenemos que la matriz de transformación ser :

[ ] [ ] [ ] *)(0)(

010)(0)(

*)()(0)()(0

001**

⎥⎥⎥

⎢⎢⎢

−⎥⎥⎥

⎢⎢⎢

⎡−=

PCOSPSIN

PSINPCOS

COSSINSINCOSRzRyRx

θθθθ

* ⎥⎥⎥

⎢⎢⎢

⎡ −

1000)()(0)()(

QCOSQSINQSINQCOS

36

Graficado por Computadora, FCC BUAP _________________________________________________________________________

= ⎥⎥⎥

⎢⎢⎢

++−−+−+

)(*)()(*)()(*)(*)()(*)()(*)(*)()(*)()(*)()(*)(*)()(*)(*)()(*)(

)()(*)()(*)(

PCCQCSQSPSCQSSQCPSCPCSQCCQCPSSQCPSSQSC

PSQSPCQCPC

θθθθθθθθθθ

= ⎥⎥⎥

⎢⎢⎢

IHGFEDCBA

Donde A, B, C, D, E, F, G, H, I son los respectivos términos de la matriz de arriba. La transformación de cambio de escala afecta a cada coordenada por separado, tal como ocurre en dos dimensiones, y es:

X' = X * Sx Y' = Y * Sy Z' = Z * Sz

Y en notación matricial:

[ ] [ ]⎥⎥⎥

⎢⎢⎢

⎡=

SzSy

SxZYXZYX

000000

*'''

La traslación determinada por ( Tx, Ty, Tz ) es tal que cualquier punto ( X, Y, Z ) ser transformado en ( X + Tx, Y + Ty, Z + Tz ). Al igual que en el caso de dos dimensiones no podemos dar una representación matricial para la traslación en el espacio usando matrices de 3 * 3. Por esta razón usaremos análogamente coordenadas homogéneas para el espacio.

37

Graficado por Computadora, FCC BUAP _________________________________________________________________________

3.2 Geometría Proyectiva en el Espacio

De las transformaciones analizadas hasta aquí, algunas de ellas mueven un objeto de un lugar a otro sin alterar en forma alguna al objeto en sí, esto es, sólo efectúan un cambio de la posición del objeto en el espacio. A estas transformaciones se les llama movimientos rígidos y ejemplos de ellas son las traslaciones y las rotaciones. Sin embargo, hay otras transformaciones que deforman al objeto y son llamadas proyecciones. El estudio de este tipo de transformaciones y sus propiedades es lo que da lugar a la geometría proyectiva en el espacio. No obstante, algunos de los teoremas contienen excepciones dentro de sus enunciados y para disolverlas se hace necesario "ampliar" o extender el espacio.

En el capítulo II se introdujo el concepto de plano extendido, el cual comprende a todos los puntos del plano euclidiano, llamados puntos finitos, m s unos nuevos puntos denominados puntos al infinito que satisfacen ciertas propiedades. De esta misma manera, la extensión del espacio euclidiano o espacio finito, se efectúa por medio de la adjunción de puntos al infinito, con las siguientes propiedades : a) Hay un solo punto al infinito correspondiente a cada dirección en el espacio finito, esto es, al conjunto de todas las líneas en el espacio con una misma dirección le corresponde un solo punto al infinito. b) Dada una dirección específica, todos los puntos al infinito en las direcciones perpendiculares a ella forman una línea al infinito. Esto es, dada una dirección, al conjunto de todos los planos perpendiculares a ella le corresponde una línea al infinito. c) Todos los puntos al infinito constituyen un plano, el plano al infinito. Nótese que estas propiedades son una generalización de las propiedades de los puntos al infinito que se dieron en la extensión del plano. Finalmente, al igual que en el plano, no se pueden utilizar coordenadas cartesianas para expresar a todos los puntos del plano extendido, pues todas las ternas ( X, Y, Z ) se utilizan como coordenadas para representar a los puntos finitos. Se hace necesario, por consiguiente, utilizar otro tipo de coordenadas, las coordenadas homogéneas para el espacio.

38

Graficado por Computadora, FCC BUAP _________________________________________________________________________

3.3 Coordenadas Homogéneas en el Espacio

Las coordenadas homogéneas de un punto del espacio cartesiano están definidas en términos de las coordenadas cartesianas del mismo. Si ( X, Y, Z ) son las coordenadas cartesianas de un punto finito P, las coordenadas homogéneas ( X1, X2, X3, X4 ) de P, se definen por las relaciones:

X1 / X4 = X X2 / X4 = Y X3 / X4 = Z X4 <> 0

Las coordenadas homogéneas de los puntos al infinito son de la forma ( X1, X2, X3, 0 ).

Si L es cualquier línea en la dirección cuyas componentes son l, m, n, y ( X0, Y0, Z0 ) es un punto fijo sobre L, un punto finito arbitrario P sobre L tiene coordenadas cartesianas ( X0 + lt, Y0 + mt, Z0 + nt ) y coordenadas homogéneas ( X0 + lt, Y0 + mt, Z0 + nt, 1 ) o bien ( X0/t + l, Y0/t + m, Z0/t + n, 1/t ). Cuando P se aleja indefinidamente sobre L, el par metro t tiende a infinito y entonces las coordenadas homogéneas tienen como límite a ( l, m, n, 0 ) así que, en general, el punto al infinito que le corresponde a la dirección con componentes X1, X2, X3 es aquel que tiene coordenadas homogéneas ( X1, X2, X3, 0 ). Por simplificación, usualmente se utiliza para los puntos finitos la representación homogénea ( X, Y, Z, 1 ).

39

Graficado por Computadora, FCC BUAP _________________________________________________________________________

3.4 Transformaciones en Tres Dimensiones con Coordenadas Homogéneas

En la sección 3.1 se vio que muchas transformaciones se pueden expresar por medio de matrices, la matriz de transformación, y que la concatenación o composición de varias transformaciones se traduce en el producto de sus respectivas matrices de transformación. Así, dado un punto ( X, Y, Z ) en el espacio y una transformación lineal que hace un mapeo de ( X, Y, Z ) en ( X', Y', Z' ), éste se puede expresar como:

[ ] [ ]⎥⎥⎥

⎢⎢⎢

⎡=

IFCHEBGDA

ZYXZYX *'''

donde la matriz 3 * 3 es su matriz de transformación. Recordemos también que esto se podía hacer para las transformaciones lineales pero no para la traslación.

Con el uso de coordenadas homogéneas este problema se resuelve, pues en esta forma los puntos tienen representaciones ( X, Y, Z, 1 ) y las matrices de transformación son matrices de 4 * 4. Así, si el punto ( X, Y, Z, 1 ) se transforma en el punto ( X', Y', Z', 1 ), esto se expresa por medio de:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

=

PLHDOKGCNJFBMIEA

ZYXZYX *11'''

que se traducen:

X' = AX + BY + CZ + D Y' = EX + FY + GZ + H Z' = IX + JY + KZ + L 1 = MX + NY + OZ + P

Haciendo un análisis semejante al de la sección 3.1, obtenemos que las

representaciones de las rotaciones, cambios de escala y traslaciones son como sigue:

40

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Traslación:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

=

1010000100001

*11'''

TzTyTx

ZYXZYX

Cambios de escala:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

=

1000000000000

*11'''Sz

SySx

ZYXZYX

Rotación en el eje z:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

⎡ −

=

1000010000)()(00)()(

*11'''θθθθ

COSSINSINCOS

ZYXZYX

Rotación en el eje x:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

⎡−

=

10000)()(00)()(00001

*11'''PCOSPSINPSINPCOS

ZYXZYX

Rotación en el eje y:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

−=

10000)(0)(00100)(0)(

*11'''QCOSQSIN

QSINQCOS

ZYXZYX

41

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Rotación Rxyz:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

=

1000000

*11'''IHGFEDCBA

ZYXZYX

donde A, B, C, D, E, F, G, H, I son las componentes de la matriz 3 * 3 dada en la sección 3.1.

La rotación y el cambio de escala se pueden combinar multiplicando sus matrices obteniéndose así una transformación con representación matricial:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

=

1000000

*11'''ISzHSyGSxFSzESyDSxCSzBSyASx

ZYXZYX

De manera similar, se pueden combinar las transformaciones de rotación, escala y traslación, obteniéndose una nueva transformación con representación matricial:

[ ] [ ]⎥⎥⎥⎥

⎢⎢⎢⎢

=

1000

*11'''

TzTyTxISzHSyGSxFSzESyDSxCSzBSyASx

ZYXZYX

Las anteriores transformaciones rotan con respecto a los ejes coordenados, pero en general, cualquier línea en el espacio sirve como eje de rotación. Este problema de rotación consiste en derivar una matriz de transformación para una rotación en un ángulo é, alrededor de una línea arbitraria. La matriz de rotación correspondiente ser construida en base a las matrices básicas descritas anteriormente.

El problema se resolver de la siguiente manera: primero se efectuar una traslación para mover el origen a un punto sobre la línea, se harán rotaciones sobre los ejes X y Y para alinear el eje Z con la línea. De esta manera, el rotar con respecto a la línea es simplemente rotar con respecto al eje Z.

42

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Finalmente se aplicar n las transformaciones inversas de las rotaciones sobre Y y X, y para la traslación, dado que hay que restaurar la línea y las coordenadas a su orientación original.

Una representación conveniente para una línea es mediante un punto sobre la línea y la dirección de ella. Esta representación da ventajas al m‚todo ya que el punto provee información para la traslación, y la dirección nos ayudar en los ángulos de rotación para alinear el eje Z con la línea. Es posible encontrar esta forma, a partir de las ecuaciones paramétricas de una línea:

X = A * u + X1 Y = B * u + Y1 Z = C * u + Z1

Un punto sobre la línea es ( X1, Y1, Z1 ) y la dirección es especificada por el vector ( A, B, C ) <> ( 0, 0, 0 ).

Para determinar la matriz de traslación en el caso de rotación en general, el paso

inicial es mover el origen al eje de rotación, de esta forma tenemos:

T =

⎥⎥⎥⎥

⎢⎢⎢⎢

1010000100001

TzTyTx Después de la traslación, el punto ( X1, Y1, Z1 ) sobre la línea es movido al origen y será necesaria la transformación inversa de esta traslación para restaurarlo. Esto será después de la rotación.

La matriz de traslación inversa es:

T =

⎥⎥⎥⎥

⎢⎢⎢⎢

−−− 1010000100001

TzTyTx

El siguiente paso es rotar con respecto al eje X, esta rotación se hará hasta que el eje general de rotación esté en el plano XZ. Para determinar el ángulo de rotación, colocaremos el vector de dirección en el nuevo origen y consideraremos su proyección en el plano YZ. El segmento de línea entre ( 0, 0, 0 ) y ( A, B, C ) estará en la dirección

43

Graficado por Computadora, FCC BUAP _________________________________________________________________________

del eje general de rotación y dado que ya habíamos hecho traslación, tenemos que el segmento está a lo largo del eje general de rotación. El segmento se proyecta al plano YZ y tenemos que la proyección es el segmento de ( 0, 0, 0 ) a ( 0, B, C ). Vea la figura 3.2.

(0, B, C)

Y (A, B, C)

X

Z

Figura 3.2 Proyección en el plano YZ.

Rotaremos con respecto al eje X hasta que el eje ( A, B, C ) esté en el plano XZ, lo cual es equivalente a que el segmento proyectado coincida con el eje Z. Así la rotación será de acuerdo al ángulo I, mostrado en la figura 3.3.

Z

(0, B, C) V

I

X

Figura 3.3 Vector proyección.

La longitud del segmento proyectado es:

V = ( B * B + C * C )1/2

,

Y

44

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Además:

SIN ( I ) = B / V

COS( I ) = C / V , de tal forma que la rotación con respecto al eje X es:

Rx =

⎥⎥⎥⎥

⎢⎢⎢⎢

−=

⎥⎥⎥⎥

⎢⎢⎢⎢

−10000//00//00001

10000)()(00)()(00001

VCVBVBVC

ICOSISINISINICOS

La transformación inversa es una rotación de igual magnitud y en dirección opuesta.

Recordando que la función coseno es par y la función seno es impar, tenemos que:

COS( -I ) = COS( I ) y SIN( -I ) = -SIN( I )

Podemos tener la matriz de la transformación inversa:

R’x =

⎥⎥⎥⎥

⎢⎢⎢⎢

⎡−

10000//00//00001

BCVBVBVC

Ya que el eje de rotación esta en el plano XZ, y que conocemos la longitud del segmento, que es:

L = ( A * A + B * B + C * C ) 1/2

Podemos ver el ángulo de rotación J, con respecto al eje Y, para que coincidan el eje Z y el eje general de rotación. Ver la figura 3.4.

45

Graficado por Computadora, FCC BUAP _________________________________________________________________________

X

V

A

LJ

Z

Y

Figura 3.4 Ultima rotación que debe ser por

De la definición de seno y coseno tenemos:

SEN( J ) = A / L

COS( J ) = V / L

Y la matriz de rotación del eje Y con un ángulo J es:

Ry =

⎢⎢⎢⎢

−=

⎥⎥⎥⎥

⎢⎢⎢⎢

−0/

0/

10000)(0)(00100)(0)(

LA

LV

JCOSJSIN

JSINJCOS

La inversa para esta transformación es:

R’y =

⎢⎢⎢⎢

⎡ −

000/0/010/0/

LVLA

LALV

el ángulo J.

⎥⎥⎥⎥

1000/00010/0

LV

LA

⎥⎥⎥⎥

1000

46

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Finalmente estamos en posición de rotar con respecto al eje general, en un ángulo θ. Y dado que el eje general coincide con el eje Z, será suficiente rotar con respecto al eje Z y tenemos:

Rz =

⎥⎥⎥⎥

⎢⎢⎢⎢

⎡ −

1000010000)()(00)()(

θθθθ

COSSINSINCOS

Por lo tanto, para tener la transformación de rotación en cualquier eje, en un

ángulo θ, se encontrará la transformación producto:

Rθ = T Rx Ry Rz R'y R'x T' Y Rθ será la matriz que rotará en el eje dado y en el ángulo deseado.

47

Graficado por Computadora, FCC BUAP _________________________________________________________________________

3.5 Proyecciones

Se ha comentado sobre la transformación de objetos en tres dimensiones, pero ya que nuestra superficie de visión (pantalla, graficador, etc.) es de dos dimensiones solamente, debemos tener posibilidad de proyectar nuestro objeto tridimensional a un dispositivo de dos dimensiones. El dispositivo que usaremos será la pantalla. La forma más sencilla es descartar la coordenada Z. Este es un caso especial del método de "proyección paralela". Una proyección paralela es formada trazando líneas paralelas desde cada vértice en el objeto hasta el plano de intersección correspondiente a la pantalla. El punto de intersección es la proyección del vértice. Después se conectan en la pantalla los vértices proyectados, mediante segmentos que correspondan a conexiones en el objeto original.

El caso especial de descartar la coordenada Z, es cuando la pantalla o superficie de visión, es paralela al plano XY, y las líneas de proyección son paralelas al eje Z. Así, las coordenadas X y Y permanecen constantes y la coordenada Z es la que cambia. La forma más sencilla es cuando el centro del objeto es identificado con el centro de la pantalla y el eje Z es perpendicular a la pantalla. Además los ejes X y Y del objeto tienen el mismo sentido que los ejes X y Y de la pantalla, por lo tanto, la imagen proyectada es formada de las coordenadas X y Y del objeto y la coordenada Z es descartada.

Ver la figura 3.5.

Y Z X

Figura 3.5 Proyección paralela.

Por ejemplo, la proyección paralela del cubo ( +-1, +-1, +-1) aparecerá en la pantalla como el cuadrado ( +-1, +-1 ).

La proyección paralela es una técnica útil para mostrar figuras tridimensionales, sin embargo no toma en cuenta la perspectiva. En el mundo real las líneas paralelas que se alejan dan la impresión al observador de irse juntando.

La segunda forma de proyectar objetos tridimensionales a dos dimensiones es la "proyección perspectiva". Como ya sabemos, el ojo no puede ver todo el espacio, y su visión está limitada a un cono de rayos que llegan a la retina.

48

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Para formar la visión perspectiva del espacio, se coloca un "plano perspectivo" perpendicular al eje del "cono de visión" y simplemente proyectamos cada punto del objeto al plano, como se muestra en la figura 3.6. Y

X

P

Figura 3.6 Pro

Este plano perpendicular al eje plano del dispositivo de graficación ( plas coordenadas del punto proyectado en lfácilmente a partir de las coordenadas decoordenadas del usuario ( note la posición d

Considere el plano YeZe, que se mu

O D

Figura 3.7 Vista de l Los triángulos OQ'P' y OQP son semejante

Ys / D De una manera similar, en el plano XeZe, o

Xs / D

P’

Z

yección perspectiv

del cono de visiónantalla, graficadoa pantalla P' = ( Xl punto P = ( Xel ojo en la figura

estra a continuació

PP’

Q’ Q

os triángulos seme

s, de donde obtenem

= Ye / Ze

btenemos:

= Xe / Ze

a

se hace corresponder con el r, etc. ), de tal manera que s, Ys ) pueden ser calculadas e, Ye, Ze ) del sistema de 3.6 ).

n:

jantes.

os la relación:

49

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Ya que se tienen las coordenadas Xs y Ys, se afectarán por el tamaño de la pantalla. De tal manera tenemos:

Xs = ( D * Xe ) / ( S * Ze )

Ys = ( D * Ye ) / ( S * Ze ) Y en notación matricial:

[ ] [ ] ⎥⎦

⎤⎢⎣

⎡=

ZeSDZeSD

YeXeYsXs*/0

0*/*

Las coordenadas Xs y Ys correspondientes a la pantalla, podrán ser convertidas a coordenadas de pantalla correspondientes a una región dada ( puerto de visión ).

Las coordenadas correspondientes al puerto de visión son:

Xs = ( ( D * Xe ) / ( S * Ze ) ) * Vsx + Vcx

Ys = ( ( D * Ye ) / ( S * Ze ) ) * Vsy + Vcy donde el centro del puerto de visión es el punto ( Vcx, Vcy ) y tiene 2*Vsx unidades de ancho y 2*Vsy unidades de alto.

La perspectiva es una transformación fundamentalmente diferente a la rotación, traslación y escala, dado que divide por el valor de la coordenada Ze. Mientras que las otras involucran solamente multiplicaciones y sumas.

La generación de una imagen verdaderamente perspectiva requiere dividir cada punto entre su profundidad. Afortunadamente, la imagen perspectiva de una línea puede ser generada fácilmente, transformando solamente sus puntos extremos, y dibujando la línea entre los dos puntos obtenidos. Es decir, es una transformación rígida.

50

Graficado por Computadora, FCC BUAP _________________________________________________________________________

3.6 Líneas ocultas

Para pintar cuerpos opacos en la pantalla, los programas de graficado deben decidir cuáles partes son visibles y cuáles ocultas, de tal manera que las partes ocultas no sean pintadas.

En la vida real, el material opaco de los objetos obstruye el paso de los rayos de luz que provienen de las partes ocultas y por esa razón no son vistas.

Al generar por computadora una imagen, la eliminación no es automática cuando los objetos son proyectados en la pantalla. La tarea de decidir cuáles partes de un objeto deben mostrarse y cuáles omitirse fue originalmente conocido como el "problema de la líneas ocultas" .

El uso de algoritmos para resolver los problemas de líneas ocultas permiten obtener imágenes más reales.

No existe un algoritmo general para resolver eficientemente el problema de líneas ocultas, es por esto que los programadores de sistemas gráficos deben crear sus propios algoritmos adecuados al problema que desean atacar. Los algoritmos de líneas ocultas son normalmente los más importantes y complicados de los sistemas gráficos, aunque existen ya muchos trabajos en ese sentido .

Comentaremos en la siguiente sección ejemplos de algoritmos elementales para algunas aplicaciones básicas.

51

Graficado por Computadora, FCC BUAP _________________________________________________________________________

3.6.1 Algoritmo del pintor

Como su nombre lo indica, el algoritmo del pintor se basa en el procedimiento que se utiliza para crear una pintura al óleo. El artista principia con una capa base de algún color que constituir el "fondo" de la pintura, la cual puede llenar toda el área de trabajo. Posteriormente, pinta los objetos más alejados como pueden ser montañas, caminos, etc. Y así continúa pintando los objetos uno por uno hasta terminar pintando al objeto más cercano. El artista determina de esta manera un orden de pintado en base a la distancia de los objetos al pintor. Se pintan primero los objetos más lejanos y después los más cercanos. Con este proceso, los objetos más cercanos tapan a los más lejanos y como se usa pintura de óleo, no es necesario ir borrando.

Dicho procedimiento es muy usado aunque es claro que este algoritmo es útil para pantallas únicamente, ya que en graficadores se tendrían manchas de tonalidades diferentes de acuerdo a los colores usados.

Ejemplos del uso del algoritmo del pintor pueden ser las caricaturas, en las cuales se tiene el cielo, las nubes, los árboles y finalmente los personajes. Todos estos objetos se pintan en ese orden y como se usa una pantalla de color entonces los últimos objetos tapan efectivamente a los primeros. Vea la figura 3.8.

Figura 3.8 Ejemplo del algoritmo del pintor

Otro ejemplo es el despliegue del Sistema Solar, en el cual el observador está en

algún lugar fuera de dicho sistema. Se calcula la distancia desde el observador a todos y cada uno de los planetas. El pintado de los planetas en la pantalla se hace en forma ordenada con respecto a la distancia, es decir, primero se pinta el planeta más lejano, después los siguientes y por último el planeta más cercano.

Como se puede observar debe existir un orden en los objetos para poder usar este algoritmo y tener una pantalla como dispositivo de despliegue.

52

Graficado por Computadora, FCC BUAP _________________________________________________________________________

3.6.2 Algoritmo de Cuerpos Convexos

El algoritmo de cuerpos convexos requiere que el objeto a graficar sea, como su nombre lo indica, un cuerpo convexo. Un cuerpo convexo en tres dimensiones es aquel que dados dos puntos cualesquiera del cuerpo, la línea que los une está totalmente contenida en el cuerpo.

El algoritmo puede ejemplificarse en forma sencilla si colocamos el objeto centrado en el origen y el ojo del observador en algún punto sobre el eje Z, como se muestra en la figura 3.9.

X

Y

Z

Figura 3.9 Algoritmo de cuerpos convexos.

De esta forma cualquier cara del objeto podrá ser vista por el observador si y solamente si el plano infinito que contiene a esa cara, corta el segmento de línea formado por el ojo del observador y el origen.

Si suponemos que el ojo del observador está en las coordenadas ( 0, 0, Ojo ) donde Ojo es un valor fijo, entonces una cara se pinta si el segmento de línea de ( 0, 0, Ojo ) a ( 0, 0, 0 ) es cortado por el plano. Y si el corte esta fuera del segmento, entonces esa cara no se pinta. Ver la figura 3.10.

(0, 0, Ojo)

O

e

d

c

b

a

Figura3.10 Planos cortando al eje Z.

53

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Las caras a y b sí deben pintarse ( si cortan al segmento ) y las caras c, d y e no se pintan.

En la realización del algoritmo, para ver si una cara es visible o no, se toman tres (3) puntos de la cara y se encuentra el plano que contiene a dicha cara. La ecuación es de la forma:

a * X + b * Y + c * Z = d

Pasando la ecuación del plano a su forma funcional, se tiene que:

f (x,y,z) = a * X + b * Y + c * Z - d y se puede saber si el origen ( 0, 0, 0 ) y el observador ( 0, 0, Ojo ) están en el mismo lado del plano. Esto por comparar los signos de f ( 0, 0, 0 ) con el signo de f ( 0, 0, Ojo).

Si los signos son iguales quiere decir que están del mismo lado y el segmento no es cortado por el plano. Si los signos son diferentes, implica que los puntos están en lados opuestos y el segmento sí es cortado por el plano.

Este cálculo debe ser hecho para cada cara; si la cara es visible, todas sus orillas serán anexadas a una lista para posteriormente pintarse. Naturalmente la línea que sea parte de dos caras visibles aparecerá dos veces en la lista y debe suprimirse ese caso.

El algoritmo de cuerpos convexos es adecuado para ser utilizado en el graficador ya que al final del proceso solamente se pintan las líneas que son visibles, es decir no se necesita borrar nada del área de trabajo.

Un ejemplo del algoritmo de cuerpos convexos es el dibujar al planeta tierra, donde dicho planeta está descrito en base a caras ; como es de forma convexa se puede realizar fácilmente. El planeta puede tener asociado a cada cara el plano de los continentes.

Otro ejemplo sencillo en el uso del algoritmo de cuerpos convexos es el dibujar una casa que tiene forma convexa. Este ejercicio puede ser más atractivo si se le anexa material a las paredes.

54

Graficado por Computadora, FCC BUAP _________________________________________________________________________

3.7 Ejemplos

Ejemplo 1 : SISTEMA ARQUITECTONICO

Hacer un editor elemental de planos en dos dimensiones que permita:

a) Pintar y borrar paredes. b) Seleccionar el material de las paredes. c) Definir puertas y ventanas ( una por pared ). d) Mostrar la casa en tres dimensiones. e) Imprimir el plano de la casa. f) Salvar y recuperar planos del disco. g) Ayuda.

Para facilitar el ejercicio las paredes pueden ser paralelas a los ejes coordenados y se

pueden pintar sólo cuatro paredes.

En la opción de mostrar la casa en tres dimensiones se pasa a un submenú que contiene las siguientes alternativas:

a) Rotar la casa con respecto al eje X ( 15 grados ). b) Rotar la casa con respecto al eje Y ( 15 grados ). c) Rotar la casa con respecto al eje Z ( 15 grados ). d) Mostrar la casa más grande. e) Mostrar la casa más chica. f) Mostrar la casa con líneas ocultas. g) ayuda.

Este ejercicio se puede extender tanto como sea necesario. Puede tener muros de diferentes materiales, diferentes colores, incluir sombras, muebles, etc., etc.

55

Graficado por Computadora, FCC BUAP _________________________________________________________________________

BIBLIOGRAFIA GRAFICADO

[0] Donald Hearn, M. Pauline Baker . Graficas por Computadora. Prentice Hall.

[1] Angell, Ian O.

A Practical Introduction to Computer Graphics. McMillan Press, 1981.

[2] Foley, J.

Fundamentals of Interactive Computer Graphics. Addison Wealey.

[3] Giloi, W.

Interactive Computer Graphics: Data Structures, Algorithms, Languages. Prentice Hall, 1978.

[4] Harrington, Steven

Computer Graphics: A Programming Approach. McGraw-Hill, 1983

[5] Newman, W. M. & Sproull, R. F.

Principles of Interactive Computer Graphics. McGraw-Hill, 2a. ed., 1979.

[6] Standhammer, J. & Khurama, A.

Display of Molecular Models With Interactive Graphics. IEE Computer Graphics & Applications, January 1986.

[7] Sutherland, I. E., Sproull, R. F. & Schumacker, R. A.

A Characterization of Ten Hidden-Surface Algorithms. Computing Surveys, Vol. 6, No. 1, 1974.

PROGRAMACION

[8] Sedgewick, R. Algorithms. Addison Wesley , 1984.

56

Graficado por Computadora, FCC BUAP _________________________________________________________________________

[9] Trembray & Sorenson.

An Introduction to Data Structures With Applications McGraw-Hill.

[10] Turbo Pascal V. 3.0

Borland International Inc., 1985.

[11] Wirth, N. Algorithms + Data Structures = Programs. Prentice Hall, 1976.

MATEMATICAS

[12] Efimov, N. Curso Breve de Geometría Analítica. Editorial MIR, 1969.

[13] Lang, Serge.

Algebra Lineal. Addison-Wesley

[14] Lehman,

Geometría Analítica.

[15] Seidenberg, A. Elementos de Geometría Proyectiva. Editorial CECSA, 1965

[16] Strang, Gilbert.

Linear Algebra and Its Applications. Academic Press, 1980.

57

Graficado por Computadora, FCC BUAP _________________________________________________________________________

APENDICE A

IMPRESORAS Eduard Puigdemunt i Gelabert

Tipos de Impresoras

Según la tecnología que emplee se puede hacer una primera clasificación. Las tecnologías más comunes son las siguientes: Matricial, de inyección de tinta (o inkjet ) y láser. Ver la figura A.1.

Figura A.1 Impresora matricial, inyección de tinta y láser.

Matriciales

Las impresoras matriciales han sido muy utilizadas durante muchos años, ya que las otras tecnologías fueron desarrolladas posteriormente, y en un principio eran muy caras. Hoy en día han sido sustituidas en muchos entornos por sus competidoras, pero todavía son irreemplazables en algunas tareas. Ver figura A.1. Así pues, son las únicas que permiten obtener varias copias de un misma impresión. Esto resulta muy conveniente cuando se tiene la necesidad de realizar varias copias de un mismo documento con la mayor rapidez y que se ejecuten en distintos impresos. Por ejemplo, cuando se necesita que cada copia esté hecha en un papel de distinto color, y con algún texto o figura distintiva. En este caso, mediante papel con autocopiado de varias hojas lo podemos realizar de una forma rápida y barata, principalmente cuando la información es de tipo textual.

Al igual que los otros tipos de impresora, sus características básicas a considerar son la velocidad, la calidad y la posibilidad de impresión en color. La velocidad se mide en cps o caracteres por segundo, ya que como hemos dicho esta es la principal función que suelen realizar. La calidad normalmente viene marcada por el número de agujas, que suelen oscilar entre las 8 y las 24, siendo de mejor calidad las de 24.

58

Graficado por Computadora, FCC BUAP _________________________________________________________________________

A pesar de que en un principio se desarrolló la tecnología matricial en color como competencia directa con las de inyección de tinta, actualmente las impresoras que encontramos suelen ser monocromáticas, ya que no es la tecnología más adecuada para la impresión de colores, sobretodo en modos gráficos.

Sus principales características son su elevado ruido, y su poca definición, pero como

ventajas podemos considerar su economía en el costo de la impresora, en su mantenimiento y el costo de los cintas. Son aconsejables para la impresión de texto, siempre que éste no requiera gran calidad, y mayormente cuando empleamos papel contínuo.

Inyección de tinta (inkjet)

Aunque en un principio tuvo que competir duramente con sus adversarias matriciales, hoy son las reinas indiscutibles en el terreno doméstico, ya que da economía de compra y calidad El imprimir tanto en color como en blanco y negro son factores mucho más importantes que la velocidad o la economía de mantenimiento, ya que el número de copias realizadas en estos entornos es bajo.

Su funcionamiento se basa en la expulsión de gotas de tinta líquida a través de unos

inyectores que impactan en el papel formando los puntos necesarios para la realización de gráficos y textos. La tinta se obtiene de unos cartuchos reemplazables que dependiendo del tipo de impresora pueden ser uno o varios.

Algunas impresoras utilizan dos cartuchos, uno para la tinta negra y otro para color,

en donde suelen estar los tres colores básicos. Estas impresoras tienen como virtud la facilidad de manejo, pero en contra, si utilizamos más un color que otro, nos veremos obligados a realizar la sustitución del cartucho cuando cualquiera de los tres colores se agote, aunque en los demás compartimentos todavía nos quede tinta de otros colores. Esto hace que estas impresoras sean bastante más caras de mantenimiento que las que incorporan un cartucho para cada color, pero también suelen ser más económicas en el precio de compra.

También podemos encontrar las famosas impresoras con calidad fotográfica, que suelen contar con cartuchos de 4 colores en vez de 3.

Las características principales de una impresora de inyección de tinta son la

velocidad, que se mide en páginas por minuto y que suele ser distinta dependiendo de si imprimimos en color o en monocromo, y la resolución máxima, que se mide en puntos por pulgada.

59

Graficado por Computadora, FCC BUAP _________________________________________________________________________

Láser

Las últimas impresoras que vamos a ver van a ser las de tecnología láser. Esta tecnología es la misma que han utilizado mayormente las máquinas fotocopiadoras desde un principio, y el material que se utiliza para la impresión es un polvo muy fino que pasa a un rodillo que previamente fue magnetizado en las zonas que contendrán la parte impresa, es pasado a muy alta temperatura por encima del papel, que por acción de dicho calor se funde y lo impregna.

Estas impresoras suelen ser utilizadas en el mundo empresarial, ya que su precio es

más alto que el de las de inyección de tinta, pero su costo de mantenimiento es más bajo. Existen dispositivos con una muy alta velocidad por copia, calidad y disponibilidad superiores, así como también admiten una mayor carga de trabajo.

Un inconveniente es que aún existiendo modelos en color, su precio todavía sigue

siendo astronómico para la mayor parte de economías, y su velocidad es relativamente baja, siendo los modelos más habituales los monocromáticos.

En los últimos años la característica más importantes de estas impresoras es el

incremento de velocidad, medida en páginas por minuto. Su resolución también puede ser muy elevada y su alta calidad. Empiezan a ser habituales resoluciones de 1200 puntos por pulgada y velocidades de 16 páginas por minuto, aunque esta velocidad puede ser mucho mayor en modelos preparados para grupos de trabajo, hasta 40 páginas por minuto.

Otras características importantes son la cantidad de memoria disponible y el

modelo de procesador, que suele ser de tipo RISC. La memoria es importante para actuar como "buffer" en donde almacenar los trabajos que le van llegando y para almacenar fuentes y otros motivos gráficos o de texto que permitan actuar como "preimpresos" e imprimirlos en cada una de las copias sin necesidad de mandarlos en cada página.

60