Graficaci ón IA7200-T

23
Graficación IA7200-T Algoritmos Clásicos

description

Graficaci ón IA7200-T. Algoritmos Clásicos. Una Línea Ideal. Solo podemos lograr una aproximación Iluminar pixeles tan cerca a la línea ideal como sea posible Pixel e {0,1}. Linea Ideal. Recta y continua Solo es posible a 0 y 45 o Se debe interpolar Debe ser eficiente - PowerPoint PPT Presentation

Transcript of Graficaci ón IA7200-T

Page 1: Graficaci ón IA7200-T

GraficaciónIA7200-T

Algoritmos Clásicos

Page 2: Graficaci ón IA7200-T

Graficación 2

Una Línea Ideal

• Solo podemos lograr una aproximación

• Iluminar pixeles tan cerca a la línea ideal como sea posible– Pixel {0,1}

Page 3: Graficaci ón IA7200-T

Graficación 3

Linea Ideal

• Recta y continua– Solo es posible a 0 y 45o

• Se debe interpolar• Debe ser eficiente

– Se requiere dibujar muchas!!!

Page 4: Graficaci ón IA7200-T

Graficación 4

Linea Simple

Basada en la ecuación:

y = mx + b

Solución:

incrementa x, resuelve para y

Se require aritmética de Punto Flotante

Page 5: Graficaci ón IA7200-T

Graficación 5

Funciona?Sí, para líneas con m<=1.

Si m>1, la línea se hace muy discontinua.

Se requiere mas de 1 pixel por columna

Solución? - simetría.

Page 6: Graficaci ón IA7200-T

Graficación 6

Modificar algoritmo por octante

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

Page 7: Graficaci ón IA7200-T

Graficación 7

Algoritmo DDA

• DDA = Digital Differential Analyser– Differencias finitas

• Tratar la linea como una ecuación paramétrica en t :

)()()()(

121

121

yytytyxxtxtx

−+=−+=

),(),(

22

11

yxyxInicio -

Fin -

Page 8: Graficaci ón IA7200-T

Graficación 8

Algoritmo DDA

• Empezar en t = 0• En cada paso, incrementar t en dt• Elegir un valor para dt• Asegurar que se nos pasan pixeles:

– Implica y

• dt = maximum(dx, dy)

)()()()(

121

121

yytytyxxtxtx

−+=−+=

dtdyyy

dtdxxx

oldnew

oldnew

+=

+=

1<dtdx 1<

dtdy

Page 9: Graficaci ón IA7200-T

Graficación 9

Algoritmo DDAline(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;}

}

n – rango de t.

Page 10: Graficaci ón IA7200-T

Graficación 10

Algoritmo DDA

• Aun se necesitan muchas operaciones de PF.– 2 ‘round’s y 2 adds por pixel.

• Hay una manera más simple?• Podemos usar solo aritmética entera?

– Mas fácil de implementar en hardware

Page 11: Graficaci ón IA7200-T

Graficación 11

Observación en Líneas

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

Page 12: Graficaci ón IA7200-T

Graficación 12

Arriba o Debajo de la Línea?

• Test para pixel• Escribir la línea en forma implícita:

0),( =++= cbyaxyxF•F<0 para puntos arriba de la línea, F>0 para puntos debajo.

Page 13: Graficaci ón IA7200-T

Graficación 13

Testing for the side of a line.

• Need to find coefficients a,b,c.• Recall explicit, slope-intercept form :

• So:

0),( =++= cbyaxyxF

bxdxdyybmxy +=+= so and

0..),( =+−= cydxxdyyxF

Page 14: Graficaci ón IA7200-T

Graficación 14

Variable de Decisión

Pixel anterior(xp,yp)

Posible pixelactual

Posiblespixeles

siguientes

Evaluar F ent M

Se llama variable de decisión

)21,1( ++= pp yxFd

M

NE

E

Page 15: Graficaci ón IA7200-T

Graficación 15

Variable de DecisiónEvaluatar d para el siguiente pixel. Depende si se elige E o NE:

Si se elige E:

cybxayxFd ppppnew ++++=++= )21

()2()21

,2(

Recuerden:

cybxa

yxFd

pp

ppold

++++=

++=

)21

()1(

)21

,1(

Entonces:

dydadd

old

oldnew

+=+=

M

E

NE

PixelPrevios(xp,yp)

PosiblePixel

Actual

PosiblePixel

Siguiente

Page 16: Graficaci ón IA7200-T

Graficación 16

Variable de DecisiónSi se elige NE:

cybxayxFd ppppnew ++++=++= )23

()2()23

,2(

So :

dxdydbadd

old

oldnew

−+=++=

M

E

NE

PixelPrevios(xp,yp)

PosiblePixel

Actual

PosiblePixel

Siguiente

Page 17: Graficaci ón IA7200-T

Graficación 17

Resumen del Algoritmo dePunto Medio

• Elegir entre 2 pixelse en cada iteración, dependiendo del signo de la var. de decisión

• Atualizar la variable de decisión dependiendo de que pixel es elegido

• Comenzar en (x1,y1)• Calcular en valor inicial de d

Page 18: Graficaci ón IA7200-T

Graficación 18

Valor Inicial de d

2

)21()1()

21,1(

11

1111

bacbyax

cybxayxFd start

++++=

++++=++=

Pero (x1,y1) es un punto en la línea, F(x1,y1) =0

2/dxdydstart −=

Multiplicar por 2 para remover la fracción no afecta el signo

2),( 11

bayxF ++=

Inicioo: (x1,y1)

Page 19: Graficaci ón IA7200-T

Graficación 19

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);

}}

Page 20: Graficaci ón IA7200-T

Graficación 20

Bresenham no fue el final!Algoritmo doble de Xiaolin Wu:

El programa de dibujado es un autómata (máquina de estados finitos). i.e. Checar los siguientes dos pixeles de la línea.

Solo existen un número finito (pequeño) de posibilidades.

El algoritmo doble explota simetría dibujando simultáneamente de ambos extremos hacia el centro.

Page 21: Graficaci ón IA7200-T

Graficación 21

Algoritmo DobleLas posiciones posibles de los dos pixeles siguientes dependen de la pendiente – pixel actual en azul:

0<=m<=½

½<=m<=1

1<=m<=2

m>2

Page 22: Graficaci ón IA7200-T

Graficación 22

Círculos• Podemos usar Bresenham para círculos• Usar simetría 8-tuple

PosiblePixel

Siguiente

M

E

SE

PixelPrevios

PosiblePixel

Actual

Page 23: Graficaci ón IA7200-T

Graficación 23

Círculos

• La forma Implícita de un círculo es:

Si se elige SE :dnew = dold + (2x p − 2y p + 5)

dnew = dold + (2x p + 3)

Las Funciones son ecuaciones lineales en términos de(xp,yp)–Llamado punto de evaluación

f (x, y) = (x − xc )2 + (y − yc )2 − r2