domingo, 28 de octubre de 2012

CAP II. Algoritmos para primitivas


2.1 Algoritmos para el trazo de líneas
La ecuación de intersección de la pendiente cartesiana de una línea recta es
                                     Y = m * x + b                                        (2-1)

donde m representa la pendiente de la línea y b la intersección de y dado que los dos extremos de un segmentos de líneas se especifica en las posiciones (x1,y1)y(x2,y2), como se muestra en la figura podemos determinar los valores para la pendiente y la intersección de y en b con los cálculos siguientes
                 m = (y2 - y1) / (x2 - x1)                         (2-2)
                 b = y1 = m * x1                                (2-3)
Los algoritmos para desplegar líneas rectas se basan en la ecuación de línea 2-1 y los cálculos que se dan en las ecuaciones 2-2 y 2-3.
Para cualquier x dentro del intervalo Δx a lo largo de una línea, se puede calcular el intervalo correspondiente Δy de y a partir de la ecuación 2-2 como
                 Δy=m*Δx                  (2-4)
De modo similar, podemos obtener el intervalo Δx de x correspondiente a una Δy especifica como
                    Δx=Δy/m                      (2-5)
2.2 Algoritmo DDA
El analizador diferencial digital (DDA; digital diferencial analyzer) es un algoritmo de línea de conversión de rastreo que se basa en el calculo ya sea de Δy, o de Δx por medio de las ecuaciones 2-4 o 2-5. Efectuamos un rastreo de línea en intervalos unitarios de una coordenada y determinamos los valores enteros correspondientes mas próximos a la trayectoria de la línea para la otra coordenada. Considere primero una línea de pendiente positiva, como se ilustra en la figura anterior. Si la pendiente es menor o igual que 1, llevamos a cabo un muestreo de x en intervalos unitarios (Δx=1) y calcularemos cada valor sucesivo de y como:
El subindice k toma valores enteros a partir de 1 y aumenta a razón de 1 hasta que se alcanza el valor final. Ya que m puede ser cualquier número real entre 0 y 1, los valores calculados de y deben redondearse al entero más cercano. Para líneas con pendiente positiva mayor que 1, se revierten las funciones de x y y. Es decir, se realiza un muestreo de y en intervalos unitarios (Δy = 1) y calculamos cada valor sucesivo de x como
Las ecuaciones 2-6 y 2-7 se basan en la suposición de que las líneas deben procesarse del extremo izquierdo al derecho si este procesamiento se revierte, de manera que sea el extremo derecho donde se inicia, entonces tenemos ya sea Δx= -1 y
o cuando la pendiente es mayor  Δy=-1 con

Este algoritmo se resume en el procedimiento siguiente, que acepta como entrada las dos posiciones de píxel de los extremos. Las diferencias horizontal y vertical entre las posiciones de los extremos se asignan a los parámetros de dx y dy. Al iniciar con la posición de píxel (Xa,Ya), determinamos la compensación necesaria para generar la posición del píxel siguiente a lo largo de la trayectoria de la línea. Realizamos el ciclo de este proceso steps. Si la magnitud de dx es mayor que la de dy y Xa es menor que Xb, los valores de los incrementos en las direcciones de X y Y son 1 y m, respectivamente. Si la variación mas alta se en la dirección de X pero Xa es mayor que Xb, entonces los decrementos –1 y -m sirven para generar cada nuevo punto en la línea. De otra manera, utilizamos un incremento(o decremento) de 1/m en la dirección de X. Suponemos que los puntos se debe trazar en un sistema de intensidad de dos niveles, de modo que la solicitud de putpixel será con un valor de intensidad de 1.

Codigo fuente del algoritmo DDA en C/C++

void linea_DDA( double x1,double y1,double x2,double y2)
{
 double x,y,dx,dy,p,xi,yi,k;
 dx=abs(x2-x1);
 dy=abs(y2-y1);
 if(dx>dy)
               p=dx;
 else
               p=dy;
               xi=dx/p;
               yi=dy/p;
 if(x1>x2)
               xi*=(-1);
 if(y1>y2)
               yi*=(-1);
               x=x1;
               y=y1;
 for(k=1;k<=p;k++)
               {
               x+=xi;
               y+=yi;
               putpixel(x,y,7);
               }
}
El algoritmo DDA es un método para calcular posiciones de píxel, que es mas rápido que la aplicación directa de la ecuación 2-1.

2.3 Algoritmo de la linea Bresenham
Muy pronto publicare esta parte









miércoles, 10 de octubre de 2012

CAP. 1.- CONCEPTOS BÁSICOS .

Curso de Programación gráfica

Dispositivos Gráficos
Los resultados de una aplicación pueden mostrarse en gran variedad de dispositivos de salida. Sin embargo estos dispositivos son de pantalla o de impresora. Desde el punto de vista de la computación gráfica, es importante ver la siguiente clasificación que son manejados por la computadora. Podemos ver dispositivos con los siguientes tipos:
  • Dispositivos de vectores, los cuales reciben de la computadora la información geométrica de la localización y tamaño de las primitivas que soportan, de las cuales produce una reproducción “caligráfica”.
  • Dispositivos de raster, los cuales reciben de la computadora la información de una serie de pixels, los cuales son posicionados en forma continua.
Los dispositivos de vectores fueron los primeros en desarrollarse, pero luego del vertiginoso descenso en el costo de la memoria volátil, a partir de la década de los 70’s se hicieron mas baratos los dispositivos raster.

Dispositivos de Vectores.

Actualmente estos dispositivos son más caros, pero tiene ciertas ventajas que los hacen únicos. Por ejemplo, tienen mucha mejor resolución y precisión que los dispositivos raster, y requieren un ancho de banda de comunicación mucho menor dado que no reciben la discretización completa de las primitivas sino solamente su posición.
  • Plotters. Grafican en una hoja (que en algunos casos puede ser de gran tamaño) sobre la cual se desliza una pluma movida por motores de pasos de gran precisión. En los plotters de tambor la pluma se desliza en sentido horizontal y el papel en sentido vertical. En los plotters planos (más económicos), el papel es fijo y la pluma es la que realiza todos los movimientos. Es posible utilizar colores por medio de varias plumas. Son ideales para graficación rápida y precisa de planos.
  • Displays de almacenamiento. Al igual que televisores y monitores, esto dispositivos son pantallas de rayos catódicos, pero difieren de ciertos aspectos tecnológicos, esencialmente, la pantalla tiene cierta “memoria” electrostática que mantiene visible los elementos graficados con muy alta precisión y sin necesidad de refresco. Por lo tanto, una imagen muy compleja a la cual se van agregando elementos en orden es idealmente representada por estos dispositivos. El borrado, sin embargo no puede hacerse en forma selectiva, por lo que no se puede alterar la posición de un elemento sin tener que borrar y redibujar todos lo elementos del gráfico.

martes, 9 de octubre de 2012

Introducción a la programación gráfica


Este es un curso enfocado a la programación gráfica el cual trataremos puntos básicos para entrar a este mundo de los gráficos por computadora.

Bueno voy a empezar con el programa analítico de esta materia, los lenguajes de programación que usaremos son c++ builder, OpenGL, programación en autocad bajo autolisp.
Este curso esta orientado especialmente para personas que estén involucradas con la programación y tenga muchas ganas de aprender ya que con esto se empieza a comprender mejor la programación juegos que involucren gráficos 2d como 3d.
Pero primero comenzaremos con los mas básicos como la creación de una linea, una circunferencia  elipse y otra primitivas gráficas.
Los capítulos del curso se publicaran de uno a dos publicaciones semanalmente.
Así que continuemos:



PROGRAMA ANALÍTICO.


CAP. 1.- CONCEPTOS BÁSICOS .
  • Dispositivos Gráficos.
  • Dispositivos de Vectores.
  • Dispositivos Raster.
  • Hardware Gráfico para Monitores.
  • Técnicas de Discretización.
  • El Sistema Físico de Coordenadas.
  • Especificaciones de una discretización.
  • Métodos de Discretización .
CAP. 2.- ALGORITMOS PARA PRIMITIVAS .
  • Algoritmos para el Trazo de Líneas.
  • Algoritmos para Líneas.
  • Algoritmos para Circunferencias.
  • Algoritmos para Elipses.
  • Algoritmos para Cuádricas.

CAP. 3.- TRANSFORMACIONES GEOMÉTRICAS BIDIMENSIONALES .