钟表一直以来都是国人钟爱的商品之一。或许女朋友就送了你一只怀表(/微笑)。我国古代就有日晷计时。随着信息社会的发展,数码管式钟表产生了。但是,非常多的人还是喜欢指针式钟表。
本文使用mPython软件仿真功能,使用一根指针探究掌控板OLED屏模拟指针式时钟转运原理。
一、动图效果展示
二、算法实现原理
指针在表盘里面的转动是通过不断地擦除就指针,绘制新指针表示出来的。关键点在于指针一端永远固定在圆心(64,32)位置,而另一端则在圆的路径上顺时针移动。所以,重点又转移到寻找圆的路径中x和y的关系。这里,我们根据x的范围求y的值。
下面我们先来学习下高中数学几何问题0.0.
(前方高中数学知识高能预警)
如下图所示,在128*64大小的直角坐标系中,圆的半径为30,圆点坐标是(64,32)。
注意:
1.上式求平方根后会产生一正一负两个根,而编程中sqr()函数只保留正根。因此,我们需要分类讨论。
2. 上式最终结果为浮点型数值(小数),而掌控板OLED屏显示坐标均要求是正整数。因此,需要对结果进行取整。
所以,圆的路径y坐标最终结果为
注意:
1.上式求平方根后会产生一正一负两个根,而编程中sqr()函数只保留正根。因此,我们需要分类讨论。
2. 上式最终结果为浮点型数值(小数),而掌控板OLED屏显示坐标均要求是正整数。因此,需要对结果进行取整。
三、代码模拟
已知圆的路径坐标x的范围是[34,94],而每个x都对应两个y。所以需要根据指针的运动情况进行分类讨论。
1. 指针顺时针转动,当指针在圆点的上方时,x从左往右增加,y的值先从32逐渐变小到2,再逐渐从2变大到32。y值的范围是[2,32]。mPython代码如下图所示:
2. 指针顺时针转动,当指针在圆点的下方时,x从右往左减少,y的值先从32逐渐变大到62,再逐渐从62变小到32。y值的范围是[32,62]。mPython代码如下图所示:
最后,再重复执行上述代码,即可完成指针式钟表的模拟。
当然了,以上程序存在2大问题,
1. 指针转动的速度快慢不一,如何解决呢?
2. 指针一端固定在圆心位置,另一端直接在圆的路径上,应该如何解决?
这两个问题,你发现了吗?
好了,小伙伴们,知道了指针转动的原理,你能在掌控板上写出时钟代码吗?
点赞