20190101

Capitulo 5 Transformaciones Geometricas (Foley) 2a Parte


5.4 LA TRANSFORMACION DE VENTANA A PUERTO DE VISTA

Algunos paquetes de gráficos permiten que el programador especifique coordenadas primitivas de salida en un sistema de coordenadas mundiales de punto flotante, utilizando cualquier unidad que sea significativa para el programa de aplicación: angstroms, micrones, metros, millas, años luz, etc. El término mundo se usa porque el programa de aplicación representa un mundo que se crea o muestra interactivamente al usuario. Dado que las primitivas de salida se especifican en coordenadas mundiales, se debe indicar al paquete de subrutinas gráficas cómo asignar coordenadas mundiales a coordenadas de pantalla. Podríamos hacer este mapeo haciendo que el programador de aplicaciones proporcione el paquete de gráficos con una matriz de transformación para efectuar el mapeo. Otra forma es hacer que el programador de la aplicación especifique una región rectangular en coordenadas mundiales, llamada ventana de coordenadas mundiales, y una región rectangular correspondiente en coordenadas de pantalla, llamada ventana gráfica(viewport), en la que se asignará la ventana de coordenadas mundiales. La transformación que asigna la ventana a la ventana gráfica se aplica a todas las primitivas de salida en las coordenadas mundiales, por lo que las asigna a las coordenadas de la pantalla. La figura 5.10 muestra este concepto.


Fig 5.10 La ventana en coordenadas mundiales y la ventana gráfica(viewport) en coordenadas de pantalla determinan el mapeo que se aplica a todas las primitivas de salida en coordenadas mundiales.
  Como se ve en esta figura, si la ventana y la ventana gráfica(viewport) no tienen la misma relación altura-ancho, se produce una escala no uniforme. Si el programa de aplicación cambia la ventana o la ventana gráfica, las nuevas primitivas de salida dibujadas en la pantalla se verán afectadas por el cambio. Las primitivas de salida existentes no se ven afectadas por tal cambio.


Dada una ventana y una ventana gráfica(viewport), ¿cuál es la matriz de transformación que mapea la ventana de coordenadas mundiales a la ventana gráfica(viewport) en coordenadas de pantalla? Esta matriz se puede desarrollar como una composición de transformación de tres pasos, como se sugiere en la Fig. 5.11.

Fig 5.11 Los pasos para transformar una ventana de coordenadas mundiales en un viewport.
 

La ventana, especificada por sus esquinas inferior izquierda y superior derecha, se traslada primero al origen de las coordenadas mundiales. A continuación, el tamaño de la ventana se escala para que sea igual al tamaño de la ventana gráfica(viewport). Finalmente, se utiliza una traslación para posicionar la ventana gráfica(viewport). La matriz general Mwv es:


Multiplicando P = Mwv[x y 1]^T nos da el resultado esperado:


Muchos paquetes de gráficos combinan la transformación ventana a ventana gráfica(viewport) con el recorte de primitivas de salida contra la ventana. El concepto de recorte se introdujo en el Capítulo 3; La figura 5.12 ilustra el recorte en el contexto de ventanas y ventanas gráficas.

Fig 5.12 Las primitivas de salida en coordenadas mundiales se recortan contra la ventana.
Los que quedan se muestran en la ventana gráfica(viewport).

5.5 EFICIENCIA

La composición más general de las operaciones R, S y T produce una matriz de la forma
(5.35)
 La submatriz superior 2X2 es una matriz compuesta de rotación y escala, mientras que tx y ty son traslaciones compuestas. El cálculo de M • P como un vector multiplicado por una matriz de 3 X 3 toma nueve multiplicos y seis sumas. La estructura fija de la última fila de la ec. (5.35), sin embargo, simplifica las operaciones reales para


reduciendo el proceso a cuatro multiplicaciones y cuatro sumas, una aceleración significativa, especialmente porque la operación se puede aplicar a cientos o incluso miles de puntos por imagen. Por lo tanto, aunque las matrices 3x3 son convenientes y útiles para componer transformaciones 2D, podemos usar la matriz final de la manera más eficiente en un programa al explotar su estructura especial. Algunos multiplicadores de matriz de hardware tienen sumadores y multiplicadores paralelos, lo que disminuye o elimina esta preocupación.

Otra área en la que la eficiencia es importante es crear vistas sucesivas de un objeto, como una molécula o un avión, rotadas algunos grados entre cada vista sucesiva. Si cada vista se puede crear y mostrar lo suficientemente rápido (de 30 a 100 milisegundos cada una), entonces el objeto parecerá estar girando dinámicamente. Para lograr esta velocidad, debemos transformar cada punto y línea individual del objeto lo más rápido posible. Las ecuaciones de rotación (ecuación (5.6)) requieren cuatro multiplicaciones y dos sumas. Podemos disminuir el conteo de operaciones reconociendo que, como θ es pequeño (solo unos pocos grados), cosθ está muy cerca de 1. En esta aproximación, Eq. (5.6) se convierte en


lo que requiere solo dos multiplicaciones y dos sumas. El ahorro de dos multiplicaciones puede ser significativo en las computadoras que carecen de multiplicadores de hardware.
Sin embargo, la ecuación (5.37) es solo una aproximación a los valores correctos de x' y y': se genera un pequeño error. Cada vez que las fórmulas se aplican a los nuevos valores de x o y, el error se vuelve un poco más grande . Si repetimos las fórmulas indefinidamente, el error abrumará los valores correctos y la imagen giratoria comenzará a parecer una colección de líneas dibujadas al azar.
Una mejor aproximación es usar x' en lugar de x en la segunda ecuación:


Esta es una mejor aproximación que la ecuación. (5.37) porque el determinante de la matriz 2x2 correspondiente es 1, lo que significa que las áreas transformadas por la ecuación. (5.38) se mantienen sin cambios. Tenga en cuenta que también pueden surgir errores acumulativos al usar repetidamente las ecuaciones de rotación correctas.

fuente: Computer Graphics - Principles and Practice in C (2nd Edition).djvu


No hay comentarios:

Publicar un comentario