Graficacion Algoritmo DDA
-
Upload
diego-ramirez-munoz -
Category
Documents
-
view
245 -
download
0
description
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#