画线算法
1. 计算机画线
真实的直线应该是连续的,但是计算机不可能显示出完全连续平滑的直线,于是计算机用一系列 离散化的像素点 来表示直线
(《计算机图形学的概念与方法》柳朝阳)
2. 常用画线算法
2.1 DDA算法
DDA是一种基于直线的 微分方程 来生成直线的方法
基本的直线微分: dydx=k
跟据步长(也即像素数目)即可计算出 x,y 坐标:
步长取 Stepx:yi+1=yi+k
OR
步长取 Stepy:xi+1=xi+1k其中步长取 Stepx 还是 Stepy
考虑两端点之间水平距离 |Δx|=|x2−x1| 与竖直距离 |Δy|=|y2−y1|
绝对值大 的确定步长从起始位置 (x1,y1) 开始, 按照步长,沿线段路径计算每一步下一个像素的位置
调整每一步的 x 和
y ,逐一绘制余下像素。
DDA算法 比起根据 直线方程计算离散取样 的方法省去了乘法,加快了计算。
但是 取整操作 与 浮点运算 仍然十分费时。
2.2 Bresenham算法
该算法仅使用增量整数计算
Bresenham通过计算两像素与实际线段的偏移比值的整型参数的符号比较来确定所取像素
当斜率K大于1时,在Y方向上以单位步长移动,计算x值,
当斜率在0到1 之间时,在X方向上以单位步长移动。其中步长取 Stepx 还是