Elipses

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 15

Primitivas

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)

• Si P esta dentro del circulo,


Píxel a la derecha

•Si P está fuera del círculo,


Píxel a la derecha y abajo.

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 = 2 xk+1+1 +yk+12 -yk+1- yk2+yk


• Re ordenando obtenemos
pk+1 = pk + 2xk+1 + 1 + (y k+12–yk2) – (yk+1–yk)

Donde: y es y ó y -1 dependiendo del signo de p


Algoritmo del Punto Medio
Si pk < 0 hay que pintar el pixel (xk+1, yk) yk+1 = yk
reemplazando en pk+1 se tiene
pk+1 = pk + 2xk+1 + 1 + (y k2–yk2) – (yk–yk)
pk+1 = pk + 2xk+1 + 1

pk+1 = pk + 2xk+ 3

Si pk > 0 hay que pintar el pixel (xk+1, yk-1) yk+1 = yk -1


reemplazando en pk+1 se tiene
pk+1 = pk + 2xk+1 + 1 + (( y k–1 ) 2–yk2) – (yk–1–yk)
pk+1 = pk + 2xk+1 + 1 + (yk2–2yk+1 –yk2) – (yk–1–yk)
pk+1 = pk + 2xk+1 –2yk+3
pk+1 = pk + 2xk –2yk+5
Algoritmo del Punto Medio
• Empezamos en el punto (0, R).
• ¿Cuánto vale p0?
p0 = f (1, R- ½) = 12+ (R- ½) 2 -R2
p0 = 12+ R2 -2R ½ - ½ 2 -R2
p0 = 5/4 – R no es entero!

• 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.

• El parámetro rx por convención designa el eje mayor y el parámetro ry designa el


eje menor.
• La ecuación de la elipse puede expresarse en término de las coordenadas del centro
de la elipse y los parámetros rx y ry, como
ALGORITMO BÁSICO
• Al utilizar las coordenadas polares r y q, también es posible describir la elipse en
posición estándar con las ecuaciones paramétricas:
x = xc + rx cos ß
y = yc + ry sin ß
• Se puede aplicar consideraciones sobre la simetría para reducir aún más los cálculos.
• Una elipse en posición estándar es simétrica entre cuadrantes, no es simétrica entre los
dos octantes. De este modo que al calcular una posición de un píxel obtenemos por
simetría las tres posiciones de los otros tres cuadrantes.
Algoritmo del punto Medio
• El planteamiento que se utiliza aquí es similar a aquel
empleado en el despliegue de una circunferencia.

• Dado los parámetros rx, ry, (xc, yc), se determina los


puntos (x, y) para una elipse en posición estándar
centrada en el origen y luego se altera los puntos, de
modo que la elipse este centrada en (xc, yc).

• El método de punto medio para elipse se aplica a lo


largo del primer cuadrante en dos partes, de acuerdo a
una elipse con la pendiente rx < ry, como se muestra a
continuación.
Algoritmo del punto Medio
void puntose(int xc,int yc,int x,int y, int c){
putpixel(xc+x,yc+y,c);
putpixel(xc-x,yc+y,c);
putpixel(xc+x,yc-y,c);
putpixel(xc-x,yc-y,c);
}
Algoritmo del punto Medio
void melipse(int xc,int yc,int rx,int ry, int color){
long double rx2 = rx * rx, ry2 = ry * ry; //region 2
long double tworx2 = 2*rx2, twory2 = 2*ry2; p = ceill(ry2 * ( x+.5 ) * ( x+.5 ) + rx2
long double p, x = 0, y = ry; * ( y-1 ) * ( y-1 ) - rx2 * ry2);
long double px = 0, py = tworx2 * y; while(y>0){
puntose(xc,yc,x,y,color); y--;
py-= tworx2 ;
//region 1
if(p>0) p+= rx2-py ;
p=ceill( ry2 - ( rx2 * ry ) + ( 0.25 * rx2 ) );
else{ x++;
while(px<py){ px+= twory2;
x++; p+= rx2-py+px;
px+=twory2; }
if( p < 0 ) p += ry2 + px; puntose(xc,yc,x,y,color);
else{ y--; }
py-= tworx2 ;
}
p += ry2 + px - py;
}
puntose(xc,yc,x,y,color);
}

También podría gustarte