Bresenham 画线算法推导过程

今天复习这个算法的时候,有一点没有立马反应过来,故特此记此篇博客作为备忘。

描点原理

原理就是描实距离D点最近的那个点,距离的判断通过比较d1和d2的大小来确定。d1大,说明距离 ( x i + 1 , y i ) (x_i + 1, y_i) (xi+1,yi)更远,要描实 ( x i + 1 , y i + 1 ) (x_i + 1, y_i + 1) (xi+1,yi+1)。相反同理。
在这里插入图片描述
需要说明的是此图将横线和竖线的交点看作像素点。

不妨假设直线方程为 y = kx + b ,其斜率 k 在 0 到 1 之间,并且 x 2 > x 1 x_2>x_1 x2>x1
于是我们可以有上图这样一条直线。设在第 i 步已经确定第 i 个像素点是 ( x i , y i ) (x_i, y_i) (xi,yi),现在看第 i+1 步如何确定第 i+1 个像素点的位置:

我们不妨假设 D(x, y) 其中 x = x i + 1 x = x_i+1 x=xi+1
d 1 = y − y i = k ( x i + 1 ) + b − y i d_1 = y - y_i = k(x_i + 1) + b -y_i d1=yyi=k(xi+1)+byi
d 2 = y i + 1 − y = ( y i + 1 ) − k ( x i + 1 ) − b d_2 = y_i + 1 - y = (y_i + 1) - k(x_i + 1) - b d2=yi+1y=(yi+1)k(xi+1)b

  • d 1 > d 2 d_1 > d_2 d1>d2,下一个像素点取 ( x i + 1 , y i + 1 ) (x_i + 1, y_i + 1) (xi+1,yi+1)
  • d 1 &lt; d 2 d_1 &lt; d_2 d1<d2,下一个像素点取 ( x i + 1 , y i ) (x_i + 1, y_i)
  • 23
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值