Requisitos: C, ¡dibuja un círculo!
(1) Características de un círculo
La definición de un círculo es un conjunto de puntos a una distancia r de una posición central determinada (xc, yc). Un círculo centrado en el origen tiene cuatro ejes de simetría x=0, y=0, x=y y x=-y. Si conoces un punto (x, y) en un arco, puedes obtener sus otros siete puntos con respecto a los cuatro ejes de simetría. Esta propiedad se llama octosimetría del círculo. Entonces, al escanear y convertir un octavo del arco, puede encontrar el conjunto de píxeles para todo el arco.
Transformación de simetría al generar el punto central en el punto 0,0 de la circunferencia (ver: P.26 Figura 3-4)
Algoritmo para mostrar ocho puntos simétricos en el arco:
p>void CirclePoints(int x,int y,int color)
{
drawpixel(x,y color); color);
dibujarpixel(-x,y,color); dibujarpixel(y,-x,color);
dibujarpixel(x,-y,color); y,x,color);
drawpixel(-x,-y,color); >(2) El método del punto medio para dibujar un círculo (ver P.29 y P.30P.29-P.30)
Si construimos la función F(x,y)=x2+y2 - R2, entonces el punto es F (x, y) = 0, el punto fuera del círculo es F (x, y)> 0 y el punto dentro del círculo es F (x, y) <0. Construya el discriminante según el método del dibujo del punto medio:
d=F(M)=F(xp+1,yp-0.5)=(xp+1)2+(yp-0.5)2- R2
Si d<0, P1 debe considerarse como el siguiente píxel y el discriminante del siguiente píxel es:
d=F(xp+2,yp-0.5) =(xp +2) 2+ (yp-0.5) 2-R2=d+2xp+3
Si d≥0, entonces P2 debe usarse como el siguiente píxel y el discriminante del siguiente el píxel es:
d=F(xp+2,yp-1.5)=(xp+2)2+(yp-1.5)2-R2=d+2(xp-yp)+5
Aquí discutimos que el primer píxel es (0,R), y el valor inicial del discriminante d es:
d0=F(1,R-0.5)=1.25- R
Figura 2.2.1 Comparación del píxel candidato del píxel actual y el píxel candidato del siguiente píxel
Figura 2.2.1 Comparación del píxel candidato del píxel actual y del siguiente píxel
Algoritmo MidPointCircle:
MidPointCircle(int r int color)
{
int x,y;
float d;
x=0; y=r; d=1.25-r;
puntos circulares (x,y,color) ;
mientras(x<=y )
{
si(d<0 ) d+=2*x+3; > else { d+=2*(x-y)+5; y --;}
x++
y=1.
x++; >
círculos (x,y,color);
}
}
Para mejorar aún más la eficiencia del algoritmo, el punto flotante los números en el algoritmo anterior se pueden cambiar a números enteros y la operación de multiplicación se puede cambiar a operación de suma. Es decir, solo se utilizan números enteros para implementar el método de dibujo del círculo del punto medio.
(3) Ejemplo: el radio es 6, punto dibujado usando el algoritmo del método del círculo del punto medio
(4) Diagrama esquemático del método del círculo del punto medio