Sunteți pe pagina 1din 10

Analizador Diferencial Digital (algoritmo

grfico)
Plantilla:Acerca de
ndice
[ocultar]

1 Introduccin

2 Algoritmo

3 Implementacin en Java

4 Rendimiento

5 Vase tambin

6 Referencias

7 Publicaciones

Introduccin[editar]
En Grficos por ordenador, una implementacin de hardware o software de un Analizador
Diferencial Digital (DDA) se usa para la interpolacin lineal de variables sobre un
intervalo entre un punto de comienzo y un punto de fin. Los DDAs se usan para rastreo de
lneas, triangulos y polgonos. En la implementacin ms simple del algoritmo DDA
interpola valores en intervalo [(xinicio, yinicio), (xfin, yfin)] por calculo para cada xi las ecuaciones
xi = xi1+1, yi = yi1 + y/x, donde x = xfin xinicio y y = yfin yinicio.

Algoritmo[editar]
Si m>=0 (pendiente positiva)
Si m<=1
de izquierda a derecha
* muestreo de x (x =1)
* yk+1 = redondeo(yk + m) k=1,2,...
de derecha a izquierda
* muestreo de x (x =-1)
* yk+1 = redondeo(yk - m) k=1,2,...
Si m > 1 (para evitar la aparicin de agujeros)
de izquierda a derecha
* muestreo de y (y =1)
* xk+1 = redondeo(xk + 1/m) k=1,2,...
de derecha a izquierda

* muestreo de y (y =-1)
* xk+1 = redondeo(xk - m) k=1,2,...
Si m<0 (pendiente negativa)
Si |m|<1
de izquierda a derecha
* muestreo de x (x =1)
* yk+1 = redondeo(yk + m) k=1,2,...
de derecha a izquierda
* muestreo de x (x =-1)
* yk+1 = redondeo(yk - m) k=1,2,...
Si |m| > 1 (para evitar la aparicin de agujeros)
de izquierda a derecha
* muestreo de y (y =1)
* xk+1 = redondeo(xk + 1/m) k=1,2,...
de derecha a izquierda
* muestreo de y (y =-1)
* xk+1 = redondeo(xk - m) k=1,2,...

Implementacin en Java[editar]
public void DDA(int x0, int y0, int x1, int y1, Graphics g)
{
int dx = x1 - x0;
int dy = y1 - y0;
g.drawLine( x0, y0, x1, y1);
if (Math.abs(dx) > Math.abs(dy)) {

// pendiente < 1

float m = (float) dy / (float) dx;


float b = y0 - m*x0;
if(dx<0)
dx =

-1;

else
dx =

1;

while (x0 != x1) {


x0 += dx;
y0 = Math.round(m*x0 + b);
g.drawLine( x0, y0, x1, y1);
}
} else
if (dy != 0) {
float m = (float) dx / (float) dy;
float b = x0 - m*y0;

// slope >= 1
// compute slope

if(dy<0)
dy =

-1;

else
dy =

1;

while (y0 != y1) {


y0 += dy;
x0 = Math.round(m*y0 + b);
g.drawLine( x0, y0, x0, y0);
}
}
}

Rendimiento[editar]
El mtodo DDA puede ser implementado usando aritmtica de coma flotante o entero. La
implementacin nativa en coma flotante requiere una suma y un redondeo para cada valor
interpolado (Ej. coordenada x, y, profundidad, componente de color etc.) y resultado de
salida. Este proceso es solo eficiente cuando una FPU con operaciones de suma y
redondeo rpido esta disponible.
La operacin en coma fija entero requiere dos sumas para cada cliclo de salida, y en caso
de rebose de la parte fraccional, un incremento adicionar y sustraccion. La probabilidad de
que rebose la parte fraccional es proporcional al radio m de los valores inicio/fin
interpolados.
Los DDAs son muy usados para implementaciones hardware y pueden ser pipelined para
maximizar el rendimiento.

Vase tambin[editar]

Algoritmo de Bresenham
Este artculo o seccin necesita referencias que aparezcan en
una publicacin acreditada, como revistas especializadas,
monografas, prensa diaria o pginas de Internet fidedignas. Este aviso
fue puesto el 8 de mayo de 2012.
Puedes aadirlas o avisar al autor principal del artculo en su pgina de
discusin pegando: {{subst:Aviso referencias|Algoritmo de

Bresenham}} ~~~~

Ejemplo de aplicacin del algoritmo de Bresenham.

ndice
[ocultar]

1 Descripcin

2 Algoritmo

3 Implementacin en Java

4 Vase tambin

5 Referencias
5.1 Bibliografa

6 Enlaces externos

Descripcin[editar]
Es un algoritmo preciso para la generacin de lneas de rastreo que convierte mediante
rastreo las lneas al utilizar solo clculos 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[editar]
El algoritmo sera el siguiente:

Si 0<|m|<1
*Se capturan los extremos de la lnea y se almacena el extremo
izquierdo en (x0,y0).
*Se carga (x0,y0) en el bufer de estructura (se traza el primer
punto)
*Se calculan las constantes x,y, 2y y 2y-x y se obtiene el
valor inicial para el
parametro de decisin p0=2y-x.
Para j=0 mientras j<x
*En cada xk a lo largo de la lnea, que inicia en k=0 se efecta la
prueba siguiente:
Si pk<0
*Trazamos (xk+1,yk).
*Asignamos pk+1= pk+2y.
Sino
*Trazamos (xk+1,yk+1).
*Asignamos pk+1= pk+2y-2x.
Fin Para
Si |m|>1
*Recorremos la direccin en pasos unitarios y calculamos los
valores sucesivos
de x que se aproximen ms a la trayectoria de la lnea.

Implementacin en Java[editar]
Esta es la implementacin del algoritmo:

public void Bresenham(Graphics g,int x0, int y0, int x1, int y1) {
int x, y, dx, dy, p, incE, incNE, stepx, stepy;
dx = (x1 - x0);
dy = (y1 - y0);
/* determinar que punto usar para empezar, cual para terminar */
if (dy < 0) {
dy = -dy;
stepy = -1;
}
else {
stepy = 1;
}
if (dx < 0) {
dx = -dx;
stepx = -1;
}
else {
stepx = 1;
}
x = x0;
y = y0;
g.drawCircle( x0, y0, x0, y0);
/* se cicla hasta llegar al extremo de la lnea */
if(dx>dy){
p = 2*dy - dx;
incE = 2*dy;
incNE = 2*(dy-dx);
while (x != x1){
x = x + stepx;
if (p < 0){
p = p + incE;
}
else {
y = y + stepy;
p = p + incNE;
}
g.drawLine( x, y, x, y);
}
}
else{

p = 2*dx - dy;
incE = 2*dx;
incNE = 2*(dx-dy);
while (y != y1){
y = y + stepy;
if (p < 0){
p = p + incE;
}
else {
x = x + stepx;
p = p + incNE;
}
g.drawLine( x, y, x, y);
}
}
}

Vase tambin[editar]

Analizador Diferencial Digital (algoritmo grfico) es un algoritmo para el trazado de


lneas.
Algoritmo de Xiaolin Wu es un algoritmo para antialiasing de lneas

Algoritmo del Punto Medio para Circunferencias es un algoritmo para el trazado de


cnicas.

Algoritmo del Punto Medio para Elipses es un algoritmo para el trazado de cnicas.

Algoritmo del Punto Medio para Parbolas es un algoritmo para el trazado de


cnicas.

Algoritmo del Punto Medio para Hiprbolas es un algoritmo para el trazado de


cnicas.

Referencias[editar]
Bibliografa[editar]

Watt, Alan (2000). Rasterizing edges. 3D Computer Graphics (3 edicin).


p. 184. ISBN 0-201-

lgoritmo del punto medio para


circunferencias
Plantilla:Acerca de
ndice
[ocultar]

1 Introduccin

2 Algoritmo

3 Rendimiento

4 Cdigo Ejemplo Java

5 Vase tambin

6 Referencias

7 Publicaciones

Introduccin[editar]
Una circunferencia se define como un conjunto de puntos que se encuentran, en su
totalidad, a una distancia determinadar de una posicin central.
Es posible reducir el clculo al considerar la simetra de las circunferencias, la forma de la
circunferencia es similar entre cuadrantes y simetrica entre octantes.
Para aplicar el mtodo del punto medio, definimos una funcin de circunferencia como:
pk = fcircunferencia(x,y)=

fcircunferencia(x,y)<0 si (x,y) est dentro de la frontera de la circunferencia.


fcircunferencia(x,y)=0 si (x,y) est en la frontera de la circunferencia.
fcircunferencia(x,y)>0 si (x,y) est fuera de la frontera de la circunferencia.
Los parmetros de decisin sucesivos se obtienen al utilizar clculos incrementales.

Algoritmo[editar]
El algoritmo ser el siguiente:
*Se capturan el radio r y el centro de la circunferencia (xc, yc).

*Se obtiene el primer punto de la circunferencia centrada en


origen (xc, yc) como (0, r).
*Se cacula el valor inicial del parametro de decisin como p0=5/4
- r.
Para k=0 hasta x>=y incrementa k
Si pk < 0
*Siguiente punto de la circunferencia con centro (0,0) es
(xk+1, yk).
*pk+1=pk+2xk+1+1.
Sino
*Siguiente punto de la circunferencia con centro (0,0) es
(xk+1, yk-1).
*pk+1=pk+2xk+1+1-2yk+1.
//Donde 2xk+1=2xk+2 y 2yk+1=2yk-2
*Se determinan los puntos de simetra para los otros siete
octantes.
*Se mueve cada posicin del pixel calculada (x,y) a la trayectoria
circular centrada en (xc, yc)
y trazamos los valores de las coordenadas: x=x+xc y y=y+yc.
Fin Para

Rendimiento[editar]
Cdigo Ejemplo Java[editar]
Ejemplo:
void CircleMidPoint(Graphics g, int xc, int yc, int r){
int x, y, p;
x = 0;
y = r;
p = 1 - r;
PlotPoint(g,xc,yc,x,y);
/* se cicla hasta trazar todo un octante */
while (x < y){
x = x + 1;
if (p < 0)
p = p + 2*x + 1;
else {
y = y - 1;
p = p + 2*(x - y) + 1;

}
PlotPoint(g,xc,yc,x,y);
}}

Vase tambin[editar]

Analizador Diferencial Digital (algoritmo grfico) es un algoritmo para el trazado de


lineas.

Algoritmo de Bresenham es un algoritmo para el trazado de lineas.

Algoritmo de Xiaolin Wu es un algoritmo para antialiasing de lineas.

Algoritmo del Punto Medio para Elipses es un algoritmo para el trazado de cnicas.

Referencias[editar]
Algoritmos para dibujar Cnicas del Sitio Web de Hctor E. Medelln
Anayahttp://galia.fc.uaslp.mx/~medellin/Applets/Circulos/circulos.htm
Apuntes de Informtica Grfica Uned por Omega.

S-ar putea să vă placă și