[理学]CG第3章 基本图形生成算法C.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[理学]CG第3章 基本图形生成算法C

华中理工大学计算机学院 陆枫 99-7 1999年7月 第5章 基本图形生成算法 5.1 直线的扫描转换 5.1 直线的扫描转换 5.1 直线的扫描转换 ?直线的绘制要求: 1.直线要直 2.直线的端点要准确, 即无定向性和断裂情况 3.直线的亮度、色泽要均匀 4.画线的速度要快 5. 直线具有不同的色泽、亮度、线型等 数值微分法(DDA方法, Digital Differential Analyzer ) 要解决的问题:给定直线两端点P0(x0,y0)和P1(x1,y1),画出该直线。 若直线为参数方程表示: 特别地:当 max(|△x|,|△y|)=|△x|,即 |m|≤1时: DDA是一种增量算法,直观、易实现; 但其中的x,y,m都要用浮点数,计算较大, 且要对x,y作取整运算,费时且不利于用硬件实现。 Bresenham算法(Bresenham’s algorithm (1965)) 基本原理: 假定0≤m≤1,x是最大位移方向,每次在x方向上加1,y方向上加1或0。 由中点M可得判别式: 初始值d 的计算: 0≤m≤1时Bresenham算法的步骤为: 1. 输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2. 计算初始值△x, △y, d=Δx-2Δy , x=x0, y=y0; 3. 绘制点(x,y),根据d的符号进行如下操作: 若d0,则(x,y)更新为(x+1,y+1),d更新为 d+2Δx-2Δy ;否则 (x,y) 更新为(x+1,y),d更新为d-2Δy 。 4. 当直线没有画完时,转步骤3;否则结束。 void Bresenham (int xl, int yl, int xr, int yr) { int x, y; /* coordinates of pixel being drawn */ int dy=yr-y1, dx=xr-x1; int ie; /* integer scaled error term */ x=xl; y=yl; /* start at left endpoint */ ie =dx-2 *dy; /* initialize the error term */ while (x = xr){ /* pixel-drawing loop */ PlotPixel (x, y); /* draw the pixel */ if (ie 0) { y = y + 1; ie = ie +2 * dx-2*dy; /* replaces d */ } x = x + 1; ie = ie - 2 * dy; /* replaces d */ } } 几点说明 Bresenham算法有很多变形,以上介绍的是中点Bresenham算法;尽管各种变形算法形式不同,但核心思想和出发点都是类似的。 如:可取d=y(xi+1)-yi-0.5 双点Bresenham直线生成算法。 直线的对称生成算法 三维直线生成算法 多点直线生成算法 5.2.2 简单方程产生圆弧 算法原理:利用其函数方程,直接离散计算 。 5.2.3 中点Bresenham画圆算法 由圆的方程构造函数F(x, y)=x2-y2-R2 对于圆上的点,有F(x, y)=0; 对于圆外的点,F(x, y)0; 而对于圆内的点,F(x, y)0。 ?这里只考虑第一象限内x ?[0, R/2]的1/8圆弧。 当d≤0时,下一点取Pu(xi +1,yi); 当d0时,下一点取Pd(xi +1,yi-1)。 误差项的递推 d≤0: 判别式的初始值 算法步骤: 1.输入圆的半径R。 2.计算初始值d=1.25-R、x=0、y=R。 3.绘制点(x,y)及其在八分圆中的另外七个对称点。 4.判断d的符号。若d≤0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。 5.当xy时,重复步骤3和4。否则结束。 上述算法步骤2中,初始值d=1.25-R、x=0、y=R 改进:为避免小数运算,用d-0.25代替d,则初始值为: d=1-R、x=0、y=R。 5.3 椭圆的扫描转换 以弧上斜率为-1的点作为分界,将第一象限椭圆弧分为上下两部分。 引理:若在当前中点,法向量的y分量比x分量大,即 5.3.2

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档