【绘图算法】Bresenham算法(草稿)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起点

在使用单片机做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);  
   }
}
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值