屏幕图形显示原理及曲线拟合算法

在这里插入图片描述

提示:本文讲解在LCD、LED上各种图形显示的算法原理

一、画点、画线

1:画点的实现是整个画图最基础的功能,其原理是对屏幕上最小的单位(像素点)进行赋值,驱动屏幕上不同像素点的状态。
2:画线的实现根据直线方程y=a*x+b,这里将方程简化成y=a*x,将直线与y轴的交点设为原点。这里直线划分为两个类型:斜率绝对值等于1为界限,若不分类则会出错。举个栗子:
1)当斜率等于0.5时,如y=0.2x,当x取值1-->20,y的值为0.2 0.4 0.6 0.8.....3.6 3.8 4但y的值只能为整数,这里采用四舍五入的方式,可以看到,斜率在小于1的情况下x轴和y轴都是正常连续的。
2)但斜率大于1时,如y=10x,当x取值1-->20,y的值为10 20 30.......180 190 200,明显此时x轴连续,但y轴却是间隔了10个点,屏幕上显示的也是一个个分开的点。
3)所以当直线斜率绝对值大于1时,我们可以假象将坐标轴旋转九十度,以y轴坐标为起始,函数化为x=y*1/a,即x=0.1y,此时y从1开始递增,x的值也是连续的。当以x的值递增时,先画出第一象限的直线,当以y的值递增时,先画出第二象限的直线,另一部分通过镜像原理画出。

思路总结:首先确定坐标原点,其次根据斜率确定递增轴,最后通过镜像画出整条直线

二、画圆

画圆的实现依据的是坐标原点和圆的半径r,将圆的半径作为直角三角形的斜边,x和y轴坐标作为直角边。以x轴为递增轴,由1-->x=y,由勾股定理得出y轴数据,同样采用四舍五入的方式,画出1/8圆弧。这里的的圆弧处在第一象限,要将第一象限补全,方法是将得到的坐标倒置,如:(2,5)-->(5,2)这样就得到了1/4圆弧,最后通过镜像原理得到整个圆。注意注意注意!!!以上方法由于圆弧斜率的变化导致像素点分布不均,随着斜率绝对值增大,随着x轴递增,y轴的间隔会不断增大,所以要先画出1/8圆再镜像处理
另外,也可以使用参数方程求解,如下:角度值取0-45°得1/8圆再镜像处理,这样保证像素点均匀分布,当圆心在原点,Xc,Yc等于0。
在这里插入图片描述

三、画椭圆

画椭圆和画圆类似,使用参数方程求解,公式如下。当圆心在原点,Xc,Yc等于0,椭圆需要求取1/4的坐标,即角度值取0-90°,然后通过镜像原理得出整个椭圆坐标。
在这里插入图片描述

四、填充方法

上述方法画出的图形都只是一条线组成,我们可以通过填充让图形更加饱满。方法很简单,当我们计算出圆或椭圆外围上的一个坐标点之后,我们固定y坐标,x坐标递减到0,依次填充,以此类推直到填充完1/8(1/4),然后通过镜像原理填充其他位置。
圆环,椭圆环的填充,设外环和内环半径分别为R、r,横坐标x由0-R变化,当x<r时,只填充y(r)<y<y(R)部分,当r<x<R时,进行全部填充。

五、贝塞尔拟合算法

效果展示如链接:贝塞尔拟合算法
在这里插入图片描述
如上图所示,对于平面上的两个点 P0 和 P1,假设另一点 B 匀速地从 P0 点运动到 P1 点,则有 B 点在 t 时刻的坐标公式:
在这里插入图片描述
将 B 点在各个时刻的坐标依次连接起来所形成的线,就是所谓的贝塞尔曲线。此公式表示的是一次贝塞尔曲线,也称为线性贝塞尔曲线。

二次贝塞尔曲线
在这里插入图片描述
同样地,对于平面上的三个点 P0、P1 和 P2 ,假设 P0 P1 之间有个点 B1 匀速地从 P0 运动到 P1 ,P1 P2 之间有个点 B2 匀速地从 P1 运动到 P2,则有:
在这里插入图片描述
在这里插入图片描述
假设另一点 B 匀速地从 B1 运动到 B2,则有 B 点的坐标公式:
在这里插入图片描述
将 B1 和 B2 的坐标公式代入上面的表达式,整理后得到 B 点的坐标公式:
在这里插入图片描述
B 点在各个时刻的坐标所连成的曲线即为二次贝塞尔曲线,其中 P0 和 P2 称为数据点,P1 称为控制点 ,n个控制点对应n+1次方程。

三次贝塞尔曲线
在这里插入图片描述
在这里插入图片描述一般参数公式

n阶贝塞尔曲线可如下推断。给定点P0、P1、…、Pn,其贝塞尔曲线即:
B(t)=∑i=0nCin(1−t)n−itiPi,t∈[0,1]
在这里插入图片描述
其中B和P都是向量,需要分别计算每个点的x和y的分量坐标。

示例:

在这里插入图片描述

六、多项式拟合算法

设由实验测得函数y=f(x)在n个点x1 ,x2,…,xn的值为y1,y2,…,yn,要求这个函数的一个近似表达式。我们用一个次数低于n-1(m<n-1)的多项式φm(x)来拟合它,设
在这里插入图片描述在这里插入图片描述
写成矩阵形式:
多项式
已知函数表如下,试用二次多项式曲线来拟合这组数据。

在这里插入图片描述
在这里插入图片描述
计算列表如下:
在这里插入图片描述
由上表得矩阵方程如下:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要通过显示屏在Arduino上显示数据曲线图,可以按照以下步骤进行操作: 1. 准备材料:一块适合Arduino的显示屏,如OLED显示屏或液晶屏,以及必要的连线和Arduino开发板。 2. 连接显示屏:将显示屏与Arduino开发板进行连线,确保正确连接电源和数据线。 3. 初始化显示屏:在Arduino代码中使用相应的库函数,初始化显示屏并设置相关参数,如屏幕大小、字体类型等。 4. 绘制坐标轴:使用画线函数,在显示屏上绘制坐标轴,确定数据曲线的绘制区域。 5. 获取数据:通过传感器、外部设备或其他方式,获取要显示的数据。 6. 数据处理:对获取到的数据进行必要的处理,如单位转换、滤波或归一化等。 7. 绘制数据曲线:使用画线函数,根据处理后的数据,在绘制区域内绘制数据曲线。 8. 刷新显示:通过调用刷新函数,在每次新的数据更新后,更新显示屏上的数据曲线图。 9. 循环操作:将上述操作放入一个循环中,以便连续获取、处理和更新数据曲线。 10. 测试和调试:上传代码到Arduino开发板,并通过监视串口输出或直接观察显示屏上的曲线图,进行测试和调试。 通过以上步骤,就可以实现在Arduino上通过显示显示数据曲线图的功能。具体实现过程可能因使用的显示屏型号、库函数和数据处理需求而有所差异,可以根据具体情况适当调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值