Arduino-旋转的四棱锥-数学应用(一)
本期分享一个小项目:TFT屏幕显示一个旋转的四棱锥。之前在b站看到有网友用OLED屏幕显示一个旋转的正方体,效果十分炫酷,瞬间激起了我的兴趣,于是我马上跟风也做了一个,不过我增加了旋转可控及缩放功能,能够快速把这个小项目做出来,也得益于之前做陀螺仪姿态解算积累的一些经验,本期就先分享一下这个项目的整体思路及用到的数学知识点,以后再详细介绍这些知识点的推导过程。
-
硬件准备及功能介绍
ArduinoMEGA2560板一块;TFT屏幕一块(兼容Arduino引脚);从玩具遥控器上拆的两个摇杆模块,制作了一个4通道手柄。
两个摇杆模块输出4个模拟信号,分别用于:控制四棱锥的缩放以及绕屏幕坐标系的X、Y、Z三轴旋转,注意坐标系:屏幕坐标系,而不是绕四棱锥的X、Y、Z三轴旋转。
-
设计思路
1、以屏幕的中心为原点建立一个坐标系-屏幕坐标系,四棱锥的中心为原点建立另一个坐标系-四棱锥坐标系,两坐标系的原点重合。
2、通过AD转换采集4个摇杆电位器的模拟量,其中一个映射为缩放系数,其余三个值映射为绕屏幕坐标系X、Y、Z三轴旋转的角速度值(转换为弧度制),用于计算旋转向量-包括旋转轴在屏幕坐标系下的坐标及旋转角度值。
3、建立一个从屏幕坐标系到四棱锥坐标系的旋转矩阵(DCM-方向余弦矩阵),然后将屏幕坐标系下的旋转向量(轴&角)通过旋转矩阵投影到四棱锥坐标系,分解出绕四棱锥坐标系X、Y、Z轴的角速度,更新旋转矩阵,然后对旋转矩阵进行正交化处理。
4、将四棱锥的5个顶点坐标(在四棱锥坐标系下),通过旋转矩阵投影到屏幕坐标系,再乘以缩放系数,得到5个顶点在屏幕坐标系下的坐标值。略去5个顶点坐标Z轴的值取它们的二维坐标值(X,Y),驱动TFT屏幕按照设定的色彩值以“点-点”的方式“画线”,画出四棱锥的8条边线,同时按同样的方法以屏幕背景颜色按“上一次”计算出的坐标值画线,以实现“清屏”的效果。
-
知识准备
1、向量运算:加减、内积(点积)、外积(叉积)的计算及几何物理意义。
2、角速度矢量的合成及其物理意义。
3、旋转矩阵的推导及旋转矩阵的更新、正交化处理,旋转矩阵的投影计算。
在后面的几期文章中会将对这些计算推导过程作详细的介绍,以及整个项目源代码的详细介绍。如有错误的地方,请给予批评指正。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com