miércoles, 18 de septiembre de 2013

Unidad 2

Graficación en 2D


¿Que es la graficación en 2D?

Es la generación de imágenes digitales por computadora sobre todo de modelos bidimensionales (como modelos geométricos, texto e 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.

Se utiliza principalmente en aplicaciones que fueron desarrolladas originalmente sobre tecnologías de impresión y dibujo tradicionales, tales como:

  • Tipografía
  • Cartografía
  • Dibujo técnico
  • Publicidad, etc.


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.

Los gráficos 2D por computadora se han iniciado en la década de 1950, basándose en dispositivos de gráficos vectoriales. Éstos fueron suplantados en gran parte por dispositivos basados en gráficos raster en las décadas siguientes. El lenguaje PostScript y el protocolo desistema de ventanas X fueron piezas claves en la evolución histórica del campo
Se llaman gráficos a todos los objetos que se pueden dibujar en una escena: puntos, segmentos, curvas, arcos, (lugares geométricos de) ecuaciones, textos, imágenes, macros, etc. 

Trazo de lineas rectas

La línea es el elemento básico de todo grafismo y uno de los más usados, teniendo tanta importancia en un grafismo como la letra en un texto. Representa la forma de expresión más sencilla y pura, pero también la más dinámica y variada.

Está formada por la unión de varios puntos en sucesión, pudiéndose asimilar a la trayectoria seguida por un punto en movimiento, por lo que tiene mucha energía y dinamismo. Su presencia crea tensión y afecta al resto de elementos cercanos a ella.

Define el camino más corto entre dos puntos. Es poco frecuente en la naturaleza, donde predominan las líneas curvas (el universo en su totalidad es curvo), pero muy abundante en el entorno humano, que necesita de ellas para dar estabilidad a sus creaciones.











ALGORITMOS PARA EL TRAZO DE LÍNEAS


Algoritmo Básico

El algoritmo básico sería utilizar la ecuación anterior para calcular y en termino de x (o viceversa).
Esto sería bastante lento ya que requeriría siempre una multiplicación más una suma:

y = m x + b

Los siguientes algoritmos mostrarán como se pueden hacer más eficientes estos cálculos utilizando algoritmos más elaborados.


Algoritmo de Línea DDA

El analizador diferenciador digital (DDA - Digital Differential Analyzer) es un algoritmo de conversión de rastreo que se basa en el cálculo ya sea de Dy o Dx por medio de las ecuaciones.
Dy = m Dx
Dx = Dy / m
Se efectúa un muestreo de la línea en intervalos unitarios en una coordenada y se determina los valores enteros correspondientes más próximos a la trayectoria de la línea para la otra coordenada.



Algoritmo de Línea Bresenham Básico

Existe un algoritmo con el cual se crean las lineas rectas en una computadora este es el algoritmo de Bresenham.
El algoritmo 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.
Es un algoritmo preciso para la generación de líneas de rastreo que convierte mediante rastreo las líneas al utilizar solo cálculos incrementales con enteros que se pueden adaptar para desplegar circunferencias y curvas. Los ejes verticales muestran las posiciones de rastreo y los ejes horizontales identifican columnas de pixel.





Algoritmo de Punto Medio para la Línea

Una extension al algoritmo de Bresenham es la técnica del punto medio (midpoint technique). Publicada por primera vez por Pitteway (1967) y adaptada por Van Aken (1984) y otros investigadores.
Para líneas y círculos de enteros, la formulación de punto medio, como la muestra Van Aken (1985), se reduce a la formulación de Bresenham y por lo tanto se generan los mismos pixeles.
Bresenham (1977) mostró que este algoritmo de línea y circulo de enteros proveen la mejor aproximación a líneas y círculos verdaderos al minimizar el error (distancia) a las primitivas reales.
Kappel (1985) discute los efectos de varios ¡criterios de error.
Se asume que la pendiente de la línea es entre 0 y 1.
Otras pendientes se pueden manejar como reflexiones sobre ejes principales.
Se define a (x0,y0) como el extremo inferior izquierdo y (x1,y1) como el extremo superior derecho.
 Consideremos la siguiente figura.




Representación y trazo de polígonos

Los polígonos son figuras planas cerradas y simples que esta formada por segmentos. Los elementos de los polígonos son: Lados, Vertices, Diagonales Y Ángulos Interiores, Exteriores Y Centrales.

Los polígonos se clasifican:

Polígonos regulares son los que tienen sus lados y sus ángulos interiores iguales.
Polígonos irregulares son los que no tienen sus lados y ángulos interiores diferentes.





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

El método que se utiliza para graficar un polígono son los mismos que mencionamos anteriormente como lo es el algoritmo de Bresenham.

Transformación bidimensional
  • Traslación

En primera definiremos que es una traslación, una traslación se refiere a cambios en la posición. Se aplica una traslació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. Convertimos un punto bidimensional al agregar las distancias de traslación, tx y ty la posición de coordenadas original (x,y).
El par de distancia de traslación se llama vector de traslación o vector de cambio. Se pueden expresar las ecuaciones anteriores en una sola ecuación matricial al utilizar vectores de columna para representar las posiciones de coordenadas y el vector de traslación

Los polígonos se trasladan al sumar el vector de traslación a la posición de coordenadas de cada vértice y se vuelve a generar el polígono utilizando un nuevo conjunto de coordenadas y vértices y las especificaciones actuales de los atributos.

En la figura se muestra el efecto de trasladar un objeto 3 unidades en x y -4 unidades en y.

  • Escalamiento

Un escalamiento significa un cambio en el tamaño de un objeto, altura y anchura.
El escalamiento se hace con un factor sx en el eje x y en un factor syen el eje y.

Escalamiento uniforme sx = sy
Escalamiento diferencial.

La transformación de escalamiento puede expresarse con las siguientes multiplicaciones.

Ejemplo de escalamiento:



  • Rotación

En una rotación existe un movimiento circularen el  hay un punto central que se mantiene fijo y todo lo demás se mueve alrededor de ese punto en círculos.
Se aplica una rotación bidimensional en un objeto al cambiar su posición a lo largo de la trayectoria de una circunferencia en el plano de xy . Para generar una rotación, especificamos un ángulo de rotación θ y la posición (x r , y r ) del punto de rotación (o punto pivote) en torno al cual se gira el objeto.

Ejemplo de rotación:


Representación matricial

En las aplicaciones de diseño y de creación de imágenes, realizamos traslaciones, rotaciones y escalaciones para ajustar los componentes de la imagen en sus posiciones apropiadas. 

En este tema consideramos cómo 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.

Con las representaciones de matriz podemos establecer una matriz para cualquier secuencia de transformaciones como una matriz de transformación compuesta al calcular el producto de la matriz de las transformaciones individuales. La creación de productos de matrices de transformación a menudo se conoce como concatenación o composición de matrices.
Muchas aplicaciones incluyen secuencias de transformaciones geométricas:

– Una animación requiere que los objetos se trasladen y roten en cada fotograma
– Un diseño CAD requiere muchas transformaciones hasta obtener el resultado final

• Debemos formular de forma muy eficiente toda la secuencia de transformaciones
• Cada transformación puede representarse como P’ = P M1+ M2
• La matriz M1 contiene la información de ángulos y factores de escala
• La matriz M2contiene los términos de traslación asociados al punto fijo y al centro de rotación
• Para producir una secuencia de transformaciones hay que calcular las nuevas coordenadas en cada transformación.
P’’ = P’ M3 + M4= … = P M1 M3+ M2 M3+ M4
• Buscamos una solución más eficiente que permita combinar las transformaciones para obtener directamente las coordenadas finales a partir de las iniciales

Ventana y puerto de visión

Algunos paquetes gráficos permiten que el programador especifique coordenadas de primitivas de salida en un sistema de coordenadas de mundo de punto flotante, usando las unidades que sean relevantes para el programa de aplicación: angstroms, micras, metros, millas, años luz, etcétera. Se emplea el término de mundo porque el programa de aplicación representa un mundo que se crea o presenta interactivamente para el usuario.

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.




Conclusiones


En esta segunda unidad se dieron a conocer varios métodos y herramientas para la manipulación y creación de imágenes en 2D ,este tema es muy extenso y complicado por la gran cantidad de nuevas definiciones pero suelen ser no muy complicados de asimilar si se relacionan con imágenes para el mejor entendimiento también note que los mismos conceptos están relacionados con la graficación en 3D la  cual toma un enfoque diferente ya que los usos para los que tiene como fin no son los mismos ni se desarrollan siempre en los mismos programas.

Me sorprende la manera en que todos los métodos para graficar son matemáticos en su totalidad, con distintos algoritmos desarrollados como el  Analizador Diferencial Digital, pero uno mas especializado a lineas rectas es el algoritmo de Bresenham que determina que pixeles se rellenaran en función al grado de inclinación de la recta y estos se han implementado en un software en el que la maquina realiza miles de cálculos solo para poder crear una imagen con lineas.

Existen diversos métodos o algoritmos que una computadora puede utilizar para crear a partir de estas,  lineas rectas, que al utilizarlas podemos crear imágenes bidimensionales como lo son los polígonos ya sean regulares o irregulares, los cuales están formados por lineas unidimencionales que encierran un área especifica. 

A todo aquel objeto que sea creado podemos modificarlo por así decirlo podemos trasladarlo es decir moverlo de un lado a otro sin modificar sus propiedades simplemente cambiarlo de ubicación  también podemos realizarle una rotación  esto quiere decir que tomando un punto del objeto este girara en algún sentido formando una circulo o si se desea un escalamiento, lo cual significa que se modificaran sus propiedades de tamaño (largo y ancho de la imagen u objeto).


Además de todas las herramientas ya mencionadas también  para poder visualizar determinada parte de algún objeto que este en 2D, utilizando las herramientas de  ventanas o puerto de visión, los cuales permiten al usuario visualizar en el monitor un área seleccionada.

Actualmente la graficación 2D es muy utilizada en muchos campos como por ejemplo en  la tipografía, cartografía, dibujo técnico,publicidad, etcetera.

Y muchos de ellos ya van encaminándose  día a día a la graficación en 3D por lo cual nos concierne estar en constante  actualización.

Bibliografía

http://arquimedes.matem.unam.mx/pasados/Descartes_3.5/Doc/Graficos_2D.html

No hay comentarios:

Publicar un comentario