Elipses
Elipses
Elipses
SIS 2430
Contenido
● INTRODUCCIÓN
● PRIMITIVAS GRÁFICAS
● ESPECIFICACIÓN DE UNA DISCRETIZACIÓN
● DIBUJO DE LÍNEAS RECTAS
● ALGORITMOS PARA CIRCUNFERENCIAS
● ALGORITMOS PARA ELIPSES
Algoritmo del Punto Medio
• Hay que determinar el píxel más cercano a la circunferencia
• Consideremos el centro del círculo en (0,0)
• Comenzaremos en el punto (0,R) e iremos desde x=0 hasta x=y, donde la
pendiente va de 0 a -1
• Sólo pintaremos el primer octante
• Sea la función:
• Este test lo ejecutaremos en los puntos medios entre los píxel que hay que
decidir
Algoritmo del Punto Medio
Mecanismo de elección del píxel a pintar:
Uso de P (referencia)
Coordenadas de P ??
Algoritmo del Punto Medio
• Supongamos ya dibujado el píxel (xk, yk)
pk = f (xk+1, yk – ½) = (xk+1)2 + (yk – ½) 2 – R2
• La gran ventaja es que puede calcularse pk+1 a partir del anterior pk. En el
paso k + 1, el parámetro de decisión se evalúa con base en la ecuación
anterior como:
pk+1 = f (xk+1 + 1, yk+1 – ½) = (xk+1 + 1) 2 + (yk+1 – ½) 2 – R2
• Al sustraer la ecuación de la anterior pk obtenemos
pk+1 - pk = (xk+1 + 1) 2 + (yk+1 – ½) 2 – R2 - (xk+1)2 - (yk – ½) 2 + R2
pk+1 - pk = xk+12+2 xk+1+12- (xk+1)2 +(yk+12 -2½yk+1+ ½2) - (yk2–2½yk+½
)
2
pk+1 = pk + 2xk+ 3
• Sin embargo, da igual. Podemos redondearlo, porque todos los incrementos son
enteros, y sólo queremos utilizar el signo de pk, y no su valor
Algoritmo del Punto Medio
Algoritmo del Punto Medio
void CircleMidPoint(int xc, int yc, int r) void Point( int xc, int yc, int x, int y)
{
int x, y, p; {
x = 0; Point(xc + x,yc + y);
y = r;
Point(xc - x,yc + y);
p = 1 - r;
PlotPoint(xc,yc,x,y); Point(xc + x,yc - y);
/* se cicla hasta trazar todo un octante */ Point(xc - x,yc - y);
while (x < y)
{ Point(xc + y,yc + x);
x = x + 1; Point(xc - y,yc + x);
if (p < 0)
Point(xc + y,yc - x);
p = p + 2*x + 3;
else { Point(xc - y,yc - x);
y = y - 1; }
p = p + 2*(x - y) + 5;
}
PlotPoint(xc,yc,x,y);
}
}
ALGORITMOS PARA ELIPSES
• Expresado de forma ambigua, una elipse es una circunferencia alargada.
• Una elipse se define como el conjunto de puntos en que la suma de las distancias
desde dos posiciones fijas (focos) sea la misma para todos los puntos.
• Si las distancias de los dos focos desde cualquier punto P=(x,y) en la elipse se
representan como d1 y d2, entonces la ecuación general de una elipse puede
expresarse como
d1 + d2 = constante
ALGORITMO BÁSICO
• Las ecuaciones de la elipse se simplifican, en gran medida, si se orientan los ejes
mayor y menor para alinearse con los ejes de las coordenadas, como se muestra en
la siguiente figura.