Investigue sobre los siguientes temas:
publique su investigación el blog
nota: considere que debe implementar los algoritmos con la ayuda opengl por lo que debe comprender los algoritmos).
publique su investigación el blog
nota: considere que debe implementar los algoritmos con la ayuda opengl por lo que debe comprender los algoritmos).
- Algoritmo
DDA para generación de líneas
Sabemos que
Entonces
Como Δx=1, llegamos a la fórmula final ---
Cada pixel se calcula en función del anterior
No hace falta calcular b
Este algoritmo presenta un inconvenientes:
–
Existen errores de acumulación.
–
El redondeo es muy lento.
ALGORITMO DDA
Funcion Linea_DDA (int x0,
y0, x1, y1)
dx = x1 – x0
dy = y1 – y0
Si abs(dx) > abs(dy)
entonces steps = abs(dx)
Si
no steps = abs(dy)
xinc
= dx / steps
yinc
= dy / steps
x =
x0
y =
y0
Pintar
Pixel (round(x), round(y))
Para k=1 hasta k=steps
x = x + xinc
y = y + yinc
Pintar Pixel (round(x),
round(y))
2. Algoritmo de
Bresenham para trazar líneas. 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.
ALGORITMO Bresenham:
Si
0<|m|<1
*Se capturan los extremos de la línea 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, 2Δy y
2Δy-Δx y se obtiene el valor inicial para el
parametro de decisión p0=2Δy-Δx.
Para j=0 mientras j<Δx
*En cada xk a lo largo de la
línea, que inicia en k=0 se efectúa la prueba siguiente:
Si pk<0
*Trazamos (xk+1,yk).
*Asignamos pk+1= pk+2Δy.
Sino
*Trazamos (xk+1,yk+1).
*Asignamos pk+1= pk+2Δy-2Δx.
Fin Para
Si |m|>1
*Recorremos la dirección en pasos unitarios
y calculamos los valores sucesivos
de x que se aproximen más a la trayectoria
de la línea.
- algoritmo
de Bresenham para trazar circunferencias.
Se basa en analizar el error
entre la verdadera circunferencia y su discretización. En cada paso elige como
próximo pixel a aquel que minimice el error.
Para cada pixel P en el arco
definido
por x³0, y³0, x³y; el pixel
siguiente
sólo puede ser S (sur) o D
(diagonal)
PICTURE
En este caso se toma como error
la distancia al cuadrado del pixel (x,y) a la circunferencia de centro en el
origen y radio r:
e=x2+
y2-r2.
Si elegimos S el proximo pixel es PS=(x, y+1) entonces:
eS = x^2+ (y+1)^2-r^2 = e+2y+1Si elegimos D, entonces el próximo pixel es PD=(x-1, y+1).
eD = (x-1)2+ (y+1)2-r2 = x2-2x +1+y2+2y+1-r2 = eS -2x+1.
Entonces la elección del pixel PS o PD dependerá de
cual de los dos
errores tiene menor módulo
Si
½e+2y+1½>½e+2y+1-2x+1½ Þ D
Es lo mismo que
Si
½eS½>½eS-2x+1½ Þ D
Además –2x+1 £ -1 y
0< eS< 1 entoncesSi eS>-eS+2x-1 Þ D y por lo tanto
Si 2eS>2x-1 Þ D
El algoritmo utiliza solo operaciones enteras
ALGORITMO
CirculoBressenham (radio, col)
{ int x,y ,e ;
x = radio;
y = 0 ; e = 0;{ int x,y ,e ;
while(y<=x){
putpixel(x,y,col); putpixel(y,x,col);
putpixel(-x,y,col); putpixel(-y,x,col);
putpixel(x,-y,col); putpixel(y,-x,col);
putpixel(-x,-y,col); putpixel(-y,-x,col);
e = e +2y+1;
y=y+1;
if(2e >2x-1){
x=x-1;
e=e-2x+1;}
}
}e=e-2x+1;}
}

No hay comentarios:
Publicar un comentario