円を描く方法のまとめ
8860 ワード
埋め込み式とSTM 32の過程の中で出会う比較的に面白い小さいプログラムを学びます:1、LCDのスクリーンの上で色で1つの中空の円を描きます
2、LCD画面に色で塗りつぶした円を描く
3、LCD画面に中空円を描く
4、LCDに実心円を描く
5、丸を描く
6、中空円を描く
7、塗りつぶし円を描く
8、中空円を描く
#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);
}
}