graficas primitivas

7
1 Primitivas Gráficas Discretización 2 Primitivas Gráficas • Puntos Se definen por su posición y color. Segmentos de recta Se definen por las coordenadas de sus extremos. • Circunferencias Se definen por las coordenadas del centro y el radio. Incluyen arcos de circunferencia y elipses. • Polígonos Se definen con las coordenadas de sus vértices.

Transcript of graficas primitivas

Page 1: graficas primitivas

1

1

Primitivas Gráficas

Discretización

2

Primitivas Gráficas

• PuntosSe definen por su posición y color.

• Segmentos de rectaSe definen por las coordenadas de sus extremos.

• CircunferenciasSe definen por las coordenadas del centro y el radio.Incluyen arcos de circunferencia y elipses.

• PolígonosSe definen con las coordenadas de sus vértices.

Page 2: graficas primitivas

2

3

Técnicas de Discretización

Técnicas basadas en la ecuación diferencial:DDA (Digital Diferential Analisis) evalúa la ecuacióndiferencial de la primitiva a graficar en intervalosdiscretos.

Técnicas basadas en el análisis de error:Bressenham:a partir de cada pixel de la discretizacióndetermina cual es el próximo pixel que minimiza el errorque se genera al discretizar.

4

Discretización de rectas(Scan Converting Lines)

Línea definida del pixel (x0,y0) al (x1,y1)

Pendiente de la recta (es un número real)

0101

xxyy

xy

dxdy

m−−

=∆∆

==

Page 3: graficas primitivas

3

5

•Camina a lo largo del eje x desde X0 hasta X1.

•Para cada valor de Xi calcula Yi y lo redondea alpixel más próximo.

•El cálculo de Yi+1 puede hacer incrementalmentecomo Yi+1= Yi + m lo que equivale a incrementara X en 1.

Sustituyendo las coordenadas de los extremos:

Y simplificando:

DDA Digital Differential Analizer

Bxmy

Bxmy

ii

ii

++=

+=

+ )1(*

*

1

myy ii +=+1

6

DDA Digital Differential Analizer

Algoritmo:void rectaDDA(int x0, int y0, int x1, int y1, int color){ int x; float dy, dx, y, m;

dy = y1 - y0; dx = x1 - x0; m = dy / dx; y = y0;

for( x = x0; x <= x1; x++ ) { setPixel( x, (int) floor( y+0.5 ), color); y += m; } }

floor(x): devuelve el mayor entero que sea menor o igual que x.

Page 4: graficas primitivas

4

7

Extensión por simetría

1

0

0

>∆∆

<∆<∆

x

y

x

y A

B

C

8

Desventajas de DDA

• Requiere aritmética de punto flotante (valores reales), la que es máslenta y costosa.

• Es inapropiado para implementar por hardware (aritmética real).

• El redondeo es una operación real adicional.

• Las líneas largas pueden verse afectadas por el error de redondeo en m

Page 5: graficas primitivas

5

9

Midpoint (Bresenham's) Algorithm•No requiere función de redondeo.

•No usa operaciones aritméticas de punto flotante.

•Es incremental (usa el resultado del cálculo anterior)

•El pixel seleccionado previamente es (xp,yp)

•Hay dos elecciones posibles para el próximopixel E (este) y D (diagonal)

•Q es la intersección de la línea a dibujar y lalínea de la grilla x= xp + 1

10

Segmento de recta porBresenham

Este método fue se basa en analizar el error entre el segmento de rectay la discretización del segmento.Sea P un punto de la discretización, entonces el próximo pixel solopuede ser E o D y la decisión de ir a E o a D se toma de acuerdo alerror que se comete en cada paso

• P

• D

• E

x

y

Page 6: graficas primitivas

6

11

Segmento de recta porBresenham

El error es la distancia entre el centro del pixel y el segmento de recta,medido en dirección del eje y positivo del espacio de pantalla, o seahacia abajo.Si el error en P es e, habra que actualizar el error para el siguientepixel como:

Si se elige E e = e + m

Si se elige D e = e + m-1

• •

m

1

x

y

12

Segmento de recta porBresenham

Cómo elegimos entonces el siguiente pixel?

Si e+m > 0.5entonces elegir Dsino elegir E.

Para economizar el cómputo, se toma e0 =m-0.5, y e= e0 entonces

si es e > 0entonces elegir Dsino elegir E

Page 7: graficas primitivas

7

13

Segmento de recta porBresenham

Otra economía: 5.05.00 −∆∆=−=

xy

me

Como se testea el error por cero, se puede multiplicar por 2∆xsin alterar la inecuación, entonces queda:

xye ∆−∆= 20 yee ∆+= 2

xyee ∆−∆+= 22

Paso E

Paso D

Desde esta forma todas las operaciones son sumas y restas enteras

14

Segmento de recta porBresenham

Algoritmo:

;

;

;

;

;1

0

;

);,(

)(

2;2

;;;;;

10

000101

end

end

end

ixee

yy

theneif

iyee

yxputpixel

hacerxxhastaxxfor

dyiydxix

dxiyeyyxxyydyxxdx

−=+=>

+=

====

−===−=−=