【嵌入式LCD画圆函数,看不懂。。。】
求教以下画圆函数TFT_Circle()的意思,感谢感谢:
已知画线函数为TFT_Line();
//语法格式: void TFT_Line(short x1, short y1, short x2, short y2, COLOR color)
//实现功能: 在屏幕中画直线
//参数:
// x1 - 起始点的x坐标
// y1 - 起始点的y坐标
// x2 - 结束点的x坐标
// y2 - 结束点的y坐标
// color - 直线颜色
画圆函数小弟看不懂,请求论坛里大侠们指点指点?给做出详细注释就更好了~感谢各位!
//=============================================================
//语法格式: void TFT_Circle(unsigned x,unsigned y,unsigned r,COLOR color,unsigned Mode);
//实现功能: 在屏幕中画圆
//参数:
// x - 圆心的x坐标
// y - 圆心的y坐标
// r - 圆的半径
// color - 圆的颜色
// Mode - 0(PAINT_HOLLOW) 空心圆
// 1(PAINT_SOLID) 实心圆
//返回值: 无
//=============================================================
void TFT_Circle(unsigned x,unsigned y,unsigned r,COLOR color,unsigned Mode)
{
int dx,dy,ref;
int Temp;
if(r == 0)
return;
dx = r;
dy = 1;
ref = 707 * r / 1000; // 参考值为0.707r
if(Mode == PAINT_SOLID) // 实心圆
{
while(dy <= dx)
{
if(dx > ref)
TFT_Line(x + ref + 1, y + dy, x + dx, y + dy, color);
if(x >= ref + 1 && dx > ref)
{
if(x < dx)
Temp = 0;
else
Temp = x - dx;
TFT_Line(Temp, y + dy, x - ref - 1, y + dy, color);
}
if(y >= dy && dx > ref)
TFT_Line(x + ref + 1, y - dy, x + dx, y - dy, color);
if(x >= ref + 1 && y >= dy && dx > ref)
{
if(x < dx)
Temp = 0;
else
Temp = x - dx;
TFT_Line(Temp, y - dy, x - ref - 1, y - dy, color);
}
if(dy != dx || dx == ref)
{
if(y < dx)
Temp = 0;
else
Temp = y - dx;
TFT_Line(x + dy, Temp, x + dy, y + dx, color);
}
if(x >= dy && (dy != dx || dy == ref))
{
if(y < dx)
Temp = 0;
else
Temp = y - dx;
TFT_Line(x - dy, Temp, x - dy, y + dx, color);
}
dy++;
if((r*r-dy*dy)<=(dx-1)*dx)
dx--;
}
TFT_Line(x + ref + 1, y, x + r, y, color);
if(x >= ref + 1)
{
if(x < r)
Temp = 0;
else
Temp = x - r;
TFT_Line(Temp, y, x - ref - 1, y, color);
}
if(y < r)
Temp = 0;
else
Temp = y - r;
TFT_Line(x, Temp, x, y + r, color);
}
else // 空心圆
{
while(dy <= dx)
{
TFT_PutPixel(x + dx, y + dy, color);
TFT_PutPixel(x - dx, y + dy, color);
TFT_PutPixel(x + dx, y - dy, color);
TFT_PutPixel(x - dx, y - dy, color);
if(dx != dy)
{
TFT_PutPixel(x + dy, y + dx, color);
TFT_PutPixel(x + dy, y - dx, color);
TFT_PutPixel(x - dy, y + dx, color);
TFT_PutPixel(x - dy, y - dx, color);
}
dy++;
if((r*r-dy*dy)<=(dx-1)*dx)
dx--;
}
TFT_PutPixel(x + r, y, color);
TFT_PutPixel(x - r, y, color);
TFT_PutPixel(x, y + r, color);
TFT_PutPixel(x, y - r, color);
}
}
//=============================================================
//语法格式: void TFT_Rectangle(unsigned x1, unsigned y1, unsigned x2, unsigned y2, COLOR color, unsigned Mode);
//实现功能: 在屏幕中画矩形
//参数:
// x1 - 矩形的左上角x坐标
// y1 - 矩形的左上角y坐标
// x2 - 矩形的右下角x坐标
// y2 - 矩形的右下角y坐标
// color - 填充颜色
// Mode - 0(PAINT_HOLLOW) 空心矩形
// 1(PAINT_SOLID) 实心矩形
//返回值: 无
//=============================================================
void TFT_Rectangle(unsigned x1, unsigned y1, unsigned x2, unsigned y2, COLOR color, unsigned Mode)
{
int i;
if(x1>x2)
{
i = x1;
x1 = x2;
x2 = i;
}
if(y1>y2)
{
i = y1;
y1 = y2;
y2 = i;
}
if(Mode == PAINT_SOLID) // 实心矩形
{
for(i=y1; i<=y2; i++)
{
TFT_Line(x1, i, x2, i, color);
}
}
else // 空心矩形
{
TFT_Line(x1, y1, x2, y1, color);
TFT_Line(x1, y2, x2, y2, color);
TFT_Line(x1, y1, x1, y2, color);
TFT_Line(x2, y1, x2, y2, color);
}
}