第3章%202d图元光栅化算法演示文稿.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章2d图元光栅化算法演示文稿

第三章 二维图形的基本光栅图形学算法 直线的扫描转换 圆的扫描转换 多边形填充 线段裁剪 多边形裁剪 反走样 3.1 直线的扫描转换 定义 在二维栅格上计算位于该直线上的象素坐标 (光栅化),直线由起始坐标确定 要求 1) 观感好,象素分布均匀 2) 误差小,象素尽可能接近数学理想坐标 3) 速度快--避免乘除法和浮点数运算 算法原理 在第一个八分象限讨论 直线斜率 1, 将 x 坐标每次递增1个单位, 计算对应的 y 值,点亮相应象素. 算法原理 过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定每列象素中与此交点最近的象素。 3.1.1 基本增量算法(DDA算法) 最简单、最容易想到的策略 计算直线斜率 从直线最左端点开始,x 每次递增1个单位,对 计算 显示坐标为 的象素。 通过增量计算去除其中的乘法 由于 又 所以 即x y值可以根据前一点的值推算出来,不用算截距。 3.1.1 基本增量算法(DDA算法) 算法描述: void DDA (int x0, int y0, int x1, int y1, int Color, CDC *pDC) { double k = (y1 – y0)/(x1- x0); double y = y0; for(x = x0; x = x1; x++) { pDC-SetPixel(x, (int)(y + 0.5), Color); y += k; } } 3.1.2 Bresenham直线生成算法 Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换算法,与该方法类似的有中点法。 3.1.2 Bresenham直线生成算法 由于x步长为1递增,光栅直线方程为 yr+1 = yr+ k, yi = Round(yr)为整数栅格坐标。 xi 列象素(xi,yi )确定后,xi+1列象素必然从C、D 之中产生。 3.1.2 Bresenham直线生成算法 CD中点记为M,若理想点I(xi+1,yr+1 )在M上面,取D(xi+1, yi+1), 否则取C(xi+1, yi)。 为了确定I在M的上面还是下面,引入误差项: e(xi+1)= yr+1 – (yi +0.5) 若e(xi+1)= 0,I在M上面, yi+1 = yi + 1; 若e(xi+1) 0 ,I在M的下面,yi+1 = yi 。 3.1.2 Bresenham直线生成算法 至此,yi+1 可通过误差项符号由yi推出,但 e 计算复杂. 对误差项进行增量运算:e(xi+1) = yr+1 –(yi + 0.5) e(xi+2) = yr+2 – (yi+1 + 0.5) 又 yr+1 = yr+ k , e(xi+2) = yr+1 + k – yi+1 – 0.5 3.1.2 Bresenham直线生成算法 初始值e(xi+1)= yr+1 – yi – 0.5 void BSH (int x0,int y0, int x1, int y1, int color, CDC *pDC) { double k = (y1-y0)/(x1-x0); double e = k – 0.5; // 误差项初始值 int y = y0; for (int x = x0 ;x x1;x++) { pDC-SetPixel(x, y, color); if (e = 0) { y++; e += k-1 ;} else {e += k; } } } 3.1.2 Bresenham直线生成算法 举例:用Bresenham方法扫描转换连接两点 P0(0,0)和P1(5,2)的直线段,写出x、y、e值 3.1.2 Bresenham直线生成算法 特点:采用增量计算,对于每一列,只要检查一个误差项的符号,就可确定该列的所求象素。 3.1.3 中点直线生成算法 3.1.3 中点直线生成算法 3.1.3 中点直线生成算法 3.2 圆的扫描转换 几种容易实现但效率不高的算法: 1)圆方程显式求解 y = ± ,画出1/4圆周,对称化整个圆。(乘法、开方;且x ≈ R时,y值产生大的间断--点分布不均匀)。 2)画点( ),从0到9

文档评论(0)

maxmin + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档