Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos Clsicos
Linea Ideal
Recta y continua
Solo es posible a 0 y 45o
Graficacin
Linea Simple
Basada en la ecuacin: y = mx + b Solucin: incrementa x, resuelve para y Se require aritmtica de Punto Flotante
Graficacin
Funciona?
S, para lneas con m<=1. Si m>1, la lnea se hace muy discontinua. Se requiere mas de 1 pixel por columna Solucin? - simetra.
Graficacin
Algoritmo DDA
DDA = Digital Differential Analyser
Differencias finitas
Inicio Fin -
( x1 , y1 ) ( x2 , y2 )
x(t ) x1 t ( x2 x1 ) y(t ) y1 t ( y2 y1 )
Graficacin
Algoritmo DDA
x(t ) x1 t ( x2 x1 ) y(t ) y1 t ( y2 y1 )
Empezar en t = 0 En cada paso, incrementar t en dt x y Elegir un valor para dt Asegurar que se nos pasan pixeles:
Implica
dx 1 dt
new xold
new
yold
dx dt dy dt
dy 1 dt
dt = maximum(dx, dy)
Graficacin 8
Algoritmo DDA
line(int x1, int y1, int x2, int y2) { float x,y; int dx = x2-x1, dy = y2-y1; int n = max(abs(dx),abs(dy)); float dt = n, dxdt = dx/dt, dydt = dy/dt; x = x1; y = y1; while( n-- ) { point(round(x),round(y)); x += dxdt; y += dydt; } }
Graficacin
n rango de t.
Algoritmo DDA
Aun se necesitan muchas operaciones de PF.
2 rounds y 2 adds por pixel.
Observacin en Lneas
while( n-- ) { draw(x,y); move right; if( below line ) move up; }
Graficacin
11
F ( x, y) ax by c 0
F<0 para puntos arriba de la lnea, F>0 para puntos debajo.
Graficacin 12
So:
dy y mx b and so y xb dx
F ( x, y) dy.x dx. y c 0
Graficacin 13
Variable de Decisin
Evaluar F ent M
1 d F ( x p 1, y p ) 2
NE
Graficacin
Variable de Decisin
Evaluatar d para el siguiente pixel. Depende si se elige E o NE:
Si se elige E:
1 1 d new F ( x p 2, y p ) a( x p 2) b( y p ) c 2 2
Recuerden:
NE M E Pixel Previos (xp,yp)
Graficacin
1 d old F ( x p 1, y p ) 2 1 a( x p 1) b( y p ) c 2
Entonces:
Variable de Decisin
Si se elige NE:
3 3 d new F ( x p 2, y p ) a( x p 2) b( y p ) c 2 2
M
So :
NE
E
Pixel Previos (xp,yp)
Graficacin
Graficacin
17
Valor Inicial de d
Inicioo: (x1,y1)
d start 1 1 F ( x1 1, y1 ) a( x1 1) b( y1 ) c 2 2 b ax1 by1 c a 2 b F ( x1 , y1 ) a 2
d start dy dx / 2
Multiplicar por 2 para remover la fraccin no afecta el signo
Graficacin 18
Algoritmo de Bresenham
void MidpointLine(int x1,y1,x2,y2) { int dx=x2-x1; int dy=y2-y1; int d=2*dy-dx; int increE=2*dy; int incrNE=2*(dy-dx); x=x1; y=y1; WritePixel(x,y);
while (x < x2) { if (d<= 0) { d+=incrE; x++
} else { d+=incrNE; x++; y++; } WritePixel(x,y); } }
Graficacin
19
Algoritmo Doble
Las posiciones posibles de los dos pixeles siguientes dependen de la pendiente pixel actual en azul: 0<=m<=
<=m<=1
1<=m<=2 m>2
Graficacin 21
Crculos
Podemos usar Bresenham para crculos Usar simetra 8-tuple
E M SE
Pixel Previos
Graficacin
Crculos
La forma Implcita de un crculo es:
f ( x, y ) ( x x c ) ( y y c ) r
2 2