|
发表于 2014-12-19 11:09:55
|
显示全部楼层
虽然不知道什么原理 但一直都拿过来用
/*
* === FUNCTION =================================================
* Name: LCD_DrawCircle
* Description: 在指定位置画一个指定大小的圆,(x0,y0):中心点,r:半径
* ================================================================
*/
void LCD_DrawCircle(UINT16 x0,UINT16 y0,UINT8 r, UINT16 color)
{
int a,b;
int di;
a=0;
b=r;
di=3-(r<<1); //判断下个点位置的标志
while(a<=b)
{
LCD_DrawPoint(x0+a,y0-b,color); //5
LCD_DrawPoint(x0+b,y0-a,color); //0
LCD_DrawPoint(x0+b,y0+a,color); //4
LCD_DrawPoint(x0+a,y0+b,color); //6
LCD_DrawPoint(x0-a,y0+b,color); //1
LCD_DrawPoint(x0-b,y0+a,color);
LCD_DrawPoint(x0-a,y0-b,color); //2
LCD_DrawPoint(x0-b,y0-a,color); //7
a++;
//使用Bresenham算法画圆
if(di<0) di+=4*a+6;
else
{
di+=10+4*(a-b);
b--;
}
}
} |
|