Bresenham画线算法的简单解释

本文以简单明了的方式解释Bresenham画线算法,通过分析两端点坐标和直线方程,探讨如何确定绘制点的坐标,并讨论了算法在不同边界条件下的处理方式。着重介绍了小数部分的处理和累加变量N的控制范围,以及在实际应用中可能遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

网上其他资料感觉是简单问题复杂化,用实数的有理数(整数之比)表达方式分析更直接些。

为简化分析假设两端点为(x0,y0),(xn,yn),且满足

0<=x0<xn, 0 <= y0<yn, xn-x0 >= yn-y0.

令dy=yn-y0,dx=xn-x0.

则通过两端点的直线方程为

y=dy/dx * (x-x0)+y0

第k个点(x_k=x0+k,y_k)满足

y_k = dy/dx*k+y0,

y_k+1 = y_k+dy/dx.

对正实数r记r = [r]+(r),当中[r]为整数,(r)为小数部分且-1/2 <= (r) <= 1/2, 相当于[r]为r的四舍五入结果。这里两边也可能是严格的小于号,但不影响分析。()与[]为运算符而不是通常意义下的括号。则所要绘制的点的坐标为(x_k,[y_k])。

y_k = [y_k] + (y_k)

y_k+1 = [y_k]+(y_k)+dy/dx

注意到这里x0,xn,y0,yn,dy,dx都是非负整数,当中dx>0.由于y_0=y0为整数,其小数部分(y_0)=0,(y_k)每次累加一个dy/dx或减去一个整数,因此(y_k)可以表示为

(y_k)=M/dx=2*M/(2*dx)=N/(2*dx)

这里N=2*M,M,N为整数。代入上式有

y_k+1 = [y_k] + (N+2*dy)/(2*dx)

因此只要N+2*dy>dx就说明[y_k]后面的一项大于0.5,[y_k+1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值