初级会员

- 积分
- 151
- 金钱
- 151
- 注册时间
- 2014-9-29
- 在线时间
- 10 小时
|
5金钱
//画实心圆
//x0,y0:坐标
//r:半径
//color:颜色
void gui_fill_circle(u16 x0,u16 y0,u16 r,u16 color)
{
u32 i;
u32 imax = ((u32)r*707)/1000+1;
u32 sqmax = (u32)r*(u32)r+(u32)r/2;
u32 x=r;
gui_draw_hline(x0-r,y0,2*r,color);
for (i=1;i<=imax;i++)
{
if ((i*i+x*x)>sqmax)// draw lines from outside
{
if (x>imax)
{
gui_draw_hline (x0-i+1,y0+x,2*(i-1),color);
gui_draw_hline (x0-i+1,y0-x,2*(i-1),color);
}
x--;
}
// draw lines from inside (center)
gui_draw_hline(x0-x,y0+i,2*x,color);
gui_draw_hline(x0-x,y0-i,2*x,color);
}
}
请高手解释下高亮两句代表什么?谢谢
|
最佳答案
查看完整内容[请看2#楼]
u32 imax = ((u32)r*707)/1000+1; 我来解释一下这一句代码:
1、u32是数据类型,无符号整型变量 imax的定义,并初赋值 ((u32)r*707)/1000+1
2、707是根号2的一半(1.414除以2后)扩大了1000倍,消除小数点,把浮点数化为整数运算。所以这里有个除以1000.
3、圆与直线y=x在圆上的交点坐标是(0.707r,0.707r),,圆的方程是:x^2 + y^2 = r^2
|