Вы находитесь на странице: 1из 7

Primitivas Gráficas

Discretización

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.

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

Técnicas basadas en el análisis de error:


Bressenham:a partir de cada pixel de la discretización
determina cual es el próximo pixel que minimiza el error
que se genera al discretizar.

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)

dy ∆y y1 − y 0
m= = =
dx ∆x x1 − x 0

2
DDA Digital Differential Analizer
•Camina a lo largo del eje x desde X0 hasta X1.

•Para cada valor de X i calcula Yi y lo redondea al


pixel más próximo.

•El cálculo de Yi+1 puede hacer incrementalmente


como Yi+1= Yi + m lo que equivale a incrementar
a X en 1.

Sustituyendo las coordenadas de los extremos:

yi = m * xi + B
y i + 1 = m * ( x i + 1) + B
Y simplificando:
y i +1 = y i + m

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.

3
Extensión por simetría

∆y < 0 A

∆x < 0 B
∆y
>1 C
∆x

Desventajas de DDA

• Requiere aritmética de punto flotante (valores reales), la que es más


lenta 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

4
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óximo


pixel E (este) y D (diagonal)

•Q es la intersección de la línea a dibujar y la


línea de la grilla x= xp + 1

Segmento de recta por


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

y
•P •E

•D

10

5
Segmento de recta por
Bresenham
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 sea
hacia abajo.
Si el error en P es e, habra que actualizar el error para el siguiente
pixel como: x
1
Si se elige E y
• • m
e=e+m

Si se elige D
e = e + m-1 •

11

Segmento de recta por


Bresenham
Cómo elegimos entonces el siguiente pixel?

Si e+m > 0.5


entonces elegir D
sino elegir E.

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

si es e > 0
entonces elegir D
sino elegir E

12

6
Segmento de recta por
Bresenham
∆y
Otra economía: e0 = m − 0 .5 = − 0 .5
∆x
Como se testea el error por cero, se puede multiplicar por 2∆x
sin alterar la inecuación, entonces queda:
Paso E
e0 = 2 ∆ y − ∆ x e = e + 2∆y
Paso D
e = e + 2∆y − 2∆x
Desde esta forma todas las operaciones son sumas y restas enteras
13

Segmento de recta por


Bresenham
Algoritmo:
dx = x1 − x0 ; dy = y1 − y0 ; x = x0 ; y = y0 ; e = iy − dx;
ix = 2dx; iy = 2dy
for ( x = x0 hasta x = x1 ) hacer
putpixel ( x, y );
e = e + iy;
if e > 0 then
y = y + 1;
e = e − ix;
end ;
end ;
end ;
14

Вам также может понравиться