华中科技大学计算机图形学课件 基本图形生成算法.pptVIP

  • 36
  • 0
  • 约2.21千字
  • 约 49页
  • 2019-05-06 发布于广东
  • 举报

华中科技大学计算机图形学课件 基本图形生成算法.ppt

1999年7月 第5章 基本图形生成算法 图形的生成:在指定的输出设备上根据坐标描述构造基本二维几何图形 图形的扫描转换: 在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程。 直线的扫描转换 直线的绘制要求: 1.直线要直 2.直线的端点要准确 3.亮度、色泽均匀 4.画线速度快 5.具有不同的色泽、亮度、线型等 解决的问题: 给定直线两端点P0(X0,Y0)和P1(X1,Y1),画出该直线。 解决问题的方法: 利用数学方程直接算? 观察并找出规律? 拟人的方法? 观察并找出规律? 数值微分法(DDA法) 直线的微分方程: |k|≤1的情况: 注意:round(x)=(int)(x+0.5) 特点: 增量算法:在一个迭代算法中,每一步的x、y值用前一步的值加上一个增量来获得 直观、易实现 缺点:浮点数运算 中点Bresenham算法 基本原理:假定0≤k≤1,x是最大位移方向 误差项初始值的计算 0≤k≤1时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。否则结束。 改进的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。否则结束。 直线的双模式多步生成算法 直线段的多步生成 直线段每次生成的多个象素点在水平和垂直方向上具有规律性 生成接近水平的直线段时,通过预知一条扫描线上要连续点亮的N个象素点来加速直线的生成 对角线方向呢? 直线段的生成在对角线方向上也有规律性 每次生成几个象素点? 圆的扫描转换 解决的问题: 绘出圆心在原点,半径为整数R的圆x2+y2=R2 解决问题的方法: 能否简化问题? 直接方程计算? 观察并得出规律? 解决问题: 简单方程产生圆弧 算法原理:利用其函数方程,直接离散计算 中点Bresenham画圆 算法原理 构造函数F(x,y)=x2+y2-R2。 对于圆上的点,有F(x,y)=0; 对于圆外的点,F(x,y)0; 而对于圆内的点,F(x,y)0。 误差项的递推 5.3 椭圆的扫描转换 直接方程计算绘制椭圆? 借鉴圆的绘制方程方法绘制? 椭圆具备什么样的特征? 利用该特征如何绘制椭圆? 5.3.1 椭圆的特征 对于椭圆上的点,有F(x,y)=0; 对于椭圆外的点,F(x,y)0; 对于椭圆内的点,F(x,y)0。 以弧上斜率为-1的点作为分界将第一象限椭圆弧分为上下两部分。 引理5-1:若在当前中点,法向量的y分量比x分量大,即 椭圆的中点Bresenham算法 算法原理 上半部分的椭圆绘制原理 误差项的递推 误差项的递推 完了? 好吗? 误差项初始值的计算 d0=1.25-R di0,di+1=di+2xi+3 di?0,di+1=di+2(xi -yi) +5 用di-0.25代替di d0=1-R di0,di+1=di+2xi+3 di?0,di+1=di+2(xi -yi) +5 改进 解决问题: 而在下一个中点,不等号改变方向,则说明椭圆弧从上部分转入下部分。 法向量 完了? 好吗? 误差项初始值的计算 * * 提出问题 如何在光栅显示器等数字设备上画: 点?直线?圆?椭圆? |k|≥1: 完了? 好吗? 误差项的递推 d0=0.5-k di0,di+1=di+1-k di≥0,di+1=di-k 改进 用2di△x代替di d0=△x-2△y di0,di+1=di+2△x-2△y di≥0,di+1=di -2△y d=△x-2△y d+2△x-2△y d-2△y 改进:用2d△x代替d d初=0, 每走一步:di+1=di+k 一旦d 0.5 ,di=di-1 令ei = di - 0.5 e初=-0.5, 每走一步有ei+1=ei+k if (ei0) then ei=ei-1 改进 用2ei△x代替ei e初=-△x 每走一步有ei+1=ei+2△y if (e0) then ei=ei-2△x 令ei=

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档