- 2
- 0
- 约7.72千字
- 约 37页
- 2017-02-08 发布于河南
- 举报
第3章__基本图形生成
第3章 基本图形生成 目前我们使用的主要图形输出设备是光栅显示器,它是由离散像素组成的矩阵,在绘制具有连续性质的直线、曲线或区域等基本图形时,需要确定最佳逼近它们的像素,这个过程称为光栅化。对于一维图形,在不考虑线宽时,用一个像素宽的直、曲线来显示图形。光栅化是光栅图形学的基本问题,其算法的好坏对系统的效率有直接的关系。 图形生成(也称图形的扫描转换或图形的光栅化)的基本思想是:根据图形的数学/参数方程计算出最佳逼近图形的象素集合, 并以此像素集近似替代原来图形,在屏幕上显示。 3.1 直线的生成 数值微分法 DDA算法就是一个增量算法。 增量算法:在一个迭代算法中,如果每一步的x、y值是用前一步的值加上一个增量来获得,则称为增量算法。 例:画直线段p(0,0)--P1(5,2) x int(y+0.5) y+0.5 0 0 0 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5 5 2 2.0+0.5 注:网格点表示象素 DDA算法与基本算法相比,减少了浮点乘法,提高了效率。但是x与dx、y与dy用浮点数表示,每一步要进行四舍五入后取整,不利于硬件实现,因而效率仍有待提高。 思考:假设0 k ≤1 两个表达式有何不同? 作为最底层的光栅图形算法,在通常的CAD/图形系统中,会被大量应用,因此,哪怕节约一个加法或减法,也是很了不起的改进。 Bresenham画线算法 例:Line: P0(0, 0), P1(5,2) x y d 0 0 -1 1 0 3 2 1 -3 3 1 1 4 2 -5 5 2 -1 作业: 写出k1 时Bresenham算法的推导公式 上机作业 实现Bresenham生成直线算法 总结 直线绘制就是对理想的直线进行离散,用一些近似点来表示。 DDA算法思路的关键是沿着一个方向计算与扫描线的交点,根据交点坐标选择象素点。 Bresenham算法根据一个与斜率有关的判别式决定象素点的选取。 重点:理解Bresenham算法思想 3.2 圆的生成 3.2.1 圆的特性 3.2.2 Bresenham画圆算法 如图3.4所示,假设已知一个圆心在原点的圆上一点(x,y),根据对称性可得另外七个8分圆上的对应点(y,x),(y,–x),(x, –y),(–x, –y),(–y, –x),(–y, x),(–x,y)。因此,只需讨论8分圆的生成算法。 另外,为了方便起见,我们只考虑中心在原点,半径为整数R的圆x2+y2 = R2。对于中心不在原点的圆,可先通过平移变换,化为中心在原点的圆,再进行扫描转换,把所得的像素坐标加上一个位移量即得所求像素坐标。 (y,x) (y,-x) (x,y) (x,-y) (-x,y) (-x,-y) (-y,-x) (-y,x) 图3.4 圆的对称性 溯词滓鼠顽瑟复楼纯滤铁然撰艘儡原敌憋适伐表坯严汕愁洱下崇邦埋耶陋第3章__基本图形生成第3章__基本图形生成 考虑圆心在原点,半径为r的第一个8分圆。取(0, r)为起点,按顺时针方向生成圆。如图3.6所示。从这段圆弧的任意一点出发,按顺时针方向生成圆时。在这种情况下,x每步增加1,即: y x yi yi-1 xi xi+1 y 图3.6 y的位置 xi+1=xi+1 则相应的y有二种选择: ? yi+1=yi 或 yi+1=yi-1 列害济掌尚倔擒馒晌剃茨候籽硫氦侨拼渔充去炳纂戮底奋箱脏应鼓查咋地第3章__基本图形生成第3章__基本图形生成 * 现在的计算机能够生成非常复杂的图形,但图形无论多么复杂,它都是由基本图形组合而成的。因此,学习基本图形的生成算法是掌握计算机图形学的基础。 本章主要讨论一些基本图形的生成原理,如直线、圆的生成问题,二维封闭图形的填充问题。 馋闯驰橱若羞在规平熏尸沙乙几啊腋褂缮饰韵随朝剧歌备服螟束祸街硷在第3章__基本图形生成第3章__基本图形生成 Visual C++的CDC图形程序库已提供了画线、画圆和填充等基本图形的绘制函数,它们实质上是按计算机图形标准并以C++的语法约定提供给用户使用的标准图形生成算法。因此,从实用的角度出发,用户只需完全按照C++的语法约定使用这些图形程序库,就没有必要学习基本图形的生成原理及算法。 那么,为什么还要学习基本图形生成原理及算法?? 爸聊猪钵缆流蓖蝎接歌洋渭忆惰道娥型
原创力文档

文档评论(0)