OpenEdv-开源电子网

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

求解释u32 imax = ((u32)r*707)/1000+1;

[复制链接]

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-9-29
在线时间
10 小时
发表于 2015-5-8 14:27:05 | 显示全部楼层 |阅读模式
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
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-8-28
在线时间
7 小时
发表于 2015-5-8 14:27:06 | 显示全部楼层
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
回复

使用道具 举报

70

主题

6774

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13352
金钱
13352
注册时间
2012-11-26
在线时间
3838 小时
发表于 2015-5-8 15:55:40 | 显示全部楼层
你如果知道什么叫百度的话   我相信你不会问这个问题


论坛充斥着伸手党

最终也只是一群没入门的在问问题的乐园
学无止境
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-4-2
在线时间
1 小时
发表于 2015-5-9 09:01:28 | 显示全部楼层
强制转换,有的类型不是32位的,如果不加强制转换,会造成运算中数据的溢出,这些都是大学C语音应该掌握的知识,这个论坛,我们默认您是有一定的电子基础的,如果没有的话,麻烦您多补习下C语音知识,单片机知识,数字电路知识,祝您好运
我为机狂
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-9-29
在线时间
10 小时
 楼主| 发表于 2015-5-9 10:35:10 | 显示全部楼层
回复【3楼】danpianji:
---------------------------------
谢谢你的回答,我问的是这两个是什么公式
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2019-4-13
在线时间
17 小时
发表于 2019-6-27 14:20:33 | 显示全部楼层
aleelau 发表于 2015-5-9 10:35
回复【3楼】danpianji:
---------------------------------
谢谢你的回答,我问的是这两个是什么公式

我也想知道。。。。。。。画实心圆这是什么快速实现方法
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2019-5-13
在线时间
36 小时
发表于 2019-12-24 15:53:56 | 显示全部楼层
我也没看懂,然而这和c语言并没有什么关系
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10662
金钱
10662
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-12-24 20:33:55 | 显示全部楼层
sqrt(2)/2=0.707 剩下的看理论吧
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-8-28
在线时间
7 小时
发表于 2025-12-22 08:55:04 | 显示全部楼层
我也想问一下同一个问题,我把问题精准一下:1,imax 为什么是二分之根号二? 不是三分之,四分之根号二?    2,sqmax 为什么是加 r/2,,而不是加 r/3 或  r/4 ?
回复

使用道具 举报

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

本版积分规则


关闭

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

正点原子公众号

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

GMT+8, 2026-1-9 18:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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