前言
本人是计算机图形学的初学者,虽然说大学上了计算机图形学的课,但是只是半斤八两的程度,有的地方没懂也就算了,不会去思考,现在重新学一遍,有写的不好的地方,希望各路大神指教,本人一定改正。。
好了,让我们先来了解一些概念
1.图形的扫描转换
图形的扫描转换:确定一个像素集合,用于显示一个图形的过程
(ps:个人理解是图形变成一个个的像素点)
2.图形显示前需要做的工作:扫描转换 +裁剪
裁剪也就是将不在显示范围的部分删除
目前有两种方法:
①先裁剪,再扫描转换:最常用的方法,节约计算时间
②先扫描转换,再裁剪:这样比较耗时间,毕竟把不是范围内的也进行了扫描转换计算。。但是算法简单
3.直线的扫描转换:确定最佳逼近于该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作
常用的直线扫描转换有:
① 数值微分法(DDA)
② 中点画线算法
③ Bresenham算法
本篇着重讲 数值微分法(DDA)
众所周知,两点确定一条直线,我们假设这两点的坐标都为整数P0(x0,y0) P1(x1,y1)
那么过这两点的直线的表达式可以为: y =kx+b
斜率 k = (y1 - y0)/(x1 - x0)
令 x = x0; x → x1变化
x =x+stepx;
通过y = kx+b计算y的值;
∴ 逼近直线的点为(x,round(y)) round在这的作用是四舍五入
我们设当前已经确定的点的坐标为(Xi,Yi),下一个点的坐标为(Xi+1,Yi+1) ,i和i+1为下标
那么由 y = kx+b得 Yi+1 = kXi+1 +b;
我们当前的点(Xi,Yi)已经在直线上了,所以Yi = kXi+b,所以我们可以转化:
Yi&#