Circulos

Solo disponible en BuenasTareas
  • Páginas : 13 (3192 palabras )
  • Descarga(s) : 0
  • Publicado : 24 de enero de 2010
Leer documento completo
Vista previa del texto
Círculos
 
Ahora vamos a empezar con una de las rutinas de uso mas frecuente, la de poner círculos en la pantalla. Para poder realizar esto usaremos las ecuaciones de la circunferencia en coordenadas polares que son:

Estas ecuaciones serán las que ocuparemos para calcular cada punto (x,y) del círculo, donde el r será obviamente el radio de círculo y q será el angulo que forma el radio con laparte positiva del eje x. En forma gráfica sería así:

El ángulo deberá estar en radianes ya que las funciones de seno y coseno que incluye C , trabajan son los ángulos en radianes. La fórmula para transformar grados a radianes es la siguiente:

Entonces para dibujar el círculo de un radio determinado, solamente tenemos que hacer un ciclo desde 0 hasta 360, pero con incrementos pequeños,calcular cada punto con las ecuaciones en coordenadas polares e ir dibujando cada punto. El ciclo en vez de ir de 0 a 360 ira de 0 a 6.28 (360*3.14/180=6.28) ya que el ángulo debe estar en radianes.
Como dijimos el ciclo de 0 a 6.28 debe hacerse con incrementos pequeños, no contando de uno en uno, ya que para un circulo de radio muy grande, podrían aparecer huecos entre un punto y el siguiente, por lotanto tenemos que usar un incremento fraccionario. El valor 0.005 produce buenos resultados. Dibujar el círculo punto a punto es una tarea un poco lento, debido a que se debe calcular en cada punto el seno y el coseno del angulo, y estas funcionas son muy lentas. Para solucionar esto  se deben crear tablas predefinidas o precalculadas, pero esto lo podrás ver en la sección correspondiente. 
Ahoraveremos como nos quedaría una rutina en lenguaje C para dibujar un círculo en pantalla:
 
void Circle(int cx, int cy, int radio, unsigned char color)
{
    float angulo=0;
    int x, y;     do
    {
        x = cx + radio * cos(angulo);
        y = cy + radio * sin(angulo);         if((x>=0) && (y>=0) && (x<320) && (y<200)) 
            PutPixel(x, y ,color);         angulo+=0.005;
     } while(angulo<6.28);
} |
Nótese que al calcular las coordenadas x e y, estamos sumándoles las coordenadas cx e cy. Esto se hace para trasladar el centro del círculo a cualquier punto que queramos. De esta forma, para dibujar un círculo solamente tenemos que especificar las coordenadas del centro, el radio y el color del círculo.
La condición que seencuentre antes del PutPixel nos sirve para verificar que las coordenadas que se calculan no se salgan de los bordes de la pantalla. Esta verificación hace que la rutina vaya un poco más lenta. Acuérdense que las funciones cos(), sin() se encuentran en math.h
Algoritmos de generación de circunferencias
Como la circunferencia es una componente común de muchos tipos de imágenes y gráficas, losprocedimientos para generar circunferencias (y elipses) se incluyen a menudo en paquetes de gráficas. Los parámetros básicos que definen una circunferencia son las coordenadas del centro (xc, yc) y el radio r (fig. 12). Podemos expresar la ecuación de una circunferencia en varias formas, mediante parámetros de coordenadas Cartesianas o polares. La figura 13 muestra la relación existente entre losparámetros Cartesianos y los polares.
FIGURA 12 | FIGURA 13 |
| |

 
Ecuacíones de circunferencias
 Una forma estándar de la ecuación de la circunferencia es el teorema de Pitágoras:
  
(x - xc)2 + (y - yc)2 = r2 (16)
Esta ecuación podría usarse para trazar una circunferencia recorriendo el eje x enJ
pasos unitarios de xc - r a xc + r y calculando los valores de y correspondientes en cada posicióncomo
y = yc +- (r2 - (x - xc)2)1/2 (17)
 Obviamente, este punto de vista implica una tarea de cálculo considerable en cada etapa y el espaciamiento entre las posiciones de los pixeles trazados no es uniforme, como se muestra en la figura 14. Podríamos ajustar el espaciamiento intercambiando x y y (probando valores de y y calculando valores de x) siempre que el valor absoluto de la pendiente de la...
tracking img