4.1直线图形的生成技术 ●在数学上,两个坐标点可以确定出一条 直线,理想的直线是没有宽度的,由无 数个点构成的。在光栅图形显示器上显 示一条直线时,只能在显示器给定的有 限像素组成的矩阵中,确定最佳逼近于 该直线的一组像素点来表示,这就是直 线的扫描转换
4.1 直线图形的生成技术 ⚫ 在数学上,两个坐标点可以确定出一条 直线,理想的直线是没有宽度的,由无 数个点构成的。在光栅图形显示器上显 示一条直线时,只能在显示器给定的有 限像素组成的矩阵中,确定最佳逼近于 该直线的一组像素点来表示,这就是直 线的扫描转换
●在绘制斜线时,有些点不一定正好落在 像素点上,直线扫描转换算法必须确定 哪一个像素点来显示,从而形成“梯形 线”。当显示器分辨率很高时,仍可以 生成高质量的直线
⚫ 在绘制斜线时,有些点不一定正好落在 像素点上,直线扫描转换算法必须确定 哪一个像素点来显示,从而形成“梯形 线” 。当显示器分辩率很高时,仍可以 生成高质量的直线
●本节主要介绍三种创用的直线生成算法, 即数值微分法(DDA)、中点画线法和 Bresenham算法。这三种算法都是只考虑 个像素宽的直线,生成直线算法的函 数形式如下:Line(x0,yo,x1,yl, color);
⚫ 本节主要介绍三种创用的直线生成算法, 即数值微分法(DDA)、中点画线法和 Bresenham算法。这三种算法都是只考虑 一个像素宽的直线,生成直线算法的函 数形式如下:Line(x0,y0,x1,y1,color);
4.1.1数值微分法 1.原理 数值微分法(DDA, Digital Differential Analysis )是根据数学上直线的微分方程来设计的。设 A(xO.y0),B(x1y1)是直线的端点坐标,首先计算 出直线的斜率 k=dy/dx-△y△x=(yl-y0/(x1-xO) 直线方程为:y=kx+B或x-1/ky+T
4.1.1 数值微分法 1. 原理 数值微分法(DDA,Digital Differential Analysis )是根据数学上直线的微分方程来设计的。设 A(x0,y0),B(x1,y1)是直线的端点坐标,首先计算 出直线的斜率 k=dy/dx=△y/△x=(y1-y0)/(x1-x0) 直线方程为:y=kx+B 或 x=1/k.y+T
当k≤1时,让x每步增加1,y最多增加1, 然后用四舍五入的方法来确定直线上的 像素位置为(x, round(y)。设当前点为 (x1y;),则下一个像素x1=x1+1,则 y1+1=kx+1+B =k(x+1)+B=kx1+B)+k y1 +k 即当x每递增1时,y递增斜率k
当|k|≤1时,让x每步增加1,y最多增加1, 然后用四舍五入的方法来确定直线上的 像素位置为(x,round(y)) 。设当前点为 (xi ,yi ),则下一个像素xi+1 = xi +1,则 yi+1 =k xi+1 +B =k(xi+1)+B=(k xi +B)+k = yi +k 即当x每递增1时,y递增斜率k