第5章基本图形生成算法ppt课件_第1页
第5章基本图形生成算法ppt课件_第2页
第5章基本图形生成算法ppt课件_第3页
第5章基本图形生成算法ppt课件_第4页
第5章基本图形生成算法ppt课件_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 根本图形生成算法 提出问题提出问题如何在指定的输出设备上根据坐标描画构造根本二维几何图形点、直线、圆、椭圆、多边形域、字符串及其相关属性等。图形的生成:是在指定的输出设备上,根据坐标描画图形的生成:是在指定的输出设备上,根据坐标描画构造二维几何图形。构造二维几何图形。图形的扫描转换:在光栅显示器等数字设备上确定一图形的扫描转换:在光栅显示器等数字设备上确定一个最正确逼近于图形的象素集的过程。个最正确逼近于图形的象素集的过程。 图5-1 用一系列的象素点来逼近直线5.1 直线的扫描转换直线的扫描转换 直线的绘制要求:1.直线要直2.直线的端点要准确,即无定向性和断裂情况3.直线的亮度、色

2、泽要均匀4.画线的速度要快5.要求直线具有不同的色泽、亮度、线型等5.1.1 数值微分法数值微分法(DDA法法)处理的问题:处理的问题:给定直线两端点给定直线两端点P0(x0,y0)和和P1(x1,y1),画出该直线。,画出该直线。直线的微分方程:1)-(5 0101kxxyyxydxdyDDA算法原理:算法原理: 2)-(5 11yyyxxxiiiixxiyxyixi+1yi+1y图5-2 DDA算法原理=1/max(|x|,|y|) max(|x|,|y|)=|x|,即|k|1的情况:max(|x|,|y|)=|y|,此时|k|1:3)-(5 11111kyyxyyyyxxxxxxxiii

3、iiiii4)-(5 111111iiiiiiiiyyyyyyykxxyxxxx程序程序留意:留意:round(x)=(int)(x+0.5)图5-3 DDA算法生成直线段(xi,yi)(xi+1,round(yi+k)(round(xi+1/k),yi+1)特点:特点:增量算法增量算法直观、易实现直观、易实现不利于用硬件实现不利于用硬件实现 5.1.2 中点中点Bresenham算法算法直线的方程该直线方程将平面分为三个区域:对于直线上的点,F(x,y)=0;对于直线上方的点,F(x,y)0;对于直线下方的点,F(x,y)0F(x,y)=0F(x,y)0F(x,y)=0F(x,y)0根本原理

4、:根本原理:假定假定0k1,x是最大位移方向是最大位移方向Pu(xi+1,yi+1)M(xi+1,yi+1/2)P(xi,yi)Pd(xi+1,yi)图5-5 Brensemham算法生成直线的原理Q判别式:判别式:6)-(5 ) 1(5 . 0)5 . 0, 1(),(bxkyyxFyxFdiiiiMM那么有:)0( )0( 1dydyyPu(xi+1,yi+1)M(xi+1,yi+1/2)P(xi,yi)Pd(xi+1,yi)图5-5 Brensemham算法生成直线的原理Qd0(xi,yi)(xi+1,yi+0.5)(xi+2,yi+1.5)误差项的递推误差项的递推d=0(xi,yi)(

5、xi+1,yi+0.5)(xi+2,yi+0.5)初始值初始值d的计算的计算kkbkxybxkyyxFd5 . 0 5 . 0 ) 1(5 . 0 )5 . 0, 1(00000000k1时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替代替代d1.输入直线的两端

6、点输入直线的两端点P0(x0,y0)和和P1(x1,y1)。2.计算初始值计算初始值x、y、d=x-2y、x=x0、y=y0。3.绘制点绘制点(x,y)。判别。判别d的符号。的符号。假设假设d0.5,那么,那么(x,y)更新为更新为(x+1,y+1),同时将,同时将d更新为更新为d-1;否那;否那么么(x,y)更新为更新为(x+1,y)。5.当直线没有画完时,反复步骤当直线没有画完时,反复步骤3和和4。否那么终了。否那么终了。改良改良1:令:令e=d-0.50)(e 0)(e 1111iiiiiyyyxx e初=-0.5, 每走一步有e=e+k。 if (e0) then e=e-1算法步骤为

7、:算法步骤为: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来交换来交换ee初初=-x,每走一步有每走一步有e=e+2y。if (e0) then e=

8、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 圆的扫描转换圆的扫描转换处理的问题:处理的问题:绘

9、出圆心在原点,半径为整数绘出圆心在原点,半径为整数R的圆的圆x2+y2=R25.2.1 八分法画圆八分法画圆八分法画圆八分法画圆(x,y)yy=-xy=x(y,x)(-y,x)(-x,y)(-x,-y)(-y,-x)(y,-x)(x,-y)处理问题:处理问题:yy=x图5-10 1/8圆弧xR5.2.2 简一方程产生圆弧简一方程产生圆弧算法原理:利用其函数方程,直接离散计算算法原理:利用其函数方程,直接离散计算 圆的函数方程为: 222Ryx7)-(5 )(2R0, x121211iiiixRroundyxx圆的极坐标方程为: sincosRyRx)sin(8)-(5 )cos()( 1111

10、1iiiiiiRroundyRroundx为一固定角度步长5.2.3 中点中点Bresenham画圆画圆构造函数F(x,y)=x2-y2-R2。对于圆上的点,有F(x,y)=0;对于圆外的点,F(x,y)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。构造判别式:222)5 . 0() 1()5 . 0, 1(),(RyxyxFyxFdiiiiMM误差项的递推误差项的递推d0: (a) d0: 5)(2 )22()32()5 . 0(

11、) 1( )5 . 1()2( )5 . 1, 2(222222iiiiiiiiiiyxdyxRyxRyxyxFd(b) d0的情况Pxixi+2xi+1yi-1yiyi-2判别式的初始值判别式的初始值RRRRFd25. 1 )5 . 0(1 )5 . 0, 1 (220算法步骤:算法步骤: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

12、,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

13、(x-y)+5,再将,再将(x,y)更新为更新为(x+1,y-1)。5.当当x0; 对于椭圆内的点,F(x,y)0,取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 上半部分椭圆弧的绘制原理误差项的递推误差项的递推d10:(a) d0: )22() 32( )22() 32()5 . 0() 1( )5 . 1()2()5 . 1, 2(221222222222222221iiiiiiiiiiyaxbdyaxbbayaxbbayaxbyxFd(b) d0的情况Pxixi+2xi+1yi-1yiyi-2判别式的初始值

14、判别式的初始值 )25. 0( )5 . 0()5 . 0, 1 (222222210babbababbFdp(xi,yi)pl(xi,yi-1)pr(xi+1,yi-1)M(xi+1,yi-0.5)5-19 下半部分椭圆弧的绘制原理再来推导椭圆弧下半部分的绘制公式原理判别式判别式 2222222) 1()5 . 0() 1, 5 . 0(bayaxbyxFdiiii假设d20,取Pl(xi,yi-1)假设d20,取Pr(xi+1,yi-1)p(xi,yi)pl(xi,yi-1)pr(xi+1,yi-1)M(xi+1,yi-0.5)5-19 下半部分椭圆弧的绘制原理误差项的递推误差项的递推d2

15、0:)y(ad )y(aba)(ya)(xb ba)(ya)(xb),yF(xdiiiiiiii323215 . 025 . 025 . 0 2222222222222222(a) d0的情况Pxiyi-2xi+1yiyi-1xi+2d20: ) 32()22( ) 32()22() 1()5 . 0( )2()5 . 1()2, 5 . 1(222222222222222222iiiiiiiiiiyaxbdyaxbbayaxbbayaxbyxFd(b) d=0的情况Pxixi+2xi+1yi-1yiyi-2留意:留意:上半部分的终止判别上半部分的终止判别下半部分误差项的初值下半部分误差项的初

16、值 算法步骤:算法步骤:1.输入椭圆的长半轴输入椭圆的长半轴a和短半轴和短半轴b。2.计算初始值计算初始值d=b2+a2(-b+0.25)、x=0、y=b。3.绘制点绘制点(x,y)及其在四分象限上的另外三个对称点。及其在四分象限上的另外三个对称点。4.判别d的符号。假设d0,那么先将d更新为d+b2(2x+3),再将(x,y)更新为(x+1,y);否那么先将d更新为d+b2(2x+3)+a2(-2y+2),再将(x,y)更新为(x+1,y-1)。5.当b2(x+1)0时,反复步骤7和8。否那么终了。程序5.4 多边形的扫描转换与区域填充多边形的扫描转换与区域填充多边形的扫描转换主要是经过确定

17、穿越区域的扫多边形的扫描转换主要是经过确定穿越区域的扫描线的覆盖区间来填充,描线的覆盖区间来填充,区域填充是从给定的位置开场涂描直到指定的边区域填充是从给定的位置开场涂描直到指定的边境条件为止。境条件为止。5.4.1 多边形的扫描转换多边形的扫描转换顶点表示用多边形的顶点序列来刻划多边形顶点表示用多边形的顶点序列来刻划多边形点阵表示是用位于多边形内的象素的集合来刻划多边形点阵表示是用位于多边形内的象素的集合来刻划多边形扫描转换多边形或多边形的填充:从多边形顶点表示到扫描转换多边形或多边形的填充:从多边形顶点表示到点阵表示的转换。点阵表示的转换。1. 什么是多边形的扫描转换2. x-扫描线算法根

18、本思想图5-23 x-扫描线算法填充多边形xy213 4 5 6 7 8 9111234567891011121012算法步骤:算法步骤:(1)确定多边形所占有的最大扫描线数,得到多边形顶确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大点的最小和最大y值值ymin和和ymax。(2)从从y=ymin到到y=ymax,每次用一条扫描线进展填充。,每次用一条扫描线进展填充。(3)对一条扫描线填充的过程可分为四个步骤:对一条扫描线填充的过程可分为四个步骤:a.求交求交b.排序排序c.交点配对交点配对d.区间填色区间填色存在问题:当扫描线与多边形顶点相交时,交点存在问题:当扫描线与多边形顶点

19、相交时,交点的取舍问题。的取舍问题。xy213 4 5 6 7 8 9111234567891011121012图5-24 与多边形顶点相交的交点的处理处理: 当扫描线与多边形的顶点相交时,假设共享顶点的两条边分别落在扫描线的两边,交点只算一个;假设共享顶点的两条边在扫描线的同一边,这时交点作为零个或两个。 图5-25 与扫描线相交的多边形顶点的交点数011110222填充过程实例3. 改良的有效边表算法改良的有效边表算法Y衔接性算法衔接性算法xi,yixi+1,yi+111/k图5-26 与多边形边界相交的两条连续扫描线交点的相关性改良原理:改良原理:处置一条扫描线时,仅对有处置一条扫描线时

20、,仅对有效边求交效边求交利用扫描线的衔接性利用扫描线的衔接性利用多边形边的衔接性利用多边形边的衔接性有效边有效边Active Edge:指与当前扫描线相交的多:指与当前扫描线相交的多边形的边,也称为活性边。边形的边,也称为活性边。有效边表有效边表Active Edge Table, AET:把有效边按:把有效边按与扫描线交点与扫描线交点x坐标递增的顺序存放在一个链表中,坐标递增的顺序存放在一个链表中,此链表称为有效边表。此链表称为有效边表。有效边表的每个结点:有效边表的每个结点: x ymax 1/k next边表边表Edge Table边表的构造:边表的构造:(1)首先构造一个纵向链表,链表

21、的长度为多边形所占有首先构造一个纵向链表,链表的长度为多边形所占有的最大扫描线数,链表的每个结点,称为一个桶,那的最大扫描线数,链表的每个结点,称为一个桶,那么对应多边形覆盖的每一条扫描线。么对应多边形覆盖的每一条扫描线。(2)将每条边的信息链入与该边最小将每条边的信息链入与该边最小y坐标坐标ymin 相对相对应的桶处。也就是说,假设某边的较低端点为应的桶处。也就是说,假设某边的较低端点为ymin,那么该边就放在相应的扫描线桶中。那么该边就放在相应的扫描线桶中。(3)每条边的数据构成一个结点,内容包括:该扫描线与该边的初始交点x即较低端点的x值,1/k,以及该边的最大y值ymax。x|ymin

22、 ymax 1/k NEXT(4)同一桶中假设干条边按X|ymin由小到大排序,假设X|ymax 相等,那么按照1/m由小到大排序。处理顶点交点计为处理顶点交点计为1时的情形:时的情形:图5-28 将多边形的某些边缩短以分离那些应计为1个交点的顶点(a)原图(b)缩短ymax的边(c)缩短ymin的边扫描线y扫描线y+1扫描线y-1xy213 4 5 6 7 8 9111234567891011121012p1p3p4p5(a) 多边形P0P1P2P3P4P5P6P0p2p0p61234567891011123-1/3353/485-1/2891/21122/5712-1795桶p3p2p3p

23、4p5p4p5p6p2p1p0p1p0p6x|yminymax1/knext(c) 边表6算法步骤:算法步骤:(1)初始化:构造边表,初始化:构造边表,AET表置空;表置空;(2)将第一个不空的将第一个不空的ET表中的边与表中的边与AET表合并;表合并;(3)由由AET表中取出交点对进展填充。填充之后删除表中取出交点对进展填充。填充之后删除y=ymax的边;的边;(4)yi+1=yi+1,根据根据xi+1=xi+1/m计算并修正计算并修正AET表,表,同时合并同时合并ET表中表中y=yi+1桶中的边,按次序插入到桶中的边,按次序插入到AET表中,构成新的表中,构成新的AET表;表;(5)AET

24、表不为空那么转表不为空那么转(3),否那么终了。,否那么终了。5.4.2 5.4.2 边缘填充算法边缘填充算法边缘填充算法边缘填充算法算法简单,但对于复杂图型,每一象素能够被访问多次算法简单,但对于复杂图型,每一象素能够被访问多次栅栏填充算法栅栏填充算法栅栏指的是一条过多边形顶点且与扫描线垂直的直线。栅栏指的是一条过多边形顶点且与扫描线垂直的直线。它把多边形分为两半。它把多边形分为两半。边标志算法边标志算法分为两个步骤:分为两个步骤:(1)打标志打标志(2)填充填充当用软件实现本算法时,速度与改良的有效边表算当用软件实现本算法时,速度与改良的有效边表算法相当,但本算法用硬件实现后速度会有很大提

25、法相当,但本算法用硬件实现后速度会有很大提高。高。5.4.3 5.4.3 区域填充区域填充区域是指曾经表示成点阵方式的填充图形,它是像区域是指曾经表示成点阵方式的填充图形,它是像素集合。素集合。4-邻接点和邻接点和8-邻接点邻接点44p44(b)p的8-邻接点8 8 888p88 8(a)p的4-邻接点图5-33 邻接点的定义4-连通区域和连通区域和8-连通区域连通区域把位于给定区域的边境上的象素一一列举出来的方法把位于给定区域的边境上的象素一一列举出来的方法称为边境表示法。称为边境表示法。边境填充算法边境填充算法Boundary-fill Algorithm。枚举出给定区域内一切象素的表示方

26、法称为内点表示。枚举出给定区域内一切象素的表示方法称为内点表示。泛填充算法泛填充算法Flood-fill Algorithm图5-32 区域的边界表示和内点表示(a)以边界表示的4-连通区域(b)以内点表示的4-连通区域(c)以边界表示的8-连通区域(d)以内点表示的8-连通区域1. 边境填充算法算法的输入:种子点坐标(x,y),填充色和边境颜色。栈构造实现4-连通边境填充算法的算法步骤为:种子象素入栈;当栈非空时反复执行如下三步操作:(1)栈顶象素出栈;(2)将出栈象素置成填充色;(3)检查出栈象素的4-邻接点,假设其中某个象素点不是边境色且未置成多边形色,那么把该象素入栈。栈构造实现8-连

27、通边境填充算法的算法步骤为:种子象素入栈;当栈非空时反复执行如下三步操作:(1)栈顶象素出栈;(2)将出栈象素置成填充色;(3)检查出栈象素的8-邻接点,假设其中某个象素点不是边境色且未置成多边形色,那么把该象素入栈。特点:特点:可以用于填充带有内孔的平面区域。可以用于填充带有内孔的平面区域。把太多的象素压入堆栈把太多的象素压入堆栈改良改良经过沿扫描线填充程度象素段,来替代处置经过沿扫描线填充程度象素段,来替代处置4-邻邻接点和接点和8-邻接点。邻接点。沿扫描线填充程度象素段的4-连通边境填充算法步骤:种子象素入栈;当栈非空时作如下三步操作:(1)栈顶象素出栈;(2)填充出栈象素所在扫描行的延

28、续象素段,直到遇到边境象素为止,即每出栈一个象素,就对包含该象素的整个扫描线区间进展填充;(3)在区间中检查与当前扫描线相邻的上下两条扫描线的有关象素能否全为边境象素或已填充的象素,假设存在非边境、未填充边境的象素,那么把每一区间的最右象素取作种子象素入栈。2. 泛填充算法算法的输入:种子点坐标(x,y),填充色和内部点的颜色。算法原理:算法从指定的种子(x,y)开场,用所希望的填充颜色赋给一切当前为给定内部颜色的象素点。8-连通泛填充算法步骤如下:连通泛填充算法步骤如下:种子象素入栈;当栈非空时反复执行如下三步操作:种子象素入栈;当栈非空时反复执行如下三步操作:(1)栈顶象素出栈;栈顶象素出

29、栈;(2)将出栈象素置成填充色;将出栈象素置成填充色;(3)检查出栈象素的检查出栈象素的8-邻接点,假设其中某个象素点邻接点,假设其中某个象素点不是给定内部点的颜色且未置成新的填充色,那不是给定内部点的颜色且未置成新的填充色,那么把该象素入栈。么把该象素入栈。留意:留意:当以边境表示时,当以边境表示时,4-连通边境填充算法只能填充连通边境填充算法只能填充4-连通区域,连通区域,8-连通边境填充算法也只能填充连通边境填充算法也只能填充8-连连通区域。通区域。当以内点表示时,当以内点表示时,8-连通泛填充算法可以填充连通泛填充算法可以填充8-连连通区域也可以填充通区域也可以填充4-连通区域,当然连

30、通区域,当然4-连通泛填连通泛填充算法还是只能填充充算法还是只能填充4-连通区域。连通区域。5.4.4 5.4.4 其他相关的概念其他相关的概念1. 内-外测试不自交的多边形 、自相交的多边形奇-偶规那么Odd-even Rule从恣意位置p作一条射线,假设与该射线相交的多边形边的数目为奇数,那么p是多边形内部点,否那么是外部点。非零环绕数规那么非零环绕数规那么Nonzero Winding Number Rule首先使多边形的边变为矢量。首先使多边形的边变为矢量。将环绕数初始化为零。将环绕数初始化为零。再从恣意位置再从恣意位置p作一条射线。当从作一条射线。当从p点沿射线方向挪动点沿射线方向挪

31、动时,对在每个方向上穿过射线的边计数,每当多边时,对在每个方向上穿过射线的边计数,每当多边形的边从右到左穿过射线时,环绕数加形的边从右到左穿过射线时,环绕数加1,从左到,从左到右时,环绕数减右时,环绕数减1。处置完多边形的一切相关边之后,假设环绕数为非零,处置完多边形的一切相关边之后,假设环绕数为非零,那么那么p为内部点,否那么,为内部点,否那么,p是外部点。是外部点。2. 曲线边境区域的填充相交计算5.5 5.5 字符处置字符处置ASCI码:码:“美国信息交换用规范代码集美国信息交换用规范代码集(American Standard Code for Information Interchan

32、ge),简称,简称ASCI码。码。国际码:国际码:“中华人民共和国国家规范信息交换编码,简中华人民共和国国家规范信息交换编码,简称为国际码,代号称为国际码,代号GB231280。字库:字库中储存了每个字符的图形信息。字库:字库中储存了每个字符的图形信息。矢量字库和点阵字库矢量字库和点阵字库5.5.1 5.5.1 点阵字符点阵字符在点阵表示中,每个字符由一个点阵位图来表示显示时:构成字符的象素图案图5-36 字符A的点阵表示11111111111111111111 1111111111 1 11111111111111111111000000000000000000000000000000000

33、000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000(a)字符A的点阵位图(a)字符A的象素图案5.5.2 5.5.2 矢量字符矢量字符矢量字符采用直线和曲线段来描画字符外形,矢量字符库中记录的是笔划信息。显示时:解释字符的每个笔划信息5.6 5.6 属性处置属性处置当前属性值表当前属性值表5.6.1 5.6.1 线型和线宽线型和线宽1. 线型处置实心段和中间空白段的长度象素数目可用象素模板(pixel mask)指定。存在问题:如

34、何坚持任何方向的划线长度近似地相等处理处理可根据线的斜率来调整实心段和中间空白段的象素数目。可根据线的斜率来调整实心段和中间空白段的象素数目。xy213 4 5 6 7 8 9111234567891011121012a a图5-38 相同数目象素显示的不等长划线b b2. 线刷子和方刷子处置线宽线刷子:垂直刷子、程度刷子图5-39 线刷子(a)(b)特点特点实现简单、效率高。实现简单、效率高。斜线与程度斜线与程度(或垂直或垂直)线不一样粗。线不一样粗。当线宽为偶数个象素时,线的中心将偏移半个象素。当线宽为偶数个象素时,线的中心将偏移半个象素。利用线刷子生成线的始末端总是程度或垂直的,看起来利

35、用线刷子生成线的始末端总是程度或垂直的,看起来不太自然。不太自然。处理:添加处理:添加“线帽线帽line cap图5-40 线“帽子”(a)方帽(c)圆帽(b)突方帽 当比较接近程度的线与比较接近垂直的线集合时,集合处外角将有缺口图5-41 线刷子产生的缺口处理:斜角衔接处理:斜角衔接miter join、圆衔接、圆衔接round join、斜切衔接、斜切衔接bevel join图5-42 线刷子产生的缺口(a)斜角连接(b)圆连接(c)斜切连接方刷子方刷子特点:特点:方刷子绘制的线条斜线比用线刷子所绘制的线方刷子绘制的线条斜线比用线刷子所绘制的线条要粗一些条要粗一些方刷子绘制的斜线与程度或垂

36、直线不一样粗方刷子绘制的斜线与程度或垂直线不一样粗方刷子绘制的线条自然地带有一个方刷子绘制的线条自然地带有一个“方线帽方线帽图5-43 方刷子3. 其它线宽处置方式区域填充改动刷子外形:1 1 1101 11 11 11 000(a)象素模板(b)用该模板进行线宽处理图5-44 利用象素模板进行线宽处理4. 曲线的线型和线宽线型:可采用象素模板的方法图5-45 利用模板110进行圆的线型处理线宽:线宽:线刷子线刷子方刷子方刷子要显示一致的曲线宽度可经过旋转刷子方向以使要显示一致的曲线宽度可经过旋转刷子方向以使其在沿曲线挪动时与斜率方向一致,其在沿曲线挪动时与斜率方向一致,圆弧刷子圆弧刷子采用填

37、充的方法。采用填充的方法。5.6.2 5.6.2 字符的属性字符的属性字体、字形、字号、字间距、行间距等等。字体、字形、字号、字间距、行间距等等。普通字体确定风格,字形确定外观,字号确定尺寸。普通字体确定风格,字形确定外观,字号确定尺寸。字符的常用属性字符的常用属性字符高字宽A底高基线字高顶高字符宽原点图5-46 字符的常用属性及其含义帽线字符串的属性字符串的属性文本高度、文本宽度扩展文本高度、文本宽度扩展/紧缩因子、字符方向、紧缩因子、字符方向、文本途径方向、对齐方式左对齐,中心对齐,或文本途径方向、对齐方式左对齐,中心对齐,或右对齐,指定起始、终止点、文本字体、字符的右对齐,指定起始、终止点、文本字体、字符的颜色属性等。颜色属性等。反绘从右到左、倒绘旋转反绘从右到左、倒绘旋转180、写方式、写方式交换或与方式等。交换或与方式等。5.6.3 5.6.3 区域填充属性区域填充属性区域填充属性选择包括颜色、图案和透明度。0010 10 111(a)图案模板位图(b)用该模板进行填充图5-47 利用图案模板进行三角形的填充模板图案根据图案和透明度属性来填充平面区域的根本思想是:首先用模板定义各种图案。然后,修正填充的扫描转换算法:在确定了区域内一象素

温馨提示

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

评论

0/150

提交评论