收藏 分享(赏)

第四章二维图形的生成和变换.ppt

上传人:fmgc7290 文档编号:6550805 上传时间:2019-04-17 格式:PPT 页数:45 大小:483KB
下载 相关 举报
第四章二维图形的生成和变换.ppt_第1页
第1页 / 共45页
第四章二维图形的生成和变换.ppt_第2页
第2页 / 共45页
第四章二维图形的生成和变换.ppt_第3页
第3页 / 共45页
第四章二维图形的生成和变换.ppt_第4页
第4页 / 共45页
第四章二维图形的生成和变换.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、计算机图形学,河北科技大学 理学院 教师 李艳 E-mail:,第四章 二维图形生成和变换技术,第一节 基本绘图元素第二节 直线段的生成第三节 曲线的生成第四节 区域填充第五节 二维图形变换第六节 二维图像裁剪,第一节 基本绘图元素,一 点 二 直线 三 曲线 四 区域填充,一 点,点是图形中最基本的图素,直线、曲线以及其他的图元都是点的集合。在几何学中,一个点既没有大小,也没有维数,点只是表示坐标系统中的一个位置。在计算机图形学中,点是用数值坐标来表示的。在直角坐标系中点由(x,y)两个数值组成的坐标表示在三维坐标系中点由(x,y,z)三个数值组成的坐标表示。,一 点,一 点,为在输出设备上

2、输出一个点,就要把应用程序中的坐标信息转换成所用输出设备的相应指令。对于一个cRt监视器来说,输出一个点就是要在指定的屏幕位置上开启(接通)电子束,使该位置上的荧光点辉亮。对于黑白光栅显示器来说,则是要将帧缓存中指定坐标位置处的位置设为“1”,然后,当电子扫视每一条水平扫描线时一旦遇到帧缓存中值为“1”的点就发射一亮光,即输出一个点。对于随机扫描显示器,圆点的指令保存在显示文件中,该指令把坐标值转换成偏转电压,并在每一个刷新周期内使电子束偏转到相应位置。,二 直线,直线是点的集合在几何学中直线被定义为两个点之间的最短距离。也就是说一条直线是指所有在它上面的点的集合,直线是一维的,即它们具有长度

3、但没有维数。,二 直线,一般来讲任何图形输出设备都能准确地画出水平线x和垂直线y,但要画出一条准确的斜线不是件容易的事。那么在图形显示器上如何生成斜线段呢?图形显示器是由一个个排列有序的像素构成,划分的像素点越多分辨率越高。例如VGA卡640480的显示器,分成640480个网格网格的单元称为像素,一条线段就是由一些连续可见的像素所组成。,二 直线,三 曲线,曲线包括圆、椭圆、弧线和由许多类型的方程所确定的图形。在计算机图形程序设计中最好将曲线定义成不能构成直线的点的集合。曲线被认为是图形学的基础,在生产设计中经常遇到的是曲线问题,这是因为曲线更能满足人们的设计要求。曲线的生成与直线一样,也是

4、用一系列计算出来并与曲线靠近的像素绘制的。曲线通过具有相同颜色的像素在显示表面上显示出来,曲线并不存在于显示表面上而是仅存于数据库中。,四 区域填充,区域填充是一个彩色或图案区域,可以是均匀的也可以是不均匀的,区域边界可以是直线也可以是曲线。正如多种不同类型的线条一样可提供不同的内部填充类型用以充满区域内部,填充的类型可能是不同的颜色、不同的灰度或者不同的图案。,第四章 二维图形生成和变换技术,第一节 基本绘图元素第二节 直线段的生成第三节 曲线的生成第四节 区域填充第五节 二维图形变换第六节 二维图像裁剪,第二节 直线段的生成,一逐点比较法 二数值微分法 三中点画线法 四Bresenham法

5、,一逐点比较法,绘图仪中画直线多采用逐点比较法。在绘图过程中,绘图笔每画一步就与规定图形进行比较,然后决定下一步的走向,用步步逼近的方法画出规定的图形。,我们以坐标系第一象限中的直线为例。如画直线OA画笔当前位置是M,用OM与OA线斜率之差来计算偏差,y,一逐点比较法,当 0时,表示笔在OA线段上方应该向+x方向走一步。,一逐点比较法,由于分母 因此只需判断分子的正负即可,得偏差公式:,对任意点,偏差函数的一般形式为:其中 是终点A坐标,一逐点比较法,为了简化计算,可设法用前一点的偏差来推算后一点的走向以及走步后的偏差,这种方法称为递推法。递推公式如下:当 时,向+X方向走一步,此时偏差当 时

6、,向+Y方向走一步,此时偏差,一逐点比较法,偏差的推算,只用道终点坐标值,而与中间点的坐标值无关,且只需进行加减运算。,O,Y,X,设笔当前位置为 ,此时 应走+Y一步到 即 表示走一步。 处的偏差为:若 应走 一步到 ,则, 处的偏差为:,一逐点比较法,这样一次进行下去,就得到上述递推公式。 对于第二,三,四象限的直线也可类似推出。,二 数值微分法(DDA),假定直线的起点、终点分别为:(x0,y0), (x1,y1),且都为整数。,(X i , Yi),(X i+1 ,Yi + k),(X i , Int(Yi +0.5),栅格交点表示象素点位置,二 数值微分法(DDA),基本思想 已知过

7、端点P0 (x0, y0), P1(x1, y1)的直线段L y=kx+b 直线斜率为,这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。,二 数值微分法(DDA),计算yi+1= kxi+1+b = kxi+b+kx= yi+kx 当x =1; yi+1 = yi+k 即:当x每递增1,y递增k(即直线斜率); 注意上述分析的算法仅适用于k 1的情形。在这种情况下,x每增加1,y最多增加1。 当 k 1时,必须把x,y地位互换,二 数值微分法(DDA),增量算法:在一个迭代算法中,如果每一步的x、y值是用前一步的值加上一个增量来获得,则称为增量算法。 DDA算法就是一个增量

8、算法。,二 数值微分法(DDA),例:画直线段 P0(0,0)-P1(5,2) x int(y+0.5) y+0.5 0 0 0+0.5 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5 5 2 2.0+0.5,二 数值微分法(DDA),缺点: 在此算法中,y、k必须是float,且每一步都必须对y进行舍入取整,不利于硬件实现。,三 中点画线法,假定直线斜率0K1,且已确定点亮象素点P(Xp ,Yp ),则下一个与直线最接近的像素只能是P1点或P2点。设M为中点,Q为交点 现需确定下一个点亮的象素。,原理,三 中点画线法,当M在Q的下方- P2离直

9、线更近更近-取P2 。 M在Q的上方- P1离直线更近更近-取P1 M与Q重合, P1、P2任取一点。问题:如何判断M与Q点的关系?,三 中点画线法,假设直线方程为: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 点在直线下方 欲判断M点是在Q点上方还是在Q点下方,只需把M代入F(x,y),并检查它的符号。,三 中点画线法,构造判别式:d=F(M)=F(xp+1,yp+0.5) =a(xp+1)+b(yp+0.5)+c 当d0,M在直线(Q点)上方,取右方P1; 当d=

10、0,选P1或P2均可,约定取P1; 能否采用增量算法呢?,三 中点画线法,若d0-M在直线上方-取P1; 此时再下一个象素的判别式为d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)+c= a(xp +1)+b(yp +0.5)+c +a =d+a;增量为a,三 中点画线法,若dM在直线下方-取P2; 此时再下一个象素的判别式为d2= F(xp+2, yp+1.5)=a(xp+2)+b(yp+1.5)+c= a(xp +1)+b(yp +0.5)+c +a +b =d+a+b ; 增量为ab,三 中点画线法,画线从(x0, y0)开始,d的初值d0=F(x0+1, y0+

11、0.5)= a(x0 +1)+b(y0 +0.5)+c= F(x0, y0)+a+0.5b = a+0.5b 由于只用d 的符号作判断,为了只包含整数运算, 可以用2d代替d来摆脱小数,提高效率。,三 中点画线法,void Midpoint Line (int x0,int y0,int x1, int y1,int color) int a, b, d1, d2, d, x, y;a=y0-y1; b=x1-x0; d=2*a+b;d1=2*a ; d2=2* (a+b);x=x0; y=y0;drawpixel(x, y, color);while (xx1) if (d0) x+; y+

12、; d+=d2; else x+; d+=d1;drawpixel (x, y, color); /* while */ /* mid PointLine */,三 中点画线法,例:用中点画线法P0(0,0) P1(5,2) a=y0-y1=-2 b=x1-x0=5 d0=2a+b=1 d1=2a=-4 d2=2(a+b)=6 i xi yi d 1 0 0 1 2 1 0 -3 3 2 1 3 4 3 1 -1 5 4 2 5,四 Bresenham画线算法,使用最广泛 与中点画线法的思想类似 由误差项符号决定下一个象素取正右方像素还是右上方像素,四 Bresenham画线算法,基本思想 比

13、较从理想直线到位于直线上方的像素的距离d1和相邻的位于直线下方的像素的距离d2 根据距离误差项的符号确定与理想直线最近的象素,四 Bresenham画线算法,最大位移方向每次走一步 k1时,x为最大位移方向 y方向走步与否 取决于误差e值的大小 误差计算 初值:e0= y/ x 当e0.5时,最接近P2(xi+1,yi+1) y方向走一步 当e0.5时,最接近P1(xi+1,yi) y方向不走步,四 Bresenham画线算法,为方便与0比较,设e=e-0.5 e0=y/ x-0.5 当e0时,最接近P2(xi+1,yi+1) y方向走一步 当e0时,最接近P1(xi+1,yi) y方向不走步

14、 有除法,不宜硬件实现,四 Bresenham画线算法,设e=e2x,不影响判断的准确性 e0=2y - x 当e0时,最接近P2(xi+1,yi+1) y方向走一步 当e0时,最接近P1(xi+1,yi) y方向不走步,四 Bresenham画线算法,下一步误差的计算 当e0时,y方向走一步 e=2y/ x - 1 =e + y/ x - 1 e=e + 2y - 2x 当e0时,y方向不走步 e=2y/ x=e + y/ x e=e + 2y,四 Bresenham画线算法,优点 整数运算,速度快 精度高 乘2运算可用移位实现,适于硬件实现,第四章 二维图形生成和变换技术,第一节 基本绘图元素第二节 直线段的生成第三节 曲线的生成第四节 区域填充第五节 二维图形变换第六节 二维图像裁剪,第三节 曲线的生成,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 图形图像

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报