CG第3章基本图形生成算法C课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《CG第3章基本图形生成算法C课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CG 基本 图形 生成 算法 课件
- 资源描述:
-
1、2022-8-81第5章 基本图形生成算法 图形生成图形生成:是是在指定的输出设备上根据坐标描述构在指定的输出设备上根据坐标描述构造基本二维几何图形(点、直线、圆、椭圆、多边造基本二维几何图形(点、直线、圆、椭圆、多边形域、字符串及其相关属性等)。对于光栅显示器形域、字符串及其相关属性等)。对于光栅显示器来说,将屏幕看作像素矩阵来说,将屏幕看作像素矩阵,在该矩阵上在该矩阵上。确定一确定一个像素集合来逼近图形。个像素集合来逼近图形。2022-8-825.1 直线的扫描转换The lines of this objectappear continuousHowever,they aremade o
2、f pixels2022-8-83图5-1 用一系列的象素点来逼近直线图形的扫描转换图形的扫描转换 在光栅显示器等设备上确定一个在光栅显示器等设备上确定一个最佳逼近于图形象素集的过程,如下图所示最佳逼近于图形象素集的过程,如下图所示:5.1 直线的扫描转换直线的扫描转换2022-8-845.1 直线的扫描转换 直线的绘制要求:直线的绘制要求:1.1.直线要直直线要直2.2.直线的端点要准确,直线的端点要准确,即无定向性和断裂情况即无定向性和断裂情况3.3.直线的亮度、色泽要均匀直线的亮度、色泽要均匀4.4.画线的速度要快画线的速度要快5.5.直线具有不同的色泽、亮度、线型等直线具有不同的色泽、
3、亮度、线型等直线绘制算法有直线绘制算法有:逐点比较法、正负法、逐点比较法、正负法、数值微分法和中点数值微分法和中点BreshenhamBreshenham算法等算法等。2022-8-85数值微分法(数值微分法(DDA方法,方法,Digital Differential Analyzer)要解决的问题:给定直线两端点要解决的问题:给定直线两端点P0(x0,y0)和和P1(x1,y1),画出该直线。画出该直线。直线的方程为直线的方程为1010,(constant)yydyymdxxxx111(1)iiiiixxym xbym,(01)ym xbm注:注:1、仅需要计算一次、仅需要计算一次m;2、x
4、每增加一个单位,每增加一个单位,y只需加上一个只需加上一个m,回避了乘法运算,提高了运算效率。回避了乘法运算,提高了运算效率。1,x取2022-8-86问题:若问题:若|m|1,?x与与y互换;互换;m与与1/m互换互换x=x+1y=y+12022-8-87若直线为参数方程表示:若直线为参数方程表示:,01ssxxx ttyyy t 其中:其中:,;esesxxxyyy 令:令:max,nxy则则t 的每次增量为:的每次增量为:1/.tn 故,第故,第 i 步时:步时:,isiisixxx tyyy t 于是:于是:11(),()isiiisiixxxttxx tyyyttyy t 其中:其中
5、:均为常数,上式即给出了一个迭代算法。均为常数,上式即给出了一个迭代算法。,xyt2022-8-88特别地:当特别地:当 max(|x|,|y|)=|x|,即即|m|1时:时:11111iiiiiixxxxxyyyymx 当当 max(|x|,|y|)=|y|,即即|m|1时时:111111iiiiiixxxxymyyyyy 2022-8-89 DDA是一种增量算法是一种增量算法,直观、易实现;直观、易实现;但其中的但其中的x,y,m都要用浮点数,计算较大都要用浮点数,计算较大,且要对且要对x,y作取整运算,费时且不利于用硬件实现。作取整运算,费时且不利于用硬件实现。图5-3 DDA算法生成直
6、线段(xi,yi)(xi+1,round(yi+m)(round(xi+1/m),yi+1)2022-8-810Bresenham算法(算法(Bresenhams algorithm(1965))J.E.Bresenham,Algorithm for computer control of a digital plotter,IBM Systems Journal,1965,3,pp.25-30.该算法仅使用整数运算,运算速度大大提高,该算法仅使用整数运算,运算速度大大提高,是最有效的算法之一。是最有效的算法之一。核心思想:核心思想:分析直线与网格线的交点与分析直线与网格线的交点与网格点的距离
7、。网格点的距离。该距离与该距离与1/2的差称为误差项。的差称为误差项。2022-8-8112121(,)0 ,yyyF x yymxbmxxx其中同样给定直线两端点同样给定直线两端点P1(x1,y1)和和P2(x2,y2),可得可得直直线的方程如下:线的方程如下:xyF(x,y)0F(x,y)=0F(x,y)0F(x,y)=0F(x,y)0;直线下方的点,直线下方的点,F(x,y)0。2022-8-812 基本原理基本原理:假定假定0m1,x是最大位移方向,每次是最大位移方向,每次在在x方向上加方向上加1,y方向上加方向上加1或或0。图5-5 Brensemham算法生成直线的原理Q(,)ii
8、P x y(1,1)aiiP xy(1,)biiP xy(1,1/2)iiM xy2022-8-813由中点由中点M可得判别式可得判别式:(,)(1,0.5)0.5(1)iMMiiiidF xyF xyym xb有有:11 (0)(0)iiiiiydyydQ(,)iiP x y(1,1)aiiP xy(1,)biiP xy(1,1/2)iiM xy问题:算法结束了吗?问题:算法结束了吗?有无优化的可能?有无优化的可能?注意:计算注意:计算di 的运算量并不小的运算量并不小.2022-8-814误差项的递推误差项的递推若若di0,有有1(2,1.5)1.5(2)1.5(1)1iiiiiiiidF
9、xyym xbym xbmdmdi0(2,1.5)iiM xyQ(,)iiP x y(1,0.5)iiM xy2022-8-815误差项的递推误差项的递推若若di0,有有1(2,0.5)0.5(2)0.5(1)iiiiiiiidF xyym xbym xbmdm(2,0.5)iiM xyQ(,)iiP x y(1,0.5)iiMxy2022-8-816初始值初始值d 的计算:的计算:0000000(1,0.5)0.5(1)0.5 0.5dF xyym xbymxbmm故,关于故,关于di,有,有:0110.5;01,iiiiidmifdddmelseddmend关于关于yi+1,有,有:11
10、(0)(0)iiiiiydyyd2022-8-817 由于只关心由于只关心d 的符号的符号,故可用故可用2xd 代替代替d 来摆脱小数计来摆脱小数计算算,得到整数运算得到整数运算,于是:于是:d0=0.5-k 2xd0=x-2y d 0 时时:d=d+1-m 2x d=2x d+2x-2y;d 0 时时:d=d-m 2x d=2x d-2y。整数级整数级Bresenham算法算法2022-8-818 0m1时时Bresenham算法的步骤为算法的步骤为:1.输入直线的两端点输入直线的两端点P0(x0,y0)和和P1(x1,y1)。2.计算初始值计算初始值x,y,d=x-2y,x=x0,y=y0
11、;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;否则结束。;否则结束。2022-8-819void 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 scal
12、ed 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;而对于圆内的点,而对于圆内的点,F(x,y)0时,下一点取时,下一点取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。构造判别式:
13、构造判别式:222)5.0()1()5.0,1(),(RyxyxFyxFdiiiiMM2022-8-828误差项的递推误差项的递推 d0:(a)d0:5)(2 )22()32()5.0()1()5.1()2()5.1,2(222222iiiiiiiiiiyxdyxRyxRyxyxFd(b)d0的情况Pxixi+2xi+1yi-1yiyi-2误差项的递推误差项的递推2022-8-830判别式的初始值判别式的初始值RRRRFd25.1 )5.0(1 )5.0,1(2202022-8-831算法步骤:算法步骤:1.输入圆的半径输入圆的半径R。2.计算初始值计算初始值d=1.25-R、x=0、y=R。
14、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.当当x00;椭圆内的点椭圆内的点 F(x,y)00,取取Pd(xi+1,yi-1)p(xi,yi)pu(xi+1,yi)pd(xi+1,yi-1)M(xi+1,yi-0.5)5-17 上半部分椭圆弧的绘制原理2022-8-840误差项的递推误差项的递推 d10:(a)d0的情况
15、Pxixi+2xi+1yi-1yiyi-2误差项的递推误差项的递推 d10:判别式的初始值判别式的初始值 (弧的起点为弧的起点为(0,b)25.0()5.0()5.0,1(222222210babbababbFd椭圆弧下半部分的绘制方法类似。椭圆弧下半部分的绘制方法类似。2022-8-8435.4 多边形的扫描转换与区域填充 填充的意义:填充的意义:1.1.表示区域,表示区域,2.2.真实感显示。真实感显示。多边形的扫描转换主要是多边形的扫描转换主要是从多边形的顶点表示到点从多边形的顶点表示到点阵表示的转换阵表示的转换。区域填充是从给定的位置开始涂描直到指定的边界区域填充是从给定的位置开始涂描
16、直到指定的边界条件为止。条件为止。2022-8-8445.4.1 多边形的扫描转换 多边形的表示方法有多边形的表示方法有顶点表示顶点表示和和点阵表示点阵表示。前者用多边。前者用多边形的顶点序列来刻划多边形形的顶点序列来刻划多边形,几何意义强几何意义强,占内存少,但占内存少,但不能直接用于显示;后者用位于多边形内的象素的集合不能直接用于显示;后者用位于多边形内的象素的集合来刻划多边形来刻划多边形,方便显示方便显示,但几何意义丢失。但几何意义丢失。故需要进行多边形扫描转换故需要进行多边形扫描转换,即即:从多边形的顶点表示到从多边形的顶点表示到点阵表示的转换点阵表示的转换。1.什么是多边形的扫描转换
17、2022-8-8455.4.1 多边形的扫描转换多边形的扫描转换1.逐点判断算法逐点判断算法基本思想:基本思想:帧缓冲器中对每个象素进行扫描,确定它们是否在多边形内帧缓冲器中对每个象素进行扫描,确定它们是否在多边形内(从该象素点出发向外发射射线,若有奇数个交点,则在多(从该象素点出发向外发射射线,若有奇数个交点,则在多边形内,否则在多边形外)。边形内,否则在多边形外)。使用一个布尔量使用一个布尔量inside(P,x,y)来指示当前点是否在多边形内来指示当前点是否在多边形内的状态,从而给出多边形内的点的集合。的状态,从而给出多边形内的点的集合。然后对多边形内的点着多边形颜色,否则着背景色。然后
18、对多边形内的点着多边形颜色,否则着背景色。特点:特点:程序简单,但速度太慢。程序简单,但速度太慢。原因原因:(1)割断了各项素之间的联系;割断了各项素之间的联系;(2)孤立地考察各象素与孤立地考察各象素与多边形的内外关系,使得几乎所有象素都要判断;多边形的内外关系,使得几乎所有象素都要判断;(3)每次判每次判断需要多次求交,需要大量乘除运算,效率较低断需要多次求交,需要大量乘除运算,效率较低。2022-8-8465.4.1 多边形的扫描转换多边形的扫描转换2.扫描线算法扫描线算法特点:特点:综合利用了相邻象素之间的连贯性,避免了对象素的逐点判综合利用了相邻象素之间的连贯性,避免了对象素的逐点判
19、断和反复求交的运算,达到了减少运算次数和提高速度的目断和反复求交的运算,达到了减少运算次数和提高速度的目的。的。具体地具体地:综合利用了综合利用了(1)区域的连贯性;区域的连贯性;(2)扫描线连贯性;)扫描线连贯性;(3)边的连贯性。)边的连贯性。2022-8-847 2.1.x-扫描线算法 基本思想基本思想:按扫描线顺序计按扫描线顺序计算扫描线与多边形相交区间,算扫描线与多边形相交区间,再用指定的颜色显示这些区再用指定的颜色显示这些区间的象素。间的象素。y3的扫描线与多边形的边的扫描线与多边形的边界相交于点界相交于点(2,3)、(4,3)、(7,3)、(9,3),定义了多边形,定义了多边形内
20、的两个区间,其中的象素内的两个区间,其中的象素应取填充色。应取填充色。图5-23 x-扫描线算法填充多边形xy213 4 5 6 7 8 91112345678910111210122022-8-848算法步骤算法步骤:(1)确定多边形所占有的最大扫描确定多边形所占有的最大扫描线数,得到多边形顶点的最线数,得到多边形顶点的最小和最大小和最大y值(值(ymin和和ymax)。)。(2)从从y=ymin到到y=ymax,每次用一每次用一条扫描线进行填充。条扫描线进行填充。(3)对一条扫描线填充的过程可分对一条扫描线填充的过程可分为四个步骤:为四个步骤:a.求交,求交,b.排序,排序,c.交点配对,
21、交点配对,d.区间填色区间填色图5-23 x-扫描线算法填充多边形xy213 4 5 6 7 8 91112345678910111210120112233445566778891011P2(5,1)EP3(11,3)DP4(11,8)GFCBP5(5,5)P6(2,7)AP1(2,2)2022-8-849 存在问题存在问题:当扫描线当扫描线与多边形顶点相交与多边形顶点相交时,交点如何取舍时,交点如何取舍?xy213456789111234567891011121012图5-24 与多边形顶点相交的交点的处理 若共享顶点的两条边若共享顶点的两条边分别落在扫描线的两分别落在扫描线的两边,交点只算
22、一个;边,交点只算一个;若共享顶点的两条边若共享顶点的两条边在扫描线的同一边,在扫描线的同一边,这时交点作为零个或这时交点作为零个或两个。两个。0112233445566778891011P2(5,1)EP3(11,3)DP4(11,8)GFCBP5(5,5)P6(2,7)AP1(2,2)2022-8-8502.2.y连贯性算法xi,yixi+1,yi+111/k图5-26 与多边形边界相交的两条连续扫描线交点的相关性 也叫有效也叫有效(活性活性)边表算法边表算法,是是对对x-扫描线算法的改进。扫描线算法的改进。处理一条扫描线时,仅对有处理一条扫描线时,仅对有效边求交;效边求交;利用扫描线的连
23、贯性;利用扫描线的连贯性;利用多边形边的连贯性利用多边形边的连贯性 xi+1=xi+1/k。2022-8-851有效边有效边(Active Edge):指与当前扫描线相交的指与当前扫描线相交的多边形的边,也称为活多边形的边,也称为活性边。性边。有效边表有效边表(Active Edge Table,AET):):把有效把有效边按与扫描线交点边按与扫描线交点x坐标坐标递增的顺序存放在一个递增的顺序存放在一个链表中,此链表称为有链表中,此链表称为有效边表。效边表。xy213 4 5 6 7 8 9111234567891011121012p1p3p4p5(a)多边形P0P1P2P3P4P5P6P0p
展开阅读全文