jueves, 19 de septiembre de 2013

UNIDAD 2. GRAFICACION 2D.

GRAFICACION 2D.


La computación gráfica 2D es la generación de imágenes digitales porcomputadora - sobre todo de modelos bidimensionales (como modelos geométricos, texto y imágenes digitales 2D) y por técnicas específicas para ellos. La palabra puede referirse a la rama de las ciencias de la computación que comprende dichas técnicas, o a los propios modelos.



La computación gráfica 2D se utiliza principalmente en aplicaciones que fueron desarrolladas originalmente sobre tecnologías de impresión y dibujotradicionales, tales como tipografía, cartografía, dibujo técnico, publicidad, etc. En estas aplicaciones, la imagen bidimensional no es sólo una representación de un objeto del mundo real, sino un artefacto independiente con valor semántico añadido; los modelos bidimensionales son preferidos por lo tanto, porque dan un control más directo de la imagen que los gráficos 3D por computadora (cuyo enfoque es más semejante a la fotografía que a la tipografía).

En muchos dominios, tales como la autoedición, ingeniería y negocios, una descripción de un documento basado en las técnicas de computación 2D pueden ser mucho más pequeñas que la correspondiente imagen digital, a menudo por un factor de 1/1000 o más. Esta representación también es más flexible ya que puede ser renderizada en diferentes resoluciones para adaptarse a los diferentes dispositivos de salida. Por estas razones, documentos e ilustraciones son a menudo almacenados o transmitidos como archivos gráficos en 2D.

Los gráficos 2D por computadora se han iniciado en la década de 1950, basándose en dispositivos de gráficos vectoriales.1 Éstos fueron suplantados en gran parte por dispositivos basados en gráficos raster en las décadas siguientes. El lenguaje PostScript y el protocolo de sistema de ventanas X fueron piezas claves en la evolución histórica del campo.

2.1 TRAZO DE LINEAS RECTAS.

Las líneas en OpenGL son en realidad segmentos acotados, en lugar de la idea matemática de rectas infinitas. Su definición viene dada por la especificación del valor de sus dos vértices extremos.Consideremos una línea recta que pasa por dos puntos P1=[20, 20] y [25,20]. Podemos calcular la línea recta que pasa por estos puntos como
(y-y1) = (y2-y1)*(x-x1)/(x2-x1)
Sustituyendo los valores tenemos
(y-20) = (21-20)*(x-20)/(25-20)
Finalmente tenemos
y = 0.2 x + 16



Podemos calcular los valores utilizando el siguiente código
void linea(int x0, int y0, int x1, int y1)
{ int x;
float dy, dx, y, m;
dy = y1 - y0;
dx = x1 - x0;
m = dy/dx;
y = y0;
for(x = x0; x <= x1; x++)
{ escribir_pixel(x, (int) floor(y+0.5) );
y +=m; } }
Note que se suma 0.5 y se calcula la parte entera para redondear la solución.



2.2 REPRESENTACIÓN Y TRAZO DE POLÍGONOS.
OpenGL maneja polígonos correctamente siempre y cuando sean simples y convexos. Si ese no es el caso, OpenGL dibuja cosas raras.
Además en algunas ocasiones se quiere especificar el vector normal del plano en el cual se encuentra el polígono. Dicho vector normal se necesita p.e. para algoritmos de visualización avanzada (``Phong shading'').
Cuando se escriben aplicaciones gráficas nos enfrentamos con el problema siguiente: desde alguna fuente ``vienen'' listas de puntos (o bien de otro programa, o bien de un fichero, o bien de modo interactivo) y hay que interpretar las listas como polígonos, es decir, hay que verificar si las listas cumplen la definición de especificar polígonos simples y convexos. Si ese no es el caso, a lo mejor se pueden ``corregir'' las listas. (Programas con tal propiedades se llama robustos y tolerantes.)

Entonces (en el caso de mera visualización con OpenGL):
Se puede eliminar puntos múltiples consecutivos en la lista.
Se puede intentar calcular el plano en el cual se encuentran más o menos los puntos del polígono (eso no es tan trivial).
En dicho plano, es decir, una vez corregidos los puntos hasta que se encuentren exactamente en el plano, se puede verificar si el polígono es simple y convexo (eso es algo bastante fácil).
Si no es así, se podría subdividir el polígono en partes simples y convexos para seguir trabajando después con las partes sin problemas (este paso no lo vamos a realizar en estas prácticas).
Antes de dedicarnos a los detalles, dibujamos polígonos con OpenGL asumiendo que la lista de puntos cumple la definición.
Siempre que se quiera dibujar un objeto de OpenGL (en este caso unos polígonos, antes vimos puntos y segmentos), hay que decírselo de antemano con la función
glBegin()
La lista de puntos se define con consecutivas llamadas a
glVertex*()
y se termina el trabajo con
glEnd()
En lugar de dibujar polígonos rellenados, OpenGL puede dibujar, o bien solo las esquinas o bien solo los segmentos del borde. Eso se realiza con la función
glPolygonMode() a la cual hay que pasar también cuál de las dos posibles caras del polígono se quiere pintar.
Además se pueden llenar los polígonos con patrones que no detallamos por el momento.
glEnable()
glPolygonStipple()

ALGORITMO DDA PARA GENERACIÓN DE LÍNEAS.

El algoritmo de Bresenham es un algoritmo creado para dibujar rectas en los dispositivos de gráficos rasterizados, como por ejemplo un monitor de ordenador, que determina qué pixeles se rellenarán, en función de la inclinación del ángulo de la recta a dibujar.

Este Algoritmo sirve para Generar Una Línea Recta , y Para eso Hace Uso de La pendiente Y de los Incrementos en X, Y.

ALGORITMO DE BRESENHAM PARA TRAZAR LÍNEAS
El algoritmo de Bresenham es un algoritmo que determina los puntos en un mapa de bits de n dimensiones que deben ser trazados con el fin de formar una aproximación a una línea recta entre dos puntos dados.

Es comúnmente usado para dibujar líneas en una pantalla de ordenador, ya que utiliza sólo adición de enteros, la resta y desplazamiento de bits, que son operaciones muy barato en las arquitecturas de ordenador estándar. Es uno de los primeros algoritmos desarrollados en el campo de gráficos por ordenador. Una extensión menor a la del algoritmo original también se ocupa de dibujar círculos.


ALGORITMO DE BRESENHAM PARA TRAZAR CIRCUNFERENCIAS
En graficación, el algoritmo de “mid point circle” es un algoritmo utilizado para determinar los puntos necesarios para dibujar un círculo.

El algoritmo es una variante del algoritmo de la línea Bresenham, por lo que es a veces conocido como algoritmo de círculo Bresenham, aunque en realidad no inventada por Bresenham. El algoritmo comienza en consecuencia con el círculo de la ecuación

x2+y 2=r2.

Así, el centro del círculo se encuentra en (0,0). Consideramos que sólo la primera el octante primera y trazar una curva que comienza en el punto (r,0) y hacia arriba los ingresos ya la izquierda, llegando al ángulo de 45 °. La dirección “rápida” aquí es la dirección vertical. El algoritmo hace siempre un paso en la dirección positiva (hacia arriba), y de vez en cuando también tiene que hacer un paso en la "lenta" la dirección, la dirección x negativa. De la ecuación de un círculo se obtiene la ecuación transformada

x2+y 2-r2= 0, donde r2 se calcula sólo una sola vez durante la inicialización.


2.3.1 TRASFORMACIÓN BIDIMENSIONAL.

Todo cuerpo representado en un plano puede sufrir varios tipos de transformaciones en su estructura. Las transformaciones de tipo básico, como pueden ser la traslación,  Escalamiento y rotación de objetos.

Un objeto definido se construye a partir de una serie de puntos coordenados, desde los cuales se pueden aplicar diversas fórmulas para realizar un cambio de la figura.






2.3.1.Traslación.

Se pueden encontrar varias definiciones de traslación
Una traslación es el movimiento en línea recta de un objeto de una posición a otra.
Movimiento de una figura, sin rotarla ni voltearla. "Deslizar".

La figura sigue viéndose exactamente igual, solo que en un lugar diferente.
Se aplica una transformación en un objeto para cambiar su posición a lo largo de la trayectoria de una línea recta de una dirección de coordenadas a otra.
Ejemplos:


2.3.2.Rotación.

Para rotar un objeto (en este caso bidimensional), se ha de determinar la cantidad de grados en la que ha de rotarse la figura. Para ello, y sin ningún tipo de variación sobre la figura, la cantidad de ángulo ha de ser constante sobre todos los puntos.

Otra forma de conseguir la rotación, respecto a un punto de movimiento, es fijar los diferentes puntos respecto a un punto de fijación siendo los puntos que forman la figura, relativos a este.
La fórmula a aplicar en este último supuesto, sería la siguiente:
X' = X * Cos (àngulo) - Y * Sin(ángulo)
Y' = Y * Cos (ángulo) - X * Sin(ángulo).



2.3.4. Escalación.

Una transformación para alterar el tamaño de un objeto se denomina escalación.

Dependiendo del factor de escalación el objeto sufrirá un cambio en su tamaño pasando a ser mayor, o menor en su segmento de longitud.
Esta es la transformación del objeto especialmente interesante, pues con ella se consigue el efecto Zoom.

Ejemplos:


2.4. REPRESENTACIÓN MATRICIAL.

La representación tradicional de un grafo consiste en un conjunto de puntos que representan los nodos unidos por unas líneas que unen aquellos nodos relacionados. No obstante, cuando el número de nodos se empieza a hacer elevado (por encima de unos 20 nodos y 20-30 enlaces para algunos autores), los problemas de oclusión entre enlaces e incluso entre los propios nodos comienzan a prevalecer y hacen muy difícil la comprensión y la interacción con la representación.Una representación alternativa que, pese a su relativo desconocimiento, resulta muy útil es la matricial.
Para nuestros efectos la representación matricial es una disposición en filas y columnas en las que cada fila y cada columna representa un nodo y en las intersecciones entre ellas se coloca un 0 o un 1 (o un cuadrado de color o su ausencia) para denotar que hay un enlace entre los nodos correspondientes.
Así pues lo que pintamos es una matriz booleana de conectividad, también llamada matriz de adyacencia. Fijémonos que ello nos permite visualizar enlaces uno a uno, uno a muchos y muchos a uno de manera muy sencilla.
Obviamente el paradigma matricial se puede extender más allá de la matriz de adyacencia asignando una variable visual como por ejemplo el color a cada celda en función del valor de una variable como por ejemplo el tráfico de un enlace web o el número de publicaciones de las que dos nodos son co-autores.
Representación matricial de un grafo: Cada dimensión se representa en un eje paralelo a los de las demás dimensiones. En este caso en cada fila y columna se hallan miembros del Xerorx PARC y se puede ver quien colabora con quien





La disposición matricial garantiza que no hay oclusión ni entre enlaces ni entre nodos. Por otro lado el estudio de los patrones visuales que surgen permite identificar agrupaciones y "comunidades" permutando el orden de filas y columnas de manera que los nodos más enlazados mutuamente se encuentren cercanos.
Ventajas

Ausencia de oclusión entre los nodos, lo que permite siempre leer su etiqueta.
No hay cruzamiento entre enlaces , lo que permite identificar fácilmente el origen y el destino del enlace.
Fácil identificación de la ausencia de conexiones.
Supera sistemáticamente a los grafos en diferentes tareas como contar nodos, encontrar enlaces etc cuando el número de nodos supera los 20.Inconvenientes.



Para un mismo nivel de detalle se requiere un espacio mayor que en el grafo tradicional.
Para redes pequeñas (<20 nodos, 20-30 enlaces) el grafo es más efectivo.
Mayor dificultad para seguir caminos (por ejemplo del nodo A al B pasando por el C)
Falta de familiaridad, constituyen un paradigma mucho menos conocido e intuitivo.
Se pueden volver a formular las representaciones de la matriz de modo que se pueden procesar de manera eficiente esas secuencias de transformación. Es posible expresar cada una de las transformaciones básicas en la forma de matriz general con las posiciones de coordenadas P y P’ representadas como columnas de vector.
P' = M1·P + M2
La matriz M1 es una matriz de 2 por 2 que contiene factores de multiplicación y M2 es una matriz de columnas de dos elementos que contiene términos de traslación. Para la traslación, M1 es la matriz de identidad. Para la rotación o la escalación M2 contiene los términos de traslación asociados con el punto pivote o el punto fijo de escalación.
Un planteamiento más eficiente combinaría las transformaciones de manera que se obtengan las coordenadas finales directamente a partir de las coordenadas iniciales para eliminar el cálculo de coordenadas intermedias. De esta manera, se debe de formular nuevamente la ecuación para eliminar la adición de la matriz asociada con los términos de la traslación M2.
Para expresar cualquier transformación bidimensional como una multiplicación de matriz, representamos cada posición de coordenadas cartesianas (x, y) con las tres coordenadas homogéneas (xh, yh, h), donde

x = xh / h, y = yh / h
Por tanto, una representación general de coordenadas homogéneas se puede expresar también como (h·x, h·y, h). Para transformaciones geométricas bidimensionales, seleccionamos el parámetro homogéneo h como cualquier valor no cero. Así, existe un número finito de representaciones homogéneas equivalentes para cada punto de coordenadas (x, y).
Conclusión:
Una representación matricial es la manera en que los pixeles se distribuyen en una maya, esto aplica en las imágenes y figuras geométricas y es un principio básico del software para la manipulación de los mismos , esto nos permite tambien aplicar colores, este tipo de representación facilita el uso de formulas para poder aplicar las transformaciones geométricas, las cuales son dependientes de formulas para poder actuar y modificar nuestros gráficos, es importante saber esto para poder comprender el comportamiento de las imágenes.


2.5. VENTANA Y PUERTO DE VISIÓN.

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.


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.
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





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.






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).











CONCLUSIONES.

La computación gráfica 2D es la generación de imágenes digitales porcomputadora - sobre todo de modelos bidimensionales (como modelos geométricos, texto y imágenes digitales 2D) y por técnicas específicas para ellos.
La computación gráfica 2D se utiliza principalmente en aplicaciones que fueron desarrolladas originalmente sobre tecnologías de impresión y dibujotradicionales, tales como tipografía, cartografía, dibujo técnico, publicidad, etc.
Los gráficos 2D por computadora se han iniciado en la década de 1950, basándose en dispositivos de gráficos vectoriales.1 Éstos fueron suplantados en gran parte por dispositivos basados en gráficos raster en las décadas siguientes.
Las líneas en OpenGL son en realidad segmentos acotados, en lugar de la idea matemática de rectas infinitas. Su definición viene dada por la especificación del valor de sus dos vértices extremos.
OpenGL maneja polígonos correctamente siempre y cuando sean simples y convexos. Si ese no es el caso, OpenGL dibuja cosas raras.
El algoritmo de Bresenham es un algoritmo creado para dibujar rectas en los dispositivos de gráficos rasterizados, como por ejemplo un monitor de ordenador, que determina qué pixeles se rellenarán, en función de la inclinación del ángulo de la recta a dibujar.
En graficación, el algoritmo de “mid point circle” es un algoritmo utilizado para determinar los puntos necesarios para dibujar un círculo.
Una traslación es el movimiento en línea recta de un objeto de una posición a otra.
Movimiento de una figura, sin rotarla ni voltearla. "Deslizar".
Para rotar un objeto (en este caso bidimensional), se ha de determinar la cantidad de grados en la que ha de rotarse la figura.
Una transformación para alterar el tamaño de un objeto se denomina escalación.
La representación tradicional de un grafo consiste en un conjunto de puntos que representan los nodos unidos por unas líneas que unen aquellos nodos relacionados. 
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.


BIBLIOGRAFIA.

http://encanta.avalonsoftware.org/idgaw/09/animvect2.php
http://www.mitecnologico.com/Main/Escalacion
http://encanta.avalonsoftware.org/idgaw/09/animvect2.php
http://www.google.com.mx/imgresimgurl=http://descartes.cnice.mec.es/materiales_didacticos/Movimientos_plano_puntos_segmento/traslacion

No hay comentarios:

Publicar un comentario