OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4401|回复: 4

画圆求解求高手帮助

[复制链接]

33

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2015-2-23
在线时间
25 小时
发表于 2016-3-28 23:57:48 | 显示全部楼层 |阅读模式
20金钱
STM32程序里带的画圆都是一半正画一半反画过来的
LCD_DrawPoint(x0+b,y0+a);             //4               
LCD_DrawPoint(x0+a,y0+b);             //6

这样子的:
QQ截图20160328235049.png


那如何把4改过来也按照6的方向画呢???
代码怎么改呢???

QQ截图20160328235033.png

//在指定位置画一个指定大小的圆
//(x,y):中心点
//r    :半径

void LCD_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);             //4               
                LCD_DrawPoint(x0+a,y0+b);             //6
               
                
                a++;
              //使用Bresenham算法画圆               
                if(di<0)di +=4*a+6;          
                else
                {
                        di+=10+4*(a-b);   
                        b--;
                }                                                     
        }
}                                                                           






求高手帮助~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

最佳答案

查看完整内容[请看2#楼]

/******************************************************************************************** 函 数 名: 在指定位置画一个指定大小的圆 调 用: Draw_Circle(u16 x0,u16 y0,u8 r) 参 数: (x,y):中心点, r :半径 反 回 值: 无 ********************************************************************************************/ void Draw_Circle(u16 xs,u16 ys,u16 r, u16 color) { s32 x ...
新手学STM
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3308
金钱
3308
注册时间
2013-4-10
在线时间
328 小时
发表于 2016-3-28 23:57:49 | 显示全部楼层
/********************************************************************************************
函 数 名: 在指定位置画一个指定大小的圆
调    用: Draw_Circle(u16 x0,u16 y0,u8 r)
参    数: (x,y):中心点,
          r :半径
反 回 值: 无
********************************************************************************************/
void Draw_Circle(u16 xs,u16 ys,u16 r, u16 color)
     {
     s32 x,y,d,d1,d2;
     char dir,tem;     
     for(tem =0;tem <4;tem ++)//四个向限画圆
        {
        x = 0;  //增量值
        y = r;        //减量值
        d = 2*(1-r);  //判断项
        while(y >= 0)
             {
             switch(tem)
                   {
                   case 0CD_DrawPoint(xs+y,ys-x,color);break;
                   case 1CD_DrawPoint(xs-x,ys-y,color);break;
                   case 2CD_DrawPoint(xs-y,ys+x,color);break;
                   case 3CD_DrawPoint(xs+x,ys+y,color);break;
                   }
             if(d<0){d1=2*(d+y)-1;if(d1<=0) dir=1;else dir=2;}
             else{
                 if(d>0){d2=2*(d-x)-1;if(d2<=0)dir=2;else dir=3;}
                 else dir=2;
                 }
             if(dir == 1){x++;d+=2*x+1;};
             if(dir == 2){x++;y--;d+=2*(x-y+1);};
             if(dir == 3){y--;d+=(-2*y+1);};
             }
        }
     }
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-3-29 08:23:52 | 显示全部楼层

没仔细想,感觉道理都一样。。。



回复

使用道具 举报

33

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2015-2-23
在线时间
25 小时
 楼主| 发表于 2016-3-29 12:24:42 | 显示全部楼层
xuande 发表于 2016-3-29 08:23
没仔细想,感觉道理都一样。。。

LCD_DrawPoint(x0+b,y0+a);             //4
得把这个反过来画但不知道怎么弄
新手学STM
回复

使用道具 举报

33

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2015-2-23
在线时间
25 小时
 楼主| 发表于 2016-3-29 13:02:49 | 显示全部楼层
likunxue 发表于 2016-3-29 12:55
/********************************************************************************************
函 数 ...

谢谢我研究研究
新手学STM
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 13:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表