图形及文字处理实验.docx
《图形及文字处理实验.docx》由会员分享,可在线阅读,更多相关《图形及文字处理实验.docx(18页珍藏版)》请在冰豆网上搜索。
图形及文字处理实验
[键入文档标题]
[键入文档副标题]
[键入公司名称]
[键入作者姓名]
2011-11-24
利用CorelDraw软件实现图形变换
一、实验名称:
利用CorelDrawX3软件实现和验证计算机图形学的各种图形变换。
二、实验目的和要求:
本设计性实验专为印刷工程专业的《图形与文字处理》课程设计。
熟悉CorelDrawX3图形编辑软件,编辑直线、曲线、圆、矩形和多边形等各种基本图元。
通过本实验教学环节,可以使学生对图元的编辑、图元属性控制参数的修改、图形的几何变换、图形的裁剪有进一步的了解。
实验的基本要求是:
能够使用CorelDrawX3完成上述基本图元的生成,通过修改图元的属性控制参数理解图元的显示变化,理解图形的基本几何变换(移动、旋转、变比),图形与图形之间的各种裁剪操作。
三、实验基本内容:
1.熟悉CorelDrawX3图形编辑软件;
2.在A4页面上,编辑直线、曲线、圆、矩形和多边形等各种基本图元,并赋予属性控制参数;
3.修改上述图元的属性控制参数;
4.分别对上述图元执行移动、旋转、变比操作;
5.输入矩形、圆形作为裁剪多边形,分别对上述图元进行裁剪,理解CorelDrawX3里不同的裁剪方法。
四、实验设备及环境:
1.计算机;
2.CorelDrawX3。
五、实验原理:
1、CorelDrawX3:
使用CorelDrawX3完成图形的输入、修改属性控制参数;
2、图形基本变换:
图形学基本概念。
3、图形裁剪
图形学基本概念。
六、实验具体要求:
1.利用CoreDRAW进行图形编辑:
2.输入直线、曲线、圆、矩形、多边形、文本等各种基本图元,并进行有机组合形成有意义的整体:
1)首先绘制一个矩形:
2)进行渐变填充:
3)选择多边形工具组,并选择星形工具,设置其边数,填充为白色:
4)利用椭圆工具,绘制2个椭圆,填充色也为白色,并将它们合并在一起;
并绘制一个矩形于2圆上面,利用排列/修剪得到:
5)利用贝塞尔曲线绘制一段曲线,并用手绘工具将该曲线闭合,填充图案:
6)在“山”周围绘制矩形,并选择——效果/图框精确裁剪/放置容器内:
7)利用贝塞尔曲线绘制直线,并复制多条,进行缩短、旋转操作:
8)最后,用文字工具,为图形添加文字,并用艺术笔做适当修饰,移动到适当的位置:
3.各种图形现象背后的图形学原理:
直线:
计算机图形学中,直线是由逼近理想直线段的离散像素点组成的,通常有2种算法:
1、数值微分法(DDA):
DDA算法是使点的X,Y坐标都以很小的步长增长,每次的增量DX,DY与X、Y的一阶导数成正比.设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得
=m=直线的斜率
可通过计算由x方向的增量△x引起y的改变来生成直线:
xi+1=xi+△x------------------------------------------------------------------------
(1)
yi+1=yi+△y=yi+△x·m------------------------------------------------------------
(2)
也可通过计算由y方向的增量△y引起x的改变来生成直线:
yi+1=yi+△y-------------------------------------------------------------------------(3)
yi+1=yi+△y-------------------------------------------------------------------------(4)
如下所示:
选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的增量为一个象素单位(△x=1),然后利用=m计算另一个方向的增量(△y=△x·m=m)。
通过递推公式1至4,把每次计算出的(xi+1,yi+1)经取整后送到显示器输出,则得到扫描转换后的直线。
之所以取x2-x1和y2-y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。
另外,算法实现中还应注意直线的生成方向,以决定Δx及Δy是取正值还是负值。
2、Bresenham算法:
它也是采用递推步进的办法,令每次最大变化方向的坐标步进一个象素,同时另一个方向的坐标依据误差判别式的符号来决定是否也要步进一个象素。
从DDA直线算法可知这些条件成立时有:
xi+1=xi+1
yi+1=yi+m
由于显示直线的象素点只能取整数值坐标,可以假设直线上第i个象素点坐标为(xi,yi),它是直线上点(xi,yi)的最佳近似,并且xi=xi(假设m<1),如下图所示。
那么,直线上下一个象素点的可能位置是(xi+1,yi)或(xi+1,yi+1)。
由图中可以知道,在x=xi+1处,直线上点的y值是y=m(xi+1)+b,该点离象素点(xi+1,yi)和象素点(xi+1,yi+1)的距离分别是d1和d2:
d1=y-yi=m(xi+1)+b-yi
(2-8)
d2=(yi+1)-y=(yi+1)-m(xi+1)-b
(2-9)
这两个距离差是
d1-d2=2m(xi+1)-2yi+2b-1
(2-10)
分析公式(2-10):
(1)当此值为正时,d1>d2,说明直线上理论点离(xi+1,yi+1)象素较近,下一个象素点应取(xi+1,yi+1)。
(2)当此值为负时,d1(3)当此值为零时,说明直线上理论点离上、下两个象素点的距离相等,取哪个点都行,假设算法规定这种情况下取(xi+1,yi+1)作为下一个象素点。
因此只要利用(d1-d2)的符号就可以决定下一个象素点的选择。
为此,进一步定义一个新的判别式:
pi=△x×(d1-d2)=2△y·xi-2△x·yi+c
(2-11)
式(2-11)中的△x=(x2-x1)>0,因此pi与(d1-d2)有相同的符号;
这里△y=y2-y1,m=△y/△x;c=2△y+△x(2b-1)。
下面对式(2-11)作进一步处理,以便得出误差判别递推公式并消除常数c。
将式(2-11)中的下标i改写成i+1,得到:
pi+1=2△y·xi+1-2△x·yi+1+c
(2-12)
将式(2-12)减去(2-11),并利用xi+1=xi+1,可得:
pi+1=pi+2△y-2△x·(yi+1-yi)
(2-13)
再假设直线的初始端点恰好是其象素点的坐标,即满足:
y1=mx1+b
(2-14)
由式(2-11)和式(2-14)得到p1的初始值:
p1=2△y-△x
(2-15)
这样,我们可利用误差判别变量,得到如下算法表示:
初始p1=2△y-△x
(2-16)
当pi≥0时:
yi+1=yi+1,
xi+1=xi+1,
pi+1=pi+2(△y-△x)
否则:
yi+1=yi,
xi+1=xi+1,
pi+1=pi+2△y
圆生成:
中点画圆算法在一个方向上取单位间隔,在另一个方向的取值由两种可能取值的中点离圆的远近而定。
实际处理中,用决策变量的符号来确定象素点的选择。
设要显示圆的圆心在原点(0,0),半径为R,起点在(0,R)处,终点在(
,
)处,顺时针生成八分之一圆,利用对称性扫描转换全部圆。
为了应用中点画圆法,我们定义一个圆函数
F(x,y)=x2+y2-R2
(2-19)
任何点(x,y)的相对位置可由圆函数的符号来检测:
F(x,y)
<0 点(x,y)位于数学圆内
=0 点(x,y)位于数学圆上
>0 点(x,y)位于数学圆外
(2-20)
如下图所示,图中有两条圆弧A和B,假定当前取点为Pi(xi,yi),如果顺时针生成圆,那么下一点只能取正右方的点E(xi+1,yi)或右下方的点SE(xi+1,yi-1)两者之一。
中点画线算法
假设M是E和SE的中点,即,则:
1、当F(M)<0时,M在圆内(圆弧A),这说明点E距离圆更近,应取点E作为下一象素点;
2、当F(M)>0时,M在圆外(圆弧B),表明SE点离圆更近,应取SE点;
3、当F(M)=0时,在E点与SE点之中随便取一个即可,我们约定取SE点。
区域填充:
区域填充就是在一个闭合区域内填充某种颜色或图案。
区域填充一般分两类:
多边形填充和种子填充。
一、多边形填充
条件:
多边形的顶点序列(Pi,i=0,1,…,n)、填充色。
多边形内点判断:
对多边形进行填充,关键是找出多边形内的象素。
方法是从测试点引出一条伸向无穷远处的射线(假设是水平向右的射线),因为多边形是闭合的,若射线与多边形边界的交点个数为奇数时,则该点为内点,反之,交点个数为偶数时,则该点为外点。
奇异点:
上述的判别准则,在大多数情况下是正确的,但当水平扫描线正好通过多边形顶点时,需注意。
例如,图中过顶点的射线1、射线6,它们与多边形的交点个数为奇数,按照判别准则它们应该是内点,但实际上却是外点。
综合以上情况,我们将多边形的顶点分为两大类:
(1)局部极值点:
如图中的点P1、P2、P4和P6。
对于这些点来说,进入该点的边线和离开该点的边线位于过该点扫描线的同一侧。
(2)非极值点:
如图中的点P3、P5。
对于这些点来说,进入该点的边线和离开该点的边线位于过该点扫描线的两侧。
处理奇异点规则:
(1)对于局部极值点,应看成两个点;
(2)对于非极值点,应看成一个点。
二、种子填充:
种子填充是将区域内的一点(种子)赋予给定的颜色,然后将这种颜色扩展到整个区域内的过程。
条件:
区域内一点的坐标即种子坐标、边界色、填充色。
连通方式:
区域是互相连通着的象素的集合,连通方式可分为四连通和八连通。
四连通:
从区域内一点出发,可通过四个方向:
上、下、左、右到达该区域内部的任意象素。
八连通:
区域内部从一个象素到达另一个象素的移动路径,除了上、下、左、右四个方向外,还允许沿着对角线方向。
注意事项:
(1)八连通区域中,既然区域内的两个象素可以通过对角线相通,那么,区域边界上的象素则不能通过对角线相连,否则填充就会溢出到区域外,因此,八连通区域的边界线必须是四连通的,见下图(a);
(2)而四连通区域,其边界象素是四连通和八连通的都可以,见下图(b)。
(a)八连通区域四连通边界(b)四连通区域八连通(或四连通)边界
字符生成:
点阵字符:
字符的点阵表示中,每个字符由一个位图(字符掩模)来表示,对于西文字符的掩模矩阵一般不小于5×7,而定义汉字的掩模矩阵一般不小于16×16。
一个字符的点阵数越多,字符越清晰、美观。
从给定的字符编码到在屏幕上将它显示出来要经历两个步骤:
1.从字库中将它的位置找到。
2.将该位置上的位图读到二维数组中进行显示,如下图:
矢量字符:
矢量字符由于其占空间少、美观、变换方便等优点得到越来越广泛的应用,,它几乎完全取代了传统的点阵字符。
在字符的矢量表示方法中,保存的是字符的笔画信息而不是整个位图
点阵字符的表示是位图,点阵字符的变换是图像变换,当将点阵字符旋转或者放大时,会发现显示结果粗糙而难看;而用来表示矢量字符的是端点坐标,对矢量字符的变换就是对这些端点进行变换,是图形的几何变换,它可以对矢量字符进行任意变换而不影响显示结果。
矢量字符的显示也是分为两个步骤:
1、根据给定的字符编码,在字库中检索出该字符的数据,由于各个字符的笔画不一样多,端点也就不一样多,造成存储各个字符的字节数不相同,给检索带来一定的麻烦。
为了提高检索效率,可以改善字符的存储结构。
2、取出端点坐标,对其进行适当的几何变换,再根据各端点是否连线的标志显示出字符。
多边形裁剪:
首先输入任意一个多边形S和待裁剪线段L,然后进行以下操作.
1)先判断L是否完全在多边形窗口外,若是,L为完全不可见线段,与多边形无交点,舍弃;否则,继续.
2)建立参考坐标系,计算多边形各顶点在坐标系XOY中的坐标值,及线段L的两端点在该坐标系中的纵坐标值.
3)判断多边形各边是否为无效线段,若是,舍弃;否则继续判断多边形各边是否与被裁剪线段共边,若是,记录端点并计入数组,否则,继续.
4)计算交点,若为有效交点,写入相应数组;否则,舍弃.
5)判断进、出点,确定可见线段部分.
6)将各裁剪线段端点变换回原坐标系XOY中.
举例分析:
如左图:
给定的凹多边形及带裁线段;
执行上述算法后,裁剪后的图如图2.
图2
七、实验总结:
通过本次实验,首先我对CoreDraw软件的使用有所了解,并对该软件的操作、页面信息更熟悉。
其次,经论述图形生成背后的图形学原理,使我对图形学知识掌握得更加牢靠,对图形生成算法也更加熟练。
感谢老师!
学生成绩:
教师评语:
2011-11-24