lunes, 12 de marzo de 2012

2.4 Transformación ventana-área de vista

COLOCACIÓN DE VENTANAS Y RECORTE

Los programas de aplicaciones definen imágenes en un sistema de coordenadas mundiales. Este puede ser cualquier sistema de coordenadas Cartesianas que un usuario halle conveniente. Las imágenes definidas en coordenadas mundiales son procesadas por el sistema de graficas en coordenadas de dispositivo. Comúnmente, un paquete de graficas permite a un usuario especificar qué área de la definición de la imagen se desplegara y donde se colocara en el dispositivo de despliegue. Podría elegirse una sola área para el dispositivo de despliegue o bien podrían seleccionarse varias áreas. Estas áreas pueden colocarse en localidades aparte del despliegue o bien un área puede servir como una pequeña inserción en un área mayor. Este proceso de transformación implica operaciones para trasladar y escalar áreas seleccionadas y para borrar partes de la imagen que estén fuera de las áreas. Estas operaciones se conocen como colocación de ventanas y recorte.

CONCEPTOS DE COLOCACIÓN DE VENTANAS

Un área rectangular que se especifica en coordenadas mundiales se denomina ventana. El área rectangular en el dispositivo de despliegue en el cual se coloca la ventana se llama puerta de visión. La figura 1 ilustra el trazo o planimetría de la selección de una imagen que queda dentro del área de ventana en una puerta de visión designada. Esta planimetría se llama transformación de la visión o bien transformación de normalización.


Los límites de la ventana se especifican en coordenadas mundiales. Las coordenadas de dispositivo normalizadas se usan con mayor frecuencia para la especificación de la puerta visión, aunque las coordenadas del dispositivo pueden emplearse si hay solamente un dispositivo de salida en el sistemas. Cuando se usan coordenadas de dispositivo normalizadas, el programador considera el dispositivo de salida como aquel que tiene valores coordenados dentro del intervalo de 0 a 1.


Figura 2

Planimetría de una ventana en puerta de visión en coordenadas de dispositivo normalizadas.

Las posiciones de coordenadas que se expresan en coordenadas de dispositivo normalizadas deben convertirse a las coordenadas del dispositivo antes de que un dispositivo de salida específico haga el despliegue. Una rutina específica del dispositivo se incluye en paquetes de gráficas con este fin. La ventaja de emplear coordenadas de dispositivo normalizadas es que el paquete de gráficas es considerablemente independiente del dispositivo. Pueden utilizarse distintos dispositivos de salida ofreciendo los conductores adecuados del dispositivo.

Cambiando la posición de la puerta de visión, los objetos pueden desplegarse en diferentes posiciones en un dispositivo de salida. Asimismo, variando el tamaño de las puertas de visión, el tamaño y las proporciones de los objetos pueden alterarse. Cuando se trazan en forma sucesiva ventanas de diferentes tamaños en una puerta de visión, pueden lograrse efectos de acercamiento. Conforme las ventanas se hacen pequeñas, un usuario puede lograr el acercamiento de alguna parte de una escena para visualizar detalles que no se muestran con las ventanas mayores.

Analógicamente, puede obtener un panorama general más amplio realizando un acercamiento de una sección de escena con ventanas cada vez más mayores. Los efectos de toma panorámica se producen moviendo o desplazando una ventana de tamaño fijo a través de una imagen grande.

Un ejemplo del uso de comandos múltiples de colocación de ventanas y puertas de visión se da en el siguiente procedimiento. Se despliegan dos graficas en diferentes mitades de un dispositivo de despliegue (Figura 3).

Figura 3

Despliegue simultaneo de dos gráficas, utilizando especificaciones múltiples de colocación de ventanas y puertas de visión.

Otro método de establecer múltiples áreas para la colocación de ventanas y puertas de visión en un paquete de gráficas consiste en asignar un rotulo a cada especificación. Esto podría hacerse incluyendo un quinto parámetro en los comandos de ventana y puertas de visión para identificar cada área definida. El parámetro puede ser un índice entero (0, 1, 2,…) que numere la definición de la ventana o puerta de visión. Entonces se necesita un comando adicional para indicar un conjunto de proporciones de salida. Este esquema de enumeración podría utilizarse también para asociar una prioridad con cada puerta de visión de manera que la visibilidad de las puertas de visión superpuestas se decida sobre una base de prioridad. En la Figura 4 se muestran puertas de visión desplegadas según su prioridad.

Figura 4

Despliegue de puertas de vision en orden de prioridad. A las puertas de vision con numeración inferior se les da mayor prioridad.

Para implantaciones que incluyen estaciones de trabajo múltiples, podría definirse un conjunto adicional de comandos de colocación de ventanas y puertas de visión. Estos comandos incluyen un número de estación de trabajo para establecer diferentes áreas de ventana y puertas de visión en diferentes estaciones de trabajo. Esto permitirá a un usuario desplegar varias partes de la imagen final en diferentes dispositivos de salida. Por ejemplo, un arquitecto podría desplegar la totalidad de un plano de una casa en un monitor y solamente el segundo piso en un segundo monitor.

ALGORITMOS DE RECORTE

El trazo del área de una ventana en una puerta de visión produce el despliegue solamente de las partes de la imagen que están dentro de la ventana. Todo lo que está afuera de la venta se desprecia. Los procedimientos para eliminar todas las partes de una imagen definida situada fuera de fronteras específicas se conocen como algoritmos de recorte de recorte o simplemente recorte.

La transformación de colocación de ventanas a menudo se realiza por recorte de la ventana, trazando después el interior de la ventana en la parte de visión . Alternativamente, algunos paquetes trazan la definición en coordenadas mundiales en coordenadas de dispositivo normalizadas primero y después se recortan los límites de la puerta de visión.

El recorte de puntos contra una especificación de ventana simplemente significa que se prueban valores coordenados para determinar si están o no dentro de las fronteras. Un punto en la posición (x,y) se salva para la transformación en una puerta de visión si satisface las siguientes desigualdades:

Si alguna de estas cuatro desigualdades no se cumple, el punto se recorta. En la figura 5, el punto P, se salva y el punto P2 se recorta.

FIGURA 5

Recorte de punto y líneas contra una frontera de ventana.

Recorte de Líneas.

La figura 5 ilustra las posibles relaciones existentes entre las posiciones de líneas y las fronteras de ventanas. Se hace la prueba de recorte de una línea determinando si los puntos extremos están dentro o fuera de la ventana.

Un algoritmo de recorte de líneas determina cuales líneas están totalmente dentro de las fronteras de la ventana y las cuáles se recortarán total o parcialmente. Para las líneas que se recortarán en forma parcial, los puntos de intersección con las fronteras de la ventana deben calcularse. Como la definición de una imagen puede contener miles de segmentos de línea, el proceso de recorte debe efectuarse lo más eficientemente posible. Antes de realizar cálculos de intersecciones, un algoritmo debe identificar todas las líneas que se salvarán o que se recortarán por completo. Una vez que se prescinde de estas líneas la determinación de los puntos de intersección de las líneas restantes debe efectuarse con un mínimo de cálculos.

Un punto de vista de recorte de líneas se basa en un esquema de color creado por Cohen y Sutherland. Todos y cada uno de los extremos de las líneas de una imagen son asignados a un código binario de cuatro dígitos o cifras, llamado código de región, que identifica la región coordenada del punto. Las regiones se establecen en relación con las fronteras de la ventana, como se muestra en la figura 6. Cada posición de bit del código de región se utiliza para indicar una de las cuatro posiciones coordenadas relativas del punto con respecto a la ventana: a la izquierda, derecha, arriba o abajo. Numerando las posiciones de los bits del código de región como de 1 a 4 de izquierda a derecha, las regiones coordenadas pueden correlacionarse con las posiciones de los bits como

Bit 1 - Izquierda

Bit 2 - Derecha

Bit 3 - Abajo

Bit 4 – Arriba

FIGURA 6

Códigos binarios de región para extremos de una línea que se usan para definir áreas coordenadas relativas a una ventana.

Un valor de 1 en cualquier posición de bit indica que el punto está en esa posición relativa; en caso contrario, la posición del bit se hace 0. Si un punto está dentro de la ventana, el código de región es 0000. Un punto que está dentro de la ventana, tiene un código de región de 0101.

Los valores de los bits del código de región se determinan comparando los valores coordenados de los extremos (x , y) en los límites de la ventana. El bit 1 se hace 1 si x < xwmin. Los tres valores de los bits pueden determinarse mediante el uso e comparaciones análogas. Para lenguajes en los cuales es posible la manipulación de bits, los valores de los bits del código de región pueden determinarse por medio de estas etapas: (1) Calcule las diferencias entre las coordenadas de los extremos y las fronteras de la ventana. (2) Utilice el bit del signo resultante de cada cálculo de diferencia para fijar el valor correspondiente en el código de región. El bit 1 es el bit signo de x -xwmin ; el bit 2 es el bit signo de xwmax x ; el bit 3 es el signo de y- ywmin y el bit 4 es el bit signo ywmax y.

Una vez que se han establecido códigos de región de todos los puntos extremos de las líneas, se puede determinar rápidamente cuáles líneas están completamente dentro de la ventana y cuales están afuera con toda claridad.

Las líneas que no pueden identificarse como completamente dentro o completamente fuera de una ventana por medio de estas pruebas se verifican de intersección con las fronteras de la ventana. Cómo se muestra en la figura 7 tales líneas pueden o no atravesar el interior de la ventana. Podemos procesar estas líneas comparando un punto externo que esta fuera de la ventana con una frontera de la ventana para determinar qué cantidad de la línea puede despreciarse. Por tanto la parte remanente de la línea se verifica contra las otras fronteras y se continua hasta que la línea se descarta por completo o bien en hasta que se halla una sección en el interior de la ventana. Se construye el algoritmo para verificar extremos de líneas contra las fronteras de ventanas en el orden izquierda, derecha, abajo, arriba.

FIGURA 7

Las líneas que se extiende de una región coordenada a otra pueden atravesar la ventana o bien pueden cortar las fronteras de la ventana sin entrar en la ventana.

Para ilustrar las etapas específicas del recorte de líneas contra las fronteras de ventanas mediante el uso del algoritmo Cohen-Sutherland, se muestra la forma en que las líneas de la figura 7 podrían ser procesadas. Comenzando con el extremo inferior de la línea P1 a P2, se verifica P1 contra las fronteras izquierda, derecha e inferior en turno y se halla que este punto está debajo de la ventana. Después se encuentra el punto de intersección P’1 con la frontera inferior y se desprecia la sección de la línea que va de P1 a P’1. La línea ahora se ha reducido a la sección de P’1 a P2. Como P2 está fuera de la ventana, se verifica este punto extremo contra las fronteras y se observa que está arriba de la ventana. El punto de intersección P’2 se calcula y se salva la sección de la línea P’1 a P’2.

Los puntos de intersección con la frontera de la ventana se calculan mediante el uso de los parámetros de la ecuación de la recta. Para una recta con coordenadas de puntos extremos ( x1, y1) y ( x2, y2), la coordenada y del punto de intersección con una frontera vertical de ventana puede obtenerse con la operación

y = y1 + m ( x - x1)

Donde el valor x se hace igual a xwmin o bien xwmax y la pendiente m se calcula como = ( y2y1) / ( x2x1). Analógicamente, se busca la intersección con una frontera horizontal, la coordenada x puede calcularse como

Con y que se hace igual a ywmin o bien ywmax .

Cada calculo de una coordenada de punto medio implica sólo una adición y una división por 2 (una operación de corrimiento). Una vez que se han determinado las coordenadas del punto medio, cada mitad de la línea puede ser probada para aceptación o rechazo total. Si la mitad de la línea puede aceptarse o despreciarse, entonces la otra mitad se procesa en la misma forma. Esto continúa haciéndose hasta que se halle un punto de intersección. Si una mitad de la línea no puede ser aceptada o despreciada trivialmente, cada mitad se procesa hasta que la línea se desprecie por completo o bien se advierta una sección visible.

Fonteras de la puerta de visión después de que las descripciones de los objetos se hayan transformado en coordenadas de dispositivo.


Otras técnicas de recorte de líneas que se han creado se valen de una forma paramétricas de la ecuación de la recta. podemos escribir la ecuación de un segmento de recta definido entre los puntos extremos (x1. y1 ) y (x2 y2) en la forma paramétricas.




X=X1 + (X2 .X1)u=X1 + rXu

Y=Y1 + (Y2 .Y1)u=Y1 + rYu

Donde rx=x2 -x1 y ry=y2 -y1. al parámetro u se le asigna valores entre 0 y 1, y las coordenadas (x , y) representan un punto en la línea especificado por un punto en línea especifica por un valor de u =0,( y , x ) = ( x1 , y2 ). en el otro extremo de la línea, u = 1 y ( x, y) = (x2, y2).

un algoritmo de recorte de líneas eficaz que utiliza estas ecuaciones paramétricas ha sido creado por liang y barsky. ambos advierten que si un punto (x. y ) a lo largo de la recta esta dentro de una ventana definida por las coordenadas (xw min yw min) y (xw min yw min) , se cumplen las condiciones siguientes:


xw mín < x1 + rx u < xw mín

yw mín < y1 + ryu < yw mín


estas cuatro desigualdades pueden rescribirse en la forma

pk u < qk, k=1,2,3,4


donde p y q se definen como

p1=-rX, q1=x1 - xwmín q1 =x1 -xw min

p2=rX, q2= xwmáx - x1 q2 =xw máx - x1

p3=-rY, q3=y1 - ywmín q2 =y1 - yw min

p4=ry, q4= ywmáx - y1 q4 =yw máx - y1



Cualquier recta que es paralela a una de las fronteras de la ventana tiene pk = 0 para el valor del correspondiente a la frontera (k - 1, 2, 3 y 4 corresponden a las fronteras de la izquierda, derecha, abajo y arriba, respectivamente). si. para el valor de k, se halla también que 0, entonces la línea está completamente afuera de la frontera y puede eliminarse sin mayor consideración. si a, la recta paralela esta dentro de la frontera.


cuando pt < 0, la extensión finita de la linea procede del exterior por la interior de la extensión infinita de esta frontera particular de la ventana. si pk > 0, la linea procede del interior al exterior. para ten valor de diferente de cero, se puede calcular el valor de u que corresponde al punto donde la línea infinitamente extendida corta la extensión de la frontera de la ventana k como



u=qk/pk



Para cada línea, se pueden calcular los valores de los parámetros h, y u, que definen esa parte de la recta que está dentro de la ventana. El valor de u, de­termina observando las aristas de la ventana para las cuales la línea procede des­de el exterior al interior. Para estas aristas de la ventana, se calcula rt = qk/pk. El valor de u se toma como el mayor del conjunto que consta de 0 y los diversos valores de r. a la inversa, el valor de u2 se determina examinando las fron­teras para las cuales la línea procede del interior al exterior (p > 0). Se calcula „0 valor de rk para cada una de estas fronteras de la ventana y el valor de u2 es el mínimo del conjunto que consta de 1 y de los valores de r calculadas. si u1 > u2 línea está completamente fuera de la ventana y puede despreciarse. en caso contrario, los extremos de la línea recortada se calculan a partir de los dos valores el parámetro u.

Este algoritmo se presenta en el procedimiento que sigue. Los parámetros de intersección de la recta se inicializan a los valores ul = 0 y u2 = 1. Para cada frontera de la ventana, los valores adecuados de p y q se calculan y se utilizan en la función cliptest para determinar si la línea puede despreciarse o si los paráme­tros de intersección se ajustarán. Cuando p < 0, el parámetro r se utiliza para actualizar ul cuando p > 0. el parámetro r se usa para actualizar u2. Si la actualización de u1 o u2 produce ul > u2, se desprecia la línea.

El algoritmo de recorte de líneas de Liang y Barsky reduce las cálculos que se necesitan para recortar líneas. cada actualización de u1 y u2 . Requiere sólo una división y las intersecciones en la ventana de la línea se calculan solamente una vez, cuando los valores de u1 y u2 se hayan terminado. en cambio, el algoritmo de Cohén y Sutherland calcula repetidamente puntos de intersección entre las fronteras de la línea y la ventana y cada cálculo de intersección requiere una división y una multiplicación.

Cuando las ventanas giradas o los polígonos estructurados arbitrariamente se utilizan en ventanas y puertas de visión. los algoritmos de recorte de líneas.

Recortes de Áreas

Las áreas de polígonos se definen especificando una secuencia ordenada de vértices. Para recortar un polígono, se compara cada uno de los vértices en turno contra una frontera de la ventana. Los vértices contenidos dentro de esta arista de esta ventana se salvan para cortarse contra la siguiente frontera; los vértices situados fuera de la arista de la ventana se desprecian. Si se procede desde un punto interno de la arista de la ventana hasta un punto exterior, se salva la intersección como el vértice se salva si se cruza el exterior de la arista de una ventana al exterior. Las cuatro situaciones posibles que pueden ocurrir cuando se procesa un punto (P) y el punto anterior (S) contra la frontera de una ventana.


Una vez que todos los vértices se han procesado de la frontera de la ventana de la izquierda, el conjunto de puntos salvados se recorta contra la siguiente frontera de la ventana.

Recorte de un polígono contra la arista de una ventana, comenzando con el vértice 1. Los números primos se utilizan para rotular los puntos salvados por el algoritmo de recorte.

La implantación del algoritmo como se desarrollo necesita espacio de almacenamiento extra para los puntos salvados. Esto puede evitarse si se toma cada punto que se salvaría e inmediatamente se pasa a la rutina de recorte, junto con las instrucciones para recortarlo contra la siguiente frontera. Se salva un punto (un vértice original o bien una intersección calculada) sólo después de que se haya procesado contra todas las fronteras. Es como si se tuviera una serie de rutinas de recorte, con cada fase de la serie efectuando el recorte contra una frontera diferente de la ventana. Un punto que está dentro o bien sobre la frontera de la ventana en una fase se pasa a la siguiente fase. Un punto que se esté fuera en alguna fase simplemente no continúa en la serie.

Cuando un polígono cóncavo se recorta contra una ventana rectangular, el área recortada final puede representar realmente dos o más polígonos distintos. Como este algoritmo de recorte de áreas produce solo una lista de vértices, estas áreas separadas se unirán con líneas conectivas. Un ejemplo de este efecto se muestra en la siguiente figura.

Pueden darse consideraciones especiales a casos como la supresión de líneas extra o bien pueden emplearse algoritmos de recorte más generales.

El recorte de áreas diferentes a polígonos requieren un poco más de trabajo, ya que las fronteras de las áreas no se definen con ecuaciones de líneas rectas. Por ejemplo, en la siguiente figura, se necesitan ecuaciones de la circunferencia para hallar los dos puntos en la frontera de la ventana.

Recorte de Texto

El método más simple para procesar cadenas de caracteres relativas a la frontera de una ventana consiste en utilizar la estrategia del “recorte de texto todo o nada”. Como se muestra en la siguiente figura. Si la cadena de texto está dentro de una ventana, se conserva. En caso contrario, la cadena se desprecia.

Este procesamiento puede implementarse considerando un rectángulo limítrofe alrededor del modelo de texto. Las posiciones en la frontera del rectángulo se comparan después con las fronteras de la ventana y la cadena se desprecia si hay alguna sobreposición. Este método produce el recorte de textos más rápido.

Una alternativa para despreciar toda una cadena de caracteres que está sobre puesta en una frontera de la ventana consistente en emplear la estrategia “recorte de texto todo o nada”. Aquí se desprecian solo aquellos caracteres que no están completamente dentro de la ventana. En este caso, los límites de la frontera de caracteres individuales se comparan con la ventana. Cualquier carácter que cubre o bien esté fuera de la frontera de una ventana se recorta.









Un método final para manejar el recorte de texto consiste en recortar caracteres individuales. Ahora, los caracteres se tratan casi en la misma forma en que se recortan las líneas. Si un carácter individual cubre una frontera de la ventana, se recortan las partes que están fuera de la ventana. Loa caracteres formados con segmentos de líneas pueden procesarse en esta forma utilizando un algoritmo de recorte de líneas. El procesamiento de caracteres formados con mapas de bits requiere el recorte de pixeles individuales comparando la posición relativa de los modelos de retícula con las fronteras de la ventana.

Antes

Supresión

En vez de salvar información dentro de una región definida, el área de una ventana puede utilizarse para suprimir (borrar) cualquier elemento que éste dentro de sus fronteras. Lo que se salva es lo que está en el exterior.

La supresión de todas las primitivas de salida que están dentro de un área definida es un medio adecuado para superponer diferentes imágenes.

Cuando se van sobreponer dos despliegues utilizando métodos de supresión, un despliegue puede pensarse como el frente y el otro como el fondo. Una ventana con supresión, que encompasa el área de despliegue del frente, se superimpone sobre la imagen del fondo y las partes de la imagen dentro del área de la ventana se suprimen. Después se combinan los dos despliegues con la información del frente colocada dentro del área de la ventana suprimida.

2.4 Transformación ventana-área de vista

El modelo del mundo que se quiere representar almacena los objetos expresados usando un sistema de coordenadas reales llamado sistema de coordenadas del mundo, en el que los objetos se expresan en cualquier unidad que tenga significado par la aplicación.

La aplicación dibuja los objetos en un sistema de coordenadas enteras, llamado sistema de coordenadas de dispositivo. Es necesario hacer una correspondencia que transforme coordenadas de un sistema en otro y viceversa. Lo que hacemos es expresar una ventana en coordenadas del mundo, en un puerto de visión expresado en coordenadas de dispositivo. La pantalla viene definida por un sistema de coordenadas enteras (píxeles).


Estos cálculos de transformación de ventana en puerta de visión pueden expresarse de la siguiente forma:

xv=sx(xw-xwmín)+xvmín

yv=sx(yw-ywmín)+yvmín

Incluyen factores de escalación y traslación.


BIBLIOGRAFIA:

DONALD HEARN / M. PAULINE BAKER

PAG 134-153.

Integrantes:

* Cruz Escudero Paul.
* Hernández Hernández Andrés.
* Ramírez Ovalle Aldo Enrique.
* Torres Hernández Jonathan de Jesús.

Catedrático: Lic. María Alejandra Rosas Toro.

No hay comentarios:

Publicar un comentario