第四章基本图形生成算法 40概述:-图形生成的基本原理,主要内容 用某种颜色编码的图形生成的基本原理: 在光栅显示器上的图形是一组象素的集 合,其中每个象素都具有某种颜色的编码 这些象素(及其颜色)是通过对图形的扫描 得到的 图形的扫描过程称为扫描转换或光栅化 主要内容:基本图形的扫描转换如线,圆, 椭圆的扫描转换,及封闭的多边形的填充问 题,字符处理,图形裁剪、反走样技术等
第四章 基本图形生成算法 • 用某种颜色编码的图形生成的基本原理: 在光栅显示器上的图形是一组象素的集 合,其中每个象素都具有某种颜色的编码, 这些象素(及其颜色)是通过对图形的扫描 得到的。 • 图形的扫描过程称为扫描转换或光栅化 •主要内容:基本图形的扫描转换如线,圆, 椭圆的扫描转换,及封闭的多边形的填充问 题,字符处理,图形裁剪、反走样技术等。 4.0 概述:--图形生成的基本原理,主要内容
Mathemtaical Equation and Rasterized pixels 数学方程 y=f(x) (x2y2)(x,y3(x,y4)…(xn,y) 光栅化的象素点
Mathemtaical Equation and Rasterized pixels 1 1 2 2 3 3 4 4 ( ) ( , ),( , ),( , ),( , ),...( , ) n n y f x x y x y x y x y x y = 数学方程 光栅化的象素点
第四章基本图形生成算法 40概述:-图形扫描转换的两个步骤 Step1:确定图形的象素 Step2:确定图形的颜色等属性,并对象 素做写操作 任务一:因Step2调用图形设备驱动程序 完成,故仅考虑 Stepl的任务,即确定 最能反映图形特征的象素集合。--如 何扫描图形?? 例如:1D图形的扫描得到(线宽)象素序列,2D 图形的扫描得到一个封闭的区域-边界和内部填充 图形或颜色
第四章 基本图形生成算法 • Step1:确定图形的象素 • Step2:确定图形的颜色等属性,并对象 素做写操作 4.0 概述:--图形扫描转换的两个步骤 任务一:因Step2调用图形设备驱动程序 完成,故仅考虑Step1的任务,即确定 最能反映图形特征的象素集合。--如 何扫描图形?? 例如:1D图形的扫描得到(线宽)象素序列,2D 图形的扫描得到一个封闭的区域--边界和内部填充 图形或颜色
第四章基本图形生成算法 40概述: 任务二:由于图形要在一个窗口中显示,所以还 要确定图形的范围-图形的窗口裁剪技术 准:窗口 裁剪应在 图形扫描 前进行 裁剪窗口 象素点
第四章 基本图形生成算法 4.0 概述: 任务二:由于图形要在一个窗口中显示,所以还 要确定图形的范围--图形的窗口裁剪技术 注:窗口 裁剪应在 图形扫描 前进行。 裁剪窗口 象素点
第四章基本图形生成算法 40概述: 任务三:象素序列的锯齿形引起走样,所以要用 反走样技术克服图形走样。 说明:提高显示器的分辨率可以部分克服反走样 但成本太高 反走样算法基本原理:尽量减少相邻象素点的亮 度或或颜色的差别 例如: 图元二维 扫描 裁剪 换
第四章 基本图形生成算法 4.0 概述: 任务三:象素序列的锯齿形引起走样,所以要用 反走样技术克服图形走样。 说明:提高显示器的分辨率可以部分克服反走样 但成本太高。 反走样算法基本原理:尽量减少相邻象素点的亮 度或或颜色的差别。 例如:
第四章基本图形生成算法 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)