模拟时钟的问题

本文探讨了时钟指针角度计算中的两个常见问题:时针无法准确反映分钟变化及偶尔出现的不规则摆动现象。通过分析数学公式与程序代码,揭示了问题根源在于分钟到小时转换时的计算误差及角度换算公式的理解不足。

上学期中旬的实训未解决的问题:1、时针不能表现分钟出的区别,2、有时会乱摆动。

数学公式没有错误,怎么调也是那个问题。

x = cos (2*PI/$);

y = sin (2*PI/$);

这个是单位圆上的指针的方向。然后乘上系数,就能构造出长度各异的时针分针和秒针。

SecOfR.x=(int)(Init.x/2.5)*cos(TWOPI/60*(DateTime.wSecond - 15));
	SecOfR.y=(int)(Init.y/2.5)*sin(TWOPI/60*(DateTime.wSecond - 15));
	

	MinOfR.x=(Init.x/3)*cos(TWOPI/60*(DateTime.wMinute - 15));
	MinOfR.y=(Init.y/3)*sin(TWOPI/60*(DateTime.wMinute -15 ));

	if (DateTime.wHour>=12)
	{
		DateTime.wHour-=12;
	}

	HourOfR.x=(int)(Init.x/4)*cos(TWOPI/12*(DateTime.wHour - 3 + (DateTime.wMinute)/60.00) );
	HourOfR.y=(int)(Init.y/4)*sin(TWOPI/12*(DateTime.wHour - 3 + (DateTime.wMinute)/60.00) );

 

变量名有点乱。。解释一下

secondofR是秒针。。同理理解分针和时针

1问题是因为(int)(Init.y/4)*sin(TWOPI/12*(DateTime.wHour - 3 + (DateTime.wMinute)/60) );单单一个60把(DateTime.wMinute)/60) )的运算结果搞成整数了,由于分钟数DateTime.wMinute不可能大于60,这就造成(DateTime.wMinute)/60) )的结果不是0就是1了,导致(DateTime.wHour - 3 + (DateTime.wMinute)/60) 换算出来的小时不是比较精确的小数而是浮动在DateTime.wHour+/-1的整数,导致指针突然摆动5格(30度)。

这是一个很容易犯的错误,与此相应的还有if(a==0.1)的问题。(补充)

2问题是因为把分钟换算成小时的时候加的位置搞错了,对时钟指针角度换算公式理解不到位。

转载于:https://www.cnblogs.com/ppazhang/archive/2013/02/16/2913104.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值