图形显示的几种方式 图形显示前需要:扫描转换+裁剪 裁剪→扫描转換:最常用,节约计算时间 ·扫描转换→裁剪:算法简单
图形显示的几种方式 图形显示前需要:扫描转换+裁剪 裁剪→扫描转换:最常用,节约计算时间 扫描转换→裁剪:算法简单
直线段扫描转换 假设 像素间均匀网格,整型坐标系,直线段斜率0<m<1 对m>1,x、y互换
直线段扫描转换 假设 ◼ 像素间均匀网格,整型坐标系,直线段斜率0<m<1 ◼ 对m>1,x、y互换
直线段的扫描转换算法 直线的描转换 确定最佳逼近于该直线的一组象素 按扫描线顺序,对这些象素进行写操作 三个常用算法 1数值微分法(DDA) 2中点画线法 3 Bresenham算法
直线段的扫描转换算法 直线的扫描转换 ◼ 确定最佳逼近于该直线的一组象素 ◼ 按扫描线顺序,对这些象素进行写操作 三个常用算法: 1数值微分法(DDA) 2中点画线法 3Bresenham算法
数值微分(DDA法(1/5) 已知线段端点:Pxy0),P1(x1y1 ⊙直线方程 y=k×+b {(x,y分)},=0,,n. ●浮点数取整:y= round()=ny+0.5) 用到浮点数的乘法、法和取整运算 (xi, round(,+m)) (x2,y2) (x;, round(,)) (+1,y2+m
数值微分(DDA)法(1/5) 已知线段端点:P0 (x0 ,y0 ), P1 (x1 ,y1 ) 直线方程 y=kx+b {(xi , yi )}, i=0,….n. 浮点数取整 : yi=round(yi )=(int)(yi+0.5) ◼ 用到浮点数的乘法、加法和取整运算
数值微分(DDA法(2/5) 增量算法 yi+1=kX +1+b=(Xxi +1)+b=yi+k a(X×,y)→(x+1,y+k) 点 有浮点数取整运算 不利于硬件实现 效率低 仅适用于k≤1的情形x每增加1,y最多增加1。当 k|>1时,必须把x,y互换
数值微分(DDA)法(2/5) 增量算法 ◼ yi+1=kxi+1+b=k(xi+1)+b=yi+k ◼ (xi ,yi )→(xi+1,yi+k) 缺点: ◼ 有浮点数取整运算 ◼ 不利于硬件实现 ◼ 效率低 ◼ 仅适用于k ≤1的情形:x每增加1,y最多增加1。当 k 1时,必须把x,y互换