Graficacion Algoritmo DDA

Post on 17-Mar-2016

245 views 0 download

Tags:

description

How to use DDA Algorithm

Transcript of Graficacion Algoritmo DDA

INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES

INGENIERÍA EN SISTEMAS COMPUTACIONALES

“WebQuest: Ejecución del Algoritmo DDA”

PRESENTA:

Ramírez Muñoz Diego Alfonso

Salgado Benito Ivonne

LIBRES, PUEBLA, FEBRERO 2011.

S.E.P D.G.E.S.T D.I.T.D.

Organismo Público Descentralizado del Gobierno del Estado de Puebla

FUNDAMENTO TEÓRICO DEL ALGORITMO DDA

Definición 1 [1].

La ecuación diferencial de una línea recta está dada por:

La solución de la aproximación de diferencias finitas es:

xi+1 = xi + x

yi+1 = yi +

y

El algoritmo de DDA se ejecuta muy lentamente debido a que requiere mucha

aritmética (operaciones de punto flotante).

Definición 2 [2].

El concepto cartesiano de la ecuación pendiente-intersección de una línea recta es

y = mx + b ------ (1)

con

m-> pendiente

b-> intersección

Los 2 puntos extremos de un segmento de línea se especifican en una

posición (x1, y1).

Determinar los valores de la pendiente y la intersección m b con el siguiente

cálculo.

aquí, pendiente m:

m = (y2 - y1) / (x2 - x1)

m = dy / dx ------ (2)

intersección con el eje b

b = y1-MX1 ------ (3)

Algoritmos para la visualización de línea recta sobre la base de esta ecuación

y Dy intervalo de la ecuación

m = dy / dx

Dy = m. Dx ------ (4)

Del mismo modo el intervalo Dx x de la ecuación

m = dy / dx

Dx = Dy / m

Algoritmo DDA

El analizador diferencial digital (DDA) es un algoritmo de conversión de línea de

exploración basada en el cálculo ya sea Dy o DX.

La línea en intervalos unitarios coordina y determina la línea correspondiente al

número entero más próximo a los valores de la otra coordenada.

Consideremos en primer lugar una recta con pendiente positiva.

Paso: 1

Si la pendiente es menor o igual a 1, los intervalos x unidad Dx = 1 y calcular

valores de y cada uno sucesivas.

Dx = 1

m = dy / dx

m = (y2-y1) / 1

m = (yk +1 - yk) / 1

yk +1 = yk + m -------- (6)

El subíndice k toma valores enteros a partir de 1, para el primer punto y el

incremento en 1 hasta el punto final definitiva.

M-> todos los números reales entre 0 y 1

Calcular los valores de y debe ser redondeado al entero más cercano

Paso: 2.

Si la pendiente es mayor que 1, los papeles de x cualquier y en la unidad y los

intervalos de Dy = 1 y calcular cada uno de los valores y los sucesivos.

Dy = 1

m = dy / dx

m = 1 / (x2-x1)

m = 1 / (xk +1 - xk)

xk +1 = xk + (1 / m) ------- (7)

Ecuación 6 y 7 Ecuación que las líneas se van a procesar desde el punto extremo

izquierdo hasta el punto extremo de la derecha.

Paso: 3.

Si el procesamiento se invierte, el punto de partida a la derecha.

Dx = -1

m = dy / dx

m = (y2 - y1) / -1

yk +1 = yk - m -------- (8)

Intervalos Dy = 1 y calcular cada uno de los valores y los sucesivos.

Paso: 4.

Aquí, Dy = -1

m = dy / dx

m = -1 / (x2 - x1)

m = -1 / (xk +1 - xk)

xk +1 = xk + (1 / m) -------- (9)

Ecuación 6 y la ecuación 9 se usa para calcular la posición de píxel a lo largo de

una línea con-ve pendiente.

Ventaja:

Método mas rápido para el cálculo de la posición del pixel a continuación, la

ecuación de una posición de pixel.

Y = mx + b

Desventaja:

La acumulación de ronda de error es adición sucesiva de los incrementos en coma

flotante se utiliza para encontrar la posición de pixel, pero toma mucho tiempo

para calcular la posición del píxel.

Algoritmo: Un ingenuo dibujo lineal del algoritmo

dx = x2 - x1

dy = y2 - y1

para x en x1 a x2 {

y = y1 + (dy) * (x - x1) / (dx)

píxel (x, y)

}

Programación en C

linedda vacío (int xa, int ya, int xb, yb int) {

int dx = xb-xa, dy = YB-ya, los pasos, k;

xincrement flotador, yincrement, x = xa, y = ya;

if (abs (dx)> abs (dy)) pasos = abs (dx);

medidas ELSE = abs (dy);

xincrement = dx / (float) pasos;

yincrement = dy / (float) pasos;

putpixel (round (x), redondo (y), 2)

para k = 0; K <pasos; k + +) {

x + = xincrement;

y + = yincrement;

putpixel (round (x), redondo (y), 2);

}

}

Ejemplo:

xa, ya => (2,2)

xb, yb => (8,10)

dx = 6

dy = 8

xincrement = 6/8 = 0,75

yincrement = 8/8 = 1

1) para (k = 0; k <8; k + +)

xincrement = 0,75 0,75 = 1,50

yincrement = 1 +1 = 2

1 => (2,2)

2) para (k = 1, k <8; k + +)

xincrement = 1,50 0,75 = 2,25

yincrement = 2 +1 = 3

2 => (3,3)

Que se incrementa hasta el punto final.

PASOS.

Descompresion de Archivos.

Referencia a los archivos Tao.FreeGlut.dll y Tao.OpenGl.dll.

Ejecucion por primera vez.

Correcciones.

Cambio de Grosor.

Línea Punteada

BIBLIOGRAFÍA

[1] Andrés Iglesias. Computer-Aided Geometric Design and Computer Graphics:

Line Drawing Algorithms. Department of Applied Mathematics and Computational

Sciences. University of Cantabria.

http://personales.unican.es/iglesias/CD-CG/LineAlgorithms.pdf

[2] DDA Line Algorithm. DDA Line Drawing Algorithm In C Programming

Language. Computer Graphics Collection.

http://knol.google.com/k/dda-line-algorithm#