円を描く方法のまとめ

8860 ワード

埋め込み式とSTM 32の過程の中で出会う比較的に面白い小さいプログラムを学びます:1、LCDのスクリーンの上で色で1つの中空の円を描きます
#include 
#define pi 3.1415926
#define N 360
void draw_Circle(int m,int n,int r,int color)
{
    int i;
    int x,y;
    for(i=0;ix = m+r*cos(2.0*pi*i/N);
        y = n+r*sin(2.0*pi*i/N);
        PutPixel(x,y,color);
    }
}

2、LCD画面に色で塗りつぶした円を描く
void draw_Circle(int x,int y,int color)
{
    int i,j,m,n;
    for(i=x-r;i<x+r;i++)
    for(j=y-r;j<y+r;j++)
    {
        m = fabs(x-i);
        n = fabs(y-j);
        if(m*m+n*n<=r*r)
            PutPixel(i,j,color);
    }
}

3、LCD画面に中空円を描く
static void draw_Circle(int x,int y,int r,int color)
{
    int i,j;
    for(i=0;i<=r;i++)
    {
        j=sqrt(r*r-i*i);
        PutPixel(x-j,y+i,color);
        PutPixel(x+j,y+i,color);
        PutPixel(x-j,y-i,color);
        PutPixel(x+j,y-i,color);
        PutPixel(x-i,y+j,color);
        PutPixel(x+i,y+j,color);
        PutPixel(x-i,y-j,color);
        PutPixel(x+i,y-j,color);
    }
}

4、LCDに実心円を描く
void draw_Circle(int x,int y,int r,int color)
{
    int i,j;
    for(i=0;i<=r;i++)
    {
        j=sqrt(r*r-i*i);
        draw_Line(x-j,y-i,x+j,y-i,color);
        draw_Line(x+j,y+i,x-j,y+i,color);
    }
}

5、丸を描く
static void draw_Circle(int x,int y,int r,int color)
{
    int i,j;
    for(i=0;i<=LCD_xsize_480320;i++)
        for(j=0;j<=LCD_ysize_480320;j++)
        {
            if(((x-i)*(x-i)+(y-j)*(y-j)-r*r)<=0)
            PutPixel(i,j,color);
    }
}

6、中空円を描く
static void draw_Circle(int x,int y,int r,int color)
{
    int i,j;
    for(i=0;i<=LCD_xsize_480320;i++)
        for(j=0;j<=LCD_ysize_480320;j++)
        {
            if((((x-i)*(x-i)+(y-j)*(y-j)-r*r)>=0)&&(((x-i)*(x-i)+(y-j)*(y-j)-r*r)<=100))
            PutPixel(i,j,color);
    }
}

7、塗りつぶし円を描く
static void draw_Circle(int x,int y,int r,int color)
{
    int i,j;
    for(j=0;j<=r;j++)
    {
        i=sqrt(r*r-j*j);
        FilledRectangle(x-i,y+j,x+i,y+j,color);
        FilledRectangle(x-i,y-j,x+i,y-j,color);
    }
}

8、中空円を描く
static void draw_Circle(int x,int y,int r,int color)
{
    int a,b,di;
    a=0;b=r;di=3-(r<<1);
    while(a<=b)
    {
        PutPixel(x-b,y-a,color);
        PutPixel(x+b,y-a,color);
        PutPixel(x-a,y+b,color);
        PutPixel(x-b,y-a,color);
        PutPixel(x-a,y-b,color);
        PutPixel(x+b,y+a,color);
        PutPixel(x+a,y-b,color);
        PutPixel(x+a,y+b,color);
        PutPixel(x-b,y+a,color);
        a++;
        if(di<0) di+=4*a+6;
        else {di+=10+4*(a-b);b--;}
        PutPixel(x+a,y+b,color);
    }
}