起点
在使用单片机做LCD屏显示的时候遇到画直线(实际上是线段)的问题。
具体的问题就是如何将直线的公式(或者是已知两点)转变为点阵结构,找到相应的点。
搜索了下,大多利用Bresenham较简单的绘制直线,以下就是如何理解该算法。
算法一
最简单的算法,莫过于直接采用直线的公式,y=kx+b,利用x每次自增1,来计算y的值,利用取整来获得像素点。
例如:y = 0.8 *x + 1;
x=0,y=1
x=1,y=1.8 =2
x=2,y=2.6 = 3
x=3,y=3.4=3
x=4,y=4.2=4
x=5,y=5.0=5
x=6,y=5.8=6
x=7,y=6.6=7
x=8,y=7.4=7
x=9,y=8.2=8
x=10,y=9
……
如下图:
(放大看)
计算机实际算法(两点直线)如下:
DrawLine(int x1,int y1,int x2,int y2)
{
int i,y;
double k = (y2-y1)/(x2-x1);
double b = y1 - k*x1;
for(i=x1;i<=x2;i++)
{
y = (int)(k*i + b);
DrawPoint(i,y);
}
} <

本文介绍了在单片机LCD屏显示中如何用Bresenham算法绘制直线。通过对比直接使用直线公式的不足,阐述了Bresenham算法的优势,并提供了算法改进的方法,确保直线在像素点上的连续性。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



