首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

单片机 LCD C语言画弧线的程序,哪位高手会

2012-04-02 
单片机 LCDC语言画弧线的程序,谁会?C语言画弧线的程序,谁会?不要带大量重复sin或者cos的,那样会很慢。下面

单片机 LCD C语言画弧线的程序,谁会?
C语言画   弧线的程序,谁会?   不要带大量重复sin或者cos的,那样会很慢。下面画圆的程序可以改成画弧形的程序吗?
大侠们,出手吧!


提供一个画圆的程序:

1.view   sourceprint?    
2.   //   八对称性        
3.    
4.inline   void   _draw_circle_8(IMAGE   *img,   int   xc,   int   yc,   int   x,   int   y,   unsigned   long   c)      
5.{        
6.         //   参数   c   为颜色值        
7.         putpixel(img,   xc   +   x,   yc   +   y,   c);        
8.         putpixel(img,   xc   -   x,   yc   +   y,   c);        
9.         putpixel(img,   xc   +   x,   yc   -   y,   c);      
10.         putpixel(img,   xc   -   x,   yc   -   y,   c);        
11.         putpixel(img,   xc   +   y,   yc   +   x,   c);      
12.         putpixel(img,   xc   -   y,   yc   +   x,   c);        
13.         putpixel(img,   xc   +   y,   yc   -   x,   c);        
14.         putpixel(img,   xc   -   y,   yc   -   x,   c);        
15.}              
16.    
17.   //Bresenham 's   circle   algorithm        
18.void   draw_circle(IMAGE   *img,   int   xc,   int   yc,   int   r,   int   fill,   unsigned   long   c)    
19.{        
20.         //   (xc,   yc)   为圆心,r   为半径        
21.         //   fill   为是否填充        
22.         //   c   为颜色值              
23.         //   如果圆在图片可见区域外,直接退出        
24.    
25.         if(xc   +   r   <   0   ||   xc   -   r   > =   img-> w   ||   yc   +   r   <   0   ||   yc   -   r   > =   img-> h)      
26.         {    
27.                 return;    
28.         }    
29.    
30.         int   x   =   0,   y   =   r,   yi,   d;        
31.                 d   =   3   -   2   *   r;        
32.    
33.         if(fill)    
34.         {        
35.                 //   如果填充(画实心圆)        
36.                 while(x   <=   y)      


37.                 {        
38.                         for(yi   =   x;   yi   <=   y;   yi   ++)        
39.                         {    
40.                                 _draw_circle_8(img,   xc,   yc,   x,   yi,   c);        
41.                         }    
42.                         if(d   <   0)      
43.                         {        
44.                                 d   =   d   +   4   *   x   +   6;        
45.                         }      
46.                         else      
47.                         {        
48.                                 d   =   d   +   4   *   (x   -   y)   +   ;        
49.                                 y   --;        
50.                         }        
51.    
52.                         x++;        
53.                 }        
54.         }      
55.         else      
56.         {        
57.                 //   如果不填充(画空心圆)        
58.                 while   (x   <=   y)      
59.                 {        
60.                         _draw_circle_8(img,   xc,   yc,   x,   y,   c);        
61.    
62.                         if(d   <   0)      
63.                         {        
64.                                 d   =   d   +   4   *   x   +   6;        
65.                         }      


66.                         else      
67.                         {        
68.                                 d   =   d   +   4   *   (x   -   y)   +   ;        
69.                                 y   --;        
70.                         }        
71.    
72.                         x   ++;        
73.                 }        
74.         }        
75.}      


[解决办法]
加上圆弧的起点和终点就可以了
[解决办法]
有固定的算法

热点排行