[工学]第3章 基本图形生成算法.ppt

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

图形生成算法基础 图形的生成:是在指定的输出设备上,根据坐标描述构造二维 几何图形。 图形的扫描转换:在光栅显示器等设备上确定一个最佳逼近于 图形的象素集的过程。 研究内容 直线的扫描转换 圆的扫描转换 椭圆的扫描转换 多边形的扫描转换与区域填充 2D裁剪 字符的处理 属性处理 反走样 3.1 直线的扫描转换 3.1.1 DDA画线算法 程序(|k|≤1) DDA算法评价 比直接使用公式 y=k*x+b快 ,没有用乘法; 设置增量的除法运算、取整操作和浮点运算仍然耗时,不利于硬件实现; DDA算法是一个增量算法。 假设斜率k在0、1之间。 假设x坐标为xp的各像素点中,与直 线最近者已确定,为P(xp,yp),那么,下一个与直线最近的 像素只能是正右方的P1(xp+1,yp),或右上方的P2 (xp+1,yp+1)两者之一。令M为P1和P2的中点,易知M的 坐标为(xp+1,yp+0.5)。 设Q是理想直线与垂直线x=xp+1 的交点。显然,若M在Q的下方,则P2 离直线近,应取为下一个像素;否则应 取P1。 假设直线的起点和终点分别是(x0, y0)和(x1,y1)。则直线方程为: F(x,y)=ax+by+c=0;其中a=y0-y1,b=x1-x0,c=x0y1-x1y0。 该直线方程将平面分为三个区域: 对于直线上的点,F(x,y)=0;对于直线上方的点F(x,y)0; 对于直线下方的点,F(x,y)0。 判别式: 初始值d的计算 0≤k≤1时中点画线算法的算法步骤为: 1.输入直线的两端点P0(x0,y0)和p1(x1,y1)。 2.计算初始值a = y0-y1、b=x1-x0、d=a+0.5b、x=x0、y=y0; 3.绘制点(x,y)。判断d的符号; 若d0,则(x,y)更新为(x+1,y+1),d更新为d+a+b;否则(x,y)更新为(x+1,y),d更新为d+a。 4.当直线没有画完时,重复步骤3。否则结束。 3.1.3 Bresenham画线算法 假定直线段的0≤k≤1 基本原理: 算法步骤: 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、d=0、x=x0、y=y0。 3.绘制点(x,y)。 4.d更新为d+k,判断d的符号。若d0.5,则(x,y)更新为(x+1,y+1),同时将d更新为d-1;否则(x,y)更新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。 改进1:令e=d-0.5 算法步骤为: 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、e=-0.5、x=x0、y=y0。 3.绘制点(x,y)。 4.e更新为e+k,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-1;否则(x,y)更新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。 改进2:用2e△x来替换e e初=-△x, 每走一步有e=e+2△y。 if (e0) then e=e-2△x 算法步骤: 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、e=-△x、x=x0、y=y0。 3.绘制点(x,y)。 4.e更新为e+2△y,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-2△x;否则(x,y)更新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。 研究内容 直线的扫描转换 圆的扫描转换 椭圆的扫描转换 多边形的扫描转换与区域填充 2D裁剪 字符的处理 属性处理 反走样 3.2.1 简单方程产生圆弧 算法原理:利用其函数方程,直接离散计算 存在问题 圆的标准方程包括乘法和平方根运算; 圆的极坐标参数方程包含乘法和三角运算。 3.2 圆的扫描转换 3.2.3 中点画圆法 构造函数F(x,y)=x2+y2-R2。R 为整数。 对于圆上的点,有F(x,y)=0; 对于圆外的点,F(x,y)0; 而对于圆内的点,F(x,y)0。 当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。否则结束。 改进:将1.25-R≈1-R(因为R为整数),算法步骤: 1.

文档评论(0)

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

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

1亿VIP精品文档

相关文档