用C语言怎么画圆呢?

2020-01-23 14:36发布

请问谁懂C语言画圆的原理?无穷多边形吗
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
sadf1234
1楼-- · 2020-01-24 10:42
 精彩回答 2  元偷偷看……
51yyaayya
2楼-- · 2020-01-24 13:24
y574924080 发表于 2012-3-29 19:37
可以看看这个

http://www.ourdev.cn/forum.php?mod=viewthread&tid=5462626&extra=page%3D1%26filter%3Ddi ...

谢谢,这个贴总结的很多啊!
y574924080
3楼-- · 2020-01-24 18:09
51yyaayya 发表于 2012-3-30 13:55
谢谢,这个贴总结的很多啊!

不用,

大家互帮互助~~~~~~~
cqv
4楼-- · 2020-01-24 22:27
本帖最后由 cqv 于 2012-3-30 19:22 编辑

当年不知道从那抄的。。
  1. void LCD_Circle (unsigned int x, unsigned int y, unsigned int r, unsigned int color)
  2. {
  3.         int a, b;
  4.         int di;

  5.         a = 0;
  6.         b = r;
  7.         di = 3 - 2 * r;                                //判断下个点位置的标志
  8.         while (a <= b)
  9.         {
  10.                 LCD_Point (x - b, y - a, color);        //3           
  11.                 LCD_Point (x + b, y - a, color);        //0           
  12.                 LCD_Point (x - a, y + b, color);        //1      
  13.                 LCD_Point (x - b, y - a, color);        //7           
  14.                 LCD_Point (x - a, y - b, color);        //2            
  15.                 LCD_Point (x + b, y + a, color);        //4               
  16.                 LCD_Point (x + a, y - b, color);        //5
  17.                 LCD_Point (x + a, y + b, color);        //6
  18.                 LCD_Point (x - b, y + a, color);
  19.                 a++;

  20.                 /***使用Bresenham算法画圆**/
  21.                 if (di < 0)
  22.                         di += 4 * a + 6;
  23.                 else
  24.                 {
  25.                         di += 10 + 4 * (a - b);
  26.                         b--;
  27.                 }
  28.                 LCD_Point (x + a, y + b, color);
  29.         }
  30. }
复制代码
jeffwei
5楼-- · 2020-01-24 22:54
我用的这个
  1. void LCD_DrawFullCircle(rt_uint16_t Xpos, rt_uint16_t Ypos, rt_uint16_t Radius, rt_uint16_t Circle_colour, rt_uint16_t full_or_not)
  2. {
  3.   int32_t  D;    /* Decision Variable */
  4.   uint32_t  CurX;/* Current X Value */
  5.   uint32_t  CurY;/* Current Y Value */
  6.   D = 3 - (Radius << 1);
  7.   CurX = 0;
  8.   CurY = Radius;   
  9.   
  10.   
  11.   
  12.   D = 3 - (Radius << 1);
  13.   CurX = 0;
  14.   CurY = Radius;
  15.   while (CurX <= CurY)
  16.   {
  17.     if(full_or_not!=0)
  18.     {
  19.       LCD_DrawLine_HORIZONTAL(Xpos - CurX, Ypos + CurY, 2*CurX, Circle_colour);
  20.       LCD_DrawLine_HORIZONTAL(Xpos - CurX, Ypos - CurY, 2*CurX, Circle_colour);
  21.       
  22.       LCD_DrawLine_HORIZONTAL(Xpos - CurY, Ypos + CurX, 2*CurY, Circle_colour);
  23.       LCD_DrawLine_HORIZONTAL(Xpos - CurY, Ypos - CurX, 2*CurY, Circle_colour);
  24.     }
  25.     else
  26.     {
  27.       DrawPixel(Xpos + CurX, Ypos + CurY, Circle_colour);
  28.       DrawPixel(Xpos + CurX, Ypos - CurY, Circle_colour);
  29.       DrawPixel(Xpos - CurX, Ypos + CurY, Circle_colour);
  30.       DrawPixel(Xpos - CurX, Ypos - CurY, Circle_colour);
  31.       DrawPixel(Xpos + CurY, Ypos + CurX, Circle_colour);
  32.       DrawPixel(Xpos + CurY, Ypos - CurX, Circle_colour);
  33.       DrawPixel(Xpos - CurY, Ypos + CurX, Circle_colour);
  34.       DrawPixel(Xpos - CurY, Ypos - CurX, Circle_colour);
  35.     }
  36.    
  37.     if (D < 0)
  38.     {
  39.       D += (CurX << 2) + 6;
  40.     }
  41.     else
  42.     {
  43.       D += ((CurX - CurY) << 2) + 10;
  44.       CurY--;
  45.     }
  46.     CurX++;
  47.   }
  48. }
复制代码
a312835782
6楼-- · 2020-01-25 02:36
 精彩回答 2  元偷偷看……

一周热门 更多>