第四章基本图形生成算法 4.1直线生成算法 直线段扫描转换:在扫描过程中,求与直线段最接近的像素点集。 (误差是多少???) 个象素宽度的直线扫描的三个算法(假设:直线段宽度为 1个象素点,斜率-1<=k<=1) °数值微分法(DDA) 中点画线法 Bresenham算法 掌握: 算法思想 算法伪代码 ·上机编程运行的源代码(CorC++/ Visual o++)
第四章 基本图形生成算法 4.1 直线生成算法 直线段扫描转换:在扫描过程中,求与直线段最接近的像素点集 。 (误差是多少???) 一个象素宽度的直线扫描的三个算法(假设:直线段宽度为 1个象素点,斜率-1<=k<=1) • 数值微分法(DDA) • 中点画线法 • Bresenham算法。 掌握: •算法思想 •算法伪代码 •上机编程运行的源代码(C or C++/Visual C++ )
基本思路: 久2; A+=;+ 9+1=
基本思路:
问题模型 直线的斜率方程 y=kx+b (x0,y0)→>…→>(Xn,n 起点 终点
问题模型 0 0 . ( , ) ... ( , ) n n y k x b X Y X Y = + → → 直线的斜率方程 起点 终点
问题求解步骤 起(X0,X 时点(X,X
问题求解步骤 • 从起点 • 到终点() 0 0 ( , ) X X ( , ) X X n n
数值微分(DDA法 已知过端点P(x P1(x,J1的直线段 L(PoP),;直线斜率为,画线过程从x 的左端点x开始,向x右端点步进,步长=1(个 象素),计算相应的y坐标y=kx+B;取象素点(x, round(y))作为当前点的坐标。计算 i+1 i+1 B=kx, +B+kDx =y, +kDX 当Dx=1 y;+k,即:当x每递增1,y递增 k(直线斜率) round(y;)=int(y; +o x
数值微分(DDA)法 • 已知过端点P0 (x0 , y0 ), P1 (x1 , y1 )的直线段 L(P0 , P1 ),;直线斜率为 ,画线过程从x • 的左端点x0开始,向x右端点步进,步长=1(个 象素),计算相应的y坐标y=kx+B;取象素点(x, round(y))作为当前点的坐标。计算 • yi+1 = kxi+1+B = kxi +B+kDx = yi +kDx • 当Dx=1 yi+1 = yi +k, 即:当x每递增1,y递增 k(直线斜率). • round(yi )=int(yi +0.5)