|
在计算机上画圆,不外乎2种方法,一种是使用三角函数来实现;一种是以八分法来实现。
使用三角函数法,自然离不开三角函数库的支持,此外其处理速度也相对要满一些。而
八分法与之相比会更具特色,首先是快且无需三角函数库的支持,此外该程序经典、短小,
它不仅用于计算机绘图,也被广泛用于数控机床上,其程序如下:
- //在指定位置画一个指定大小的圆
- //(x,y):中心点
- //r :半径
- void Draw_Circle(u16 x0,u16 y0,u8 r)
- {
- int a,b;
- int di;
- a=0;b=r;
- di=3-(r<<1); //判断下个点位置的标志
- while(a<=b)
- {
- LCD_DrawPoint(x0-b,y0-a); //3
- LCD_DrawPoint(x0+b,y0-a); //0
- LCD_DrawPoint(x0-a,y0+b); //1
- LCD_DrawPoint(x0-b,y0-a); //7
- LCD_DrawPoint(x0-a,y0-b); //2
- LCD_DrawPoint(x0+b,y0+a); //4
- LCD_DrawPoint(x0+a,y0-b); //5
- LCD_DrawPoint(x0+a,y0+b); //6
- LCD_DrawPoint(x0-b,y0+a);
- a++;
- //使用Bresenham算法画圆
- if(di<0)di +=4*a+6;
- else
- {
- di+=10+4*(a-b);
- b--;
- }
- LCD_DrawPoint(x0+a,y0+b);
- }
- }
复制代码 其处理思想是将一个圆,以45度线进行分割,从而形成8个相对独立的区域,
然后在区域内以Bresenham算法差值画点来绘制出圆。所调用的只有画点函数,
其它就只剩下四则运算和逻辑判断了,堪称是“删繁就简”中的经典!!!
|
赞赏
-
1
查看全部赞赏
-
|