前言
在数学上,理想的直线是没有宽度的,它是由无数个点构成的集合。对直线进行光栅化时,只能在显示器说给定的有限个像素组成的矩阵中,确定最佳逼近于该直线的一组像素,并且按扫描线顺序。
本节介绍绘制线宽为一个像素的直线的三个常用算法:数值微分,中点画线和Bresenham算法。
数值微分法
已知过端点 P0(x0, y0),P1(x1, y1) 的直线段 L(P0, P1);直线斜率为 k = (y1 - y0) / (x1 - x0)。
于是 yi+1 = kxi+1 + b。
于是,x每增加1,y就增加k。画点的时候还需要判断 int(y+0.5) 向下取整。
1 // 数值微分法,伪代码 2 void DDAline(int x0, int y0, int x1, int y1) { 3 int dx, dy, x=x0, y=y0; 4 double k; 5 dx = x0 - x1;&


