[计算机软件及应用]第5章1 基图生成算法.ppt_第1页
[计算机软件及应用]第5章1 基图生成算法.ppt_第2页
[计算机软件及应用]第5章1 基图生成算法.ppt_第3页
[计算机软件及应用]第5章1 基图生成算法.ppt_第4页
[计算机软件及应用]第5章1 基图生成算法.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机图形学,第5章 基本图形生成算法,教学目的: 掌握如何在指定的输出设备上根据坐标描述构造基本二维几何图形(点、直线、圆、椭圆、多边形域、字符串及其相关属性等)的的原理及方法 重点: 直线DDA法、直线Bresenham算法、圆弧正负法 难点: 直线Bresenham算法原理、改进方法、圆弧正负法的改进方法,图形的生成:是在指定的输出设备上,根据坐标描述构造二维几何图形。 图形的扫描转换:在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程。,5.1 直线的扫描转换,直线的绘制要求: 1.直线要直 2.直线的端点要准确,即无定向性和断裂情况 3.直线的亮度、色泽要均匀 4.画线的速度要快 5.要求直线具有不同的色泽、亮度、线型等,5.1.1 数值微分法(DDA法),解决的问题: 给定直线两端点P0(x0,y0)和P1(x1,y1),画出该直线。,直线的微分方程:,DDA算法原理:,=1/max(|x|,|y|),理论上为无穷小的正数,由于设备精度有限,因此可取,|k|1的情况: max(|x|,|y|)=|x|,|k|1的情况: max(|x|,|y|)=|y|,注意: round(x)=(int)(x+0.5),例:画直线段P0(0,0)-P1(5,2) k=0.4 xi round(yi) yi+1 0 0 0+0.4 1 0 0.4+0.4 2 1 0.8+0.4 3 1 1.2+0.4 4 2 1.6+0.4 5 2 2.0+0.4,特点: 增量算法 直观、易实现 不利于用硬件实现,5.1.2 中点Bresenham算法,直线的方程,该直线方程将平面分为三个区域: 对于直线上的点,F(x,y)=0; 对于直线上方的点,F(x,y)0; 对于直线下方的点,F(x,y)0。,基本原理: 假定0k1,x是最大位移方向,判别式:,则有:,误差项的递推 di0:,误差项的递推 di0:,初始值d的计算,0k1时Bresenham算法的算法步骤为: 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值x、y、d=0.5-k、x=x0、y=y0; 3.绘制点(x,y)。判断d的符号; 若d0,则(x,y)更新为(x+1,y+1),d更新为d+1-k; 否则(x,y)更新为(x+1,y),d更新为d-k。 4.当直线没有画完时,重复步骤3。否则结束。,改进:用2dx代替d, 即所有d均乘以2x倍 d初值: (0.5-k)* 2x= x- 2x* y/ x = x- 2 y d0时,(d-k)* 2x= 2dx- 2y = d-2y,改进:用2dx代替d, 即所有d均乘以2x倍 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值x、y、d=x-2y、x=x0、y=y0。 3.绘制点(x,y)。判断d的符号。 若d0,则(x,y)更新为(x+1,y+1),d更新为 d+2x-2y; 否则(x,y)更新为(x+1,y), d更新为d-2y。 4.当直线没有画完时,重复步骤3。否则结束。,5.1.3 改进的Bresenham算法,假定直线段的0k1 基本原理:,误差项的计算 d初=0, 每走一步:d=d+k 一旦y方向上走了一步,d=d-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,e初=-0.5, 每走一步有e=e+k。 if (e0) then e=e-1,算法步骤为: 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:用2ex来替换e e初=-0.5* 2x =-x, 每走一步有e=(e+k)* 2x = 2ex +2y=e+2y if (e0) then e=(e-1)* 2x= e-2x,算法步骤: 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值x、y、e=-x、x=x0、y=y0。 3.绘制点(x,y)。 4.e更新为e+2y,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-2x;否则(x,y)更新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。,5.2 圆的扫描转换,解决的问题: 绘出圆心在原点,半径为整数R的圆x2+y2=R2,5.2.1 八分法画圆,八分法画圆,(y,x),(-y,x),(-x,y),(-x,-y),(-y,-x),(y,-x),(x,-y),解决问题:,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。 算法原理,当di0时,下一点取Pu(xi +1,yi); 当di0时,下一点取Pd(xi +1,yi-1)。,M的坐标为:M(xi +1,yi-0.5) 当F(xM,yM)0时,取Pd(xi +1,yi-1) 当F(xM,yM)=0时,约定取Pu。 构造判别式:,误差项的递推 di0的情况:,di0的情况:,判别式的初始值,算法步骤(设圆心在原点) 1.输入圆的半径R。 2.计算初始值d=1.25-R、x=0、y=R。 3.绘制点(x,y)及其在八分圆中的另外七个对称点。 4.判断d的符号。若d0,则先将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。否则结束。,改进:用d-0.25代替d 算法步骤: 1.输入圆的半径R。 2.计算初始值d=1-R、x=0、y=R。 3.绘制点(x,y)及其在八分圆中的另外七个对称点。 4.判断d的符号。若d0,则先将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。否则结束。程序,圆弧的正负法,原理:,设圆的方程为F(x,y)=X2 + Y2 - R2=0; 假设圆心是(0,0),求得Pi的坐标为(xi,yi); 则当Pi在圆内时- F(xi,yi) 向右- 向圆外 Pi在圆外时- F(xi,yi)0 - 向下- 向圆内,即求得Pi点后选择下一个象素点Pi+1的规则为: 当F(xi,yi) 0 取xi+1 = xi+1,yi+1 = yi; 当F(xi,yi) 0 取xi+1 = xi, yi+1 = yi - 1; 这样用于表示圆弧的点均在圆弧附近,且使F(xi,yi) 时正时负,故称正负法。 快速计算的关键是F(xi,yi) 的计算,能否采用增量算法?,圆弧的正负法,若F(xi,yi) 已知,计算F(xi+1,yi+1) 可分两种情况: 1、F(xi,yi)0 xi+1 = xi+1,yi+1 = yi; F(xi+1,yi+1)= (xi+1 )2 +

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论