//在指定位置画一个指定大小的圆
//(rx,ry):圆心
//(sx,sy),(ex,ey):设定的显示范围
//r :半径
//color:颜色
//mode:0,不填充;1,填充
void gui_draw_arc(u16 sx,u16 sy,u16 ex,u16 ey,u16 rx,u16 ry,u16 r,u16 color,u8 mode)
{
int a,b,c;
int di;
a=0;b=r;
di=3-(r<<1); //判断下个点位置的标志
while(a<=b)
{
if(mode)for(c=a;c<=b;c++)gui_draw_circle8(sx,sy,ex,ey,rx,ry,a,c,color);//画实心圆
else gui_draw_circle8(sx,sy,ex,ey,rx,ry,a,b,color); //画空心圆
a++;
//使用Bresenham算法画圆
if(di<0)di +=4*a+6;
else
{
di+=10+4*(a-b);
b--;
}
}
}
//画8点(Bresenham算法)
//(sx,sy),(ex,ey):设定的显示范围
//(rx,ry,a,b):参数
//color:颜色
void gui_draw_circle8(u16 sx,u16 sy,u16 ex,u16 ey,u16 rx,u16 ry,int a,int b,u16 color)
{
gui_draw_expoint(sx,sy,ex,ey,rx+a,ry-b,color);
gui_draw_expoint(sx,sy,ex,ey,rx+b,ry-a,color);
gui_draw_expoint(sx,sy,ex,ey,rx+b,ry+a,color);
gui_draw_expoint(sx,sy,ex,ey,rx+a,ry+b,color);
gui_draw_expoint(sx,sy,ex,ey,rx-a,ry+b,color);
gui_draw_expoint(sx,sy,ex,ey,rx-b,ry+a,color);
gui_draw_expoint(sx,sy,ex,ey,rx-b,ry-a,color);
gui_draw_expoint(sx,sy,ex,ey,rx-a,ry-b,color);
}
//在区域内画点
//(sx,sy),(ex,ey):设定的显示范围
//(x,y):点坐标
//color:颜色
void gui_draw_expoint(u16 sx,u16 sy,u16 ex,u16 ey,u16 x,u16 y,u16 color)
{
u16 tempcolor;
if(x<=ex&&x>=sx&&y<=ey&&y>=sy)
{
tempcolor=POINT_COLOR;
POINT_COLOR=color;
LCD_DrawPoint(x,y);
POINT_COLOR=tempcolor;
}
} |