情人节快要到了,BL808的收尾时间也差不多到了,不如用一个玫瑰花做收尾吧。创意来源于百度文库中的一篇文章:《JS代码实现玫瑰花》,不知道引用站外的链接是否违规,这里就不贴出链接了。总之,是使用了非常简单的几句代码就实现了一个玫瑰花的效果。首先把它移植到python中,看起来还不错。
Python的效果如下(应该是还没画完):
在之前几篇介绍中,尝试在BL808的系统中做了画图工作,这一篇本质上没有新提升,只是修改了画在BL808屏幕上的图案样式。
首先做好准备工作:
1)比起展开式,嵌入式中的三角函数还是查表比较方便。因此做好一个0~pi/2的正弦函数数组,考虑到精度,采用的是200等分角(这个似乎是单片机里面的惯例)。
再通过函数特性查表求值。
sin是奇函数,所以可以直接用表示正负号,正号为1.0,负号为-1.0,cos的话,直接移动pi/2就可以了。这里还是浪费了一点资源,应该直接先写cos的,因为偶函数可以不用考虑正负号,直接取绝对值就行。
代码中所乘系数126.6873是使用199/(pi/2)算出来的。
2)把RGB888转换成RGB565。
RGB565的特点是16位长,分别用5、6、5来表示RGB的颜色,而通常RGB是各8位的,因此红色和蓝色的后3位,绿色的后2位都应直接舍弃(这里是舍去了,其实应该考虑根据1或者0决定是否进位),如同大多数理科男,我也是分不清后几位颜色的。
我们知道16位数字,写的时候是低位在前,高位在后,因此需要用算式转换如下:
在屏幕上开始画点
大概2~3小时后的效果如下:
手机拍照的原因,实际显示还是红色的花,颜色和电脑中显示的差不多。
附上相关代码,预祝大家情人节,人成双。
python的:
c(基于BL808)的:
2~3小时???为什么这么久?
引用: wangerxian 发表于 2023-2-8 13:06 2~3小时???为什么这么久?
从动画可以看到每秒实际上只能在画面增加10~20个点,再加上在后期很多点反复落到同一位置,要填充满玫瑰花的画面估计要几十万次吧。