Você está na página 1de 23

Graficacin IA7200-T

Algoritmos Clsicos

Una Lnea Ideal


Solo podemos lograr una aproximacin

Iluminar pixeles tan cerca a la lnea ideal como sea posible


Pixel e {0,1}
Graficacin 2

Linea Ideal
Recta y continua
Solo es posible a 0 y 45o

Se debe interpolar Debe ser eficiente


Se requiere dibujar muchas!!!

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

Modificar algoritmo por octante

o incrementar en x si dy<dx, si no, incrementar en y


Graficacin 6

Algoritmo DDA
DDA = Digital Differential Analyser
Differencias finitas

Tratar la linea como una ecuacin paramtrica en t :

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.

Hay una manera ms simple? Podemos usar solo aritmtica entera?


Mas fcil de implementar en hardware
Graficacin 10

Observacin en Lneas
while( n-- ) { draw(x,y); move right; if( below line ) move up; }

Graficacin

11

Arriba o Debajo de la Lnea?


Test para pixel Escribir la lnea en forma implcita:

F ( x, y) ax by c 0
F<0 para puntos arriba de la lnea, F>0 para puntos debajo.
Graficacin 12

Testing for the side of a line.


F ( x, y) ax by c 0
Need to find coefficients a,b,c. Recall explicit, slope-intercept form :

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

Se llama variable de decisin

NE

M E Pixel anterior (xp,yp) Posible pixel actual Posibles pixeles siguientes


14

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:

Posible Pixel Actual

Posible Pixel Siguiente

d new d old a d old dy


15

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

d new dold a b d old dy dx


Posible Pixel Siguiente
16

E
Pixel Previos (xp,yp)
Graficacin

Posible Pixel Actual

Resumen del Algoritmo de Punto Medio


Elegir entre 2 pixelse en cada iteracin, dependiendo del signo de la var. de decisin Atualizar la variable de decisin dependiendo de que pixel es elegido Comenzar en (x1,y1) Calcular en valor inicial de d

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

Pero (x1,y1) es un punto en la lnea, F(x1,y1) =0

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

Bresenham no fue el final!


Algoritmo doble de Xiaolin Wu:
El programa de dibujado es un autmata (mquina de estados finitos). i.e. Checar los siguientes dos pixeles de la lnea.

Solo existen un nmero finito (pequeo) de posibilidades.


El algoritmo doble explota simetra dibujando simultneamente de ambos extremos hacia el centro.
Graficacin 20

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

Posible Pixel Actual

Posible Pixel Siguiente


22

Crculos
La forma Implcita de un crculo es:

f ( x, y ) ( x x c ) ( y y c ) r
2 2

Si se elige SE : dnew dold (2 x p 2 y p 5) dnew dold (2 x p 3)

Las Funciones son ecuaciones lineales en trminos de (xp,yp)


Llamado punto de evaluacin
Graficacin 23

Você também pode gostar