在MicroBlocks里面无休止地琢磨余弦和正切函数,是因为我要把micro:bit里面各个方向的重力加速度取出来。
MicroBlocks不像Scratch那样提供了重力加速度的x、y、z三个分量,当然磁传感器也没有提供分量值的获取办法。然而,micro:bit那么强大,不能搞分量形式的g和B实在是太不方便了。实际用作物理实验的话,还真就是分量才有用处。
计算分量,最容易想到的是在MicroBlocks里计算三角函数和开平方,而MicroBlocks没有开平方计算,也只有正弦sine函数。尽管使用位运算也能实现,试过之后发现误差太大了。因此最近这些天脑子空闲时就集中想着开平方怎么用加减乘除计算出来。
需要说明的是①为什么不自己编译一下vm把求平方根给它export出来?我觉得还是跟着官方的脚步走要好一些,越奇怪越没有普遍通用性;最最根本的要害,是我不会编译给micro:bit使用的vm。②为什么非要找这个求平方根运算呢?这是方向余弦的事了。因为一旦正弦、余弦都拥有了,就意味着各种运算更易得到,甚至我们可以用各种展式比如傅立叶啥啥啥的来表达绝大多数函数的运算了。
MicroBlocks里求平方根也并不是用新招法,就是牛顿迭代法,学任何一门新语言的时候,它几乎都是讲算法时的小例子。
开平方:
现在开始求余弦运算:
再来求正切运算:
都是角度扩大至100倍作为参数输入,返回值则扩大至1000倍以尽量保证计算精度。现在来看精确度:
显然是相当可以接受的!“优秀”就一个字,我只说一次:秀!
联系客服