中国地质大学北京《计算机图形学新》期末考试拓展学习七.docx
《中国地质大学北京《计算机图形学新》期末考试拓展学习七.docx》由会员分享,可在线阅读,更多相关《中国地质大学北京《计算机图形学新》期末考试拓展学习七.docx(13页珍藏版)》请在冰豆网上搜索。
中国地质大学北京《计算机图形学新》期末考试拓展学习七
地大《计算机图形学(新)》(七)
第五章图形处理算法
(二)
1、相关基本概念
用户域:
程序员用来定义草图的自然空间。
人们所要描述的图形均在WD中定义。
用户域是一个实数域。
屏幕域:
设备输出图形的最大区域,是有限度整数域
窗口:
显示的大幅图形中(世界坐标系中)的一个矩形区域
开窗:
操作者指定要显示的图形范围的过程叫开窗
视区:
屏幕上显示图形的一个特定矩形区域
在交互图形系统中屏幕通常分成若干区域分别作不同应用。
视见变换:
将窗口内的图形显示在视区内,经过的几何变换过程。
2、计算机图形学中常用的坐标系有哪几种?
请分别作简要介绍。
1)世界坐标系(wc):
操作者定义实际图纸或三维立体的坐标系称作世界坐标系,取值范围是整个实数域。
2)规格化设备坐标系(ndc):
用来定义规格化视区的坐标系(单位面积,与具体设备无关)。
取值范围在(0,1)之间。
一般用来存放图形数据的中间结果,供不同设备共享。
3)设备坐标系(dc):
在用户实际使用的设备上定义视区的坐标系。
各图形设备有各自的设备坐标,取值范围是有限度整数域。
3、视见变换的定义及关键技术。
问题的提出:
将世界坐标系中的窗口内的图形显示在视区内,必须经过一定的几何变换过程。
这一变换过程称为视见变换。
关键:
保证点的相对位置不发生变化。
窗口中任意一点到左边界的距离与X方向的边界长度之比与视区中的对应一点到左边界的距离与X方向的边界长度之比应该相等。
实际的窗口区与视图区往往不一样大小,要在视图区正确地显示形体的,必须将其从窗口区变换到视图区。
4、视见变换过程有哪几种?
1)平移变换
将窗口及其中图形一起平移,使窗口左下角与世界坐标系原点重合。
2)比例变换
将窗口及其中图形一起进行比例变换,使其结果与视区的形状、大小完全一致,形成窗口与视区的对应关系
3)平移变换
通过比例变换,在屏幕坐标系的原点形成与世界坐标系中窗口对应的视区,此时再通过一次平移变换将视区平移到屏幕坐标系中指定的视区位置。
5、二维裁剪的定义和基本任务?
裁剪就是裁去窗口之外的图形部分的一种操作。
即不显示位于窗口之外的图形部分,只显示位于窗口内的图形部分。
通常是用一个二维矩形区域去裁剪图形。
基本任务:
判断哪些图形元素在窗口内,哪些在窗口外,分界线在哪里。
6、点的剪取的基本过程和缺点?
不满足上式的点即为不可见点。
缺陷:
计算时间长,效率低;剪取出来的点列不再保持原来画线的序列。
7、二维直线段的剪取—矢量剪取法
设下图中的区域0为窗口,线段不在窗口内则:
线段在窗口内的检测:
若线段两端点坐标都在区域0内,则线段完全在窗口内。
其他:
部分在窗口内,部分在窗口外,完全不在窗口内
线段落在窗口内的始点坐标的确定:
1)若始点坐标就落在区域0内,则始点在窗口内。
2)若不满足1)则有三种可能:
A:
落在3,4,5区;B:
落在6,7,8区;C:
落在1,2区。
A)落在3,4,5区
(1)求线段与下边界的交点;
(2)求线段与左边界的交点;
(3)求线段与上边界的交点;
B)落在6,7,8区
(1)求线段与下边界的交点;
(2)求线段与右边界的交点;
(3)求线段与上边界的交点;
C)落在1,2区
(1)求线段与下边界的交点;
(2)求线段与上边界的交点;
线段落在窗口内的终始点坐标的确定:
同始点。
8、矢量剪取法—区域编码法
1)点的位置描述
用四位二进制编码描述点的位置,四位编码分别代表点的位置和窗口边界的上、下、左、右关系。
第一位--表示点在窗口的上方,在为1否则为0;
第二位--表示点在窗口的下方,在为1否则为0;
第三位--表示点在窗口的右方,在为1否则为0;
第四位--表示点在窗口的左方,在为1否则为0;
若点在窗口内,则四位编码为0000
2)剪裁判断用规则判断每条线段是否可见,是否需要裁减。
(1)两端点编码均为0000,则该线段可见。
(2)两端点编码不全为0000,则将两端点编码逻辑相与,观察结果,若
a)结果不为0000,则该线段不可见。
b)结果为0000,则为不确定线段,可能有一部分可见或完全不可见。
3)求交运算
若判断线段为不确定线段,则要进一步判断该线段与窗口的交点。
逐一计算线段与四个边界的交点,在比较该交点是否在窗口范围内,若不在范围内,即可以确定该线段为不可见线段,否则有部分可见。
9、矢量剪取法—中心分割法
它适合硬件实现。
基本思想:
对线段不断地进行对分,并排除在区域外的部分,找出线段落在窗口内的部分。
方法:
通过求出离线段的一个端点最近且在区域内的点的方法,来确定线段落在窗口内的一个端点。
区分完全不可见与完全可见(S-C法)
对每个端点,对直线AB,求离A点最远的可见点算法步骤
(1)检测B点是否在区域内。
在则B点即可,否则进行
(2)
(2)判断A,B是否在窗口同侧外面。
是则线段不在窗口内,结束,否则进行(3)
(3)求出AB中点P
(4)判断P是否在窗口内
a)在,则P点代替B点,返回(3)
b)否则,判断P,B是否在窗口同侧的外面,是则用P代替B返回(3),否则用P代替A返回(3)
10、矢量剪取法—梁友栋-Barskey算法
梁友栋和Barskey提出了更快的参数化裁剪算法。
首先按参数化形式写出裁剪条件:
这四个不等式可以表示为形式:
upk≤qk
其中,参数pk,qk定义为:
任何平行于裁剪边界之一的直线pk=0,其中k对应于裁剪边界(k=1,2,3,4对应于左、右、下、上边界)如果还满足qk<0,则线段完全在边界外,舍弃该线段。
如果qk≥0,则该线段平行于裁剪边界并且在窗口内。
当pk<0,线段从裁剪边界延长线的外部延伸到内部。
当pk>0,线段从裁剪边界延长线的内部延伸到外部。
当pk≠0,可以计算出线段与边界k的延长线的交点的u值:
u=qk/pk。
对于每条直线,可以计算出参数u1和u2,它们定义了在裁剪矩形内的线段部分。
u1的值由线段从外到内遇到的矩形边界所决定(p<0)。
对这些边界计算rk=qk/pk。
u1取0和各个rk值之中的最大值。
u2的值由线段从内到外遇到的矩形边界所决定(p>0)。
对这些边界计算rk=qk/pk。
u2取1和各个rk值之中的最小值。
如果u1>u2,则线段完全落在裁剪窗口之外,被舍弃。
否则裁剪线段由参数u的两个值u1,u2计算出来。
11、多边形的表示方法有哪些种类?
在计算机图形学中,多边形有两种重要的表示方法:
顶点表示和点阵表示。
顶点表示:
用多边形顶点的序列来刻画多边形,直观、几何意义强、占内存少。
点阵表示:
用多边形内的像素的集合来刻画多边形,失去视区了许多重要的几何信息,但便于运用帧缓冲存储器表示图形。
12、扫描交点的奇偶数判别法(逐点判断算法)简介。
实现多边形的扫描转换最简单的方法是逐点判断。
即逐个像素判别确定它们是否在多边形内,从而给出位于多边形内的点的集合。
一般采用累计交点的算法。
若从一点出发作一条射线,如其与多边形边界的交点个数为奇数则位于多边形内,否则在多边形外。
特点:
程序简单,但速度慢,割断了像素间的联系。
开发和利用相邻像素间的连贯性是光栅图形算法研究的重要内容。
特点:
充分利用相邻像素间的连贯性,避免对像素的逐点判断和反复求交的运算,达到了减少计算量和提高速度的目的。
实用的多边形扫描转换算法:
扫描线算法、种子算法。
13、扫描线、边、区域的连贯性
扫描线的连贯性:
1.交点数为偶数;2.扫描线只有第1,2个交点,第3,4个交点,第5,6个交点……之间的部分在多边形内。
这是多边形区域连贯性在一条扫描线上的反映。
边的连贯性:
设位于扫描线y=e上的交点序列为Xei1,Xei2…,位于扫描线y=d上的交点序列为Xdj1,Xdj2…
若多边形的某个边与y=e,y=d都相交,特别是当存在某个整数k,0<=k<=n-1,使得yik>e,d>yik+1,则
1)两序列的个数相等
2)点(Xeir,e)和(Xdjr,d)位于多边形的同一边上,于是Xeir=Xdjr+1/mjr,mjr为边的斜率。
区域的连贯性:
14、扫描线与多边形的边把扫描线间的矩形分成了若干个梯形区域,哪些性质?
1)梯形的底边在扫描线上,腰在多边形P的边上或在屏幕的边界上。
2)梯形分为两类:
一类是位于多边形内部,一类在多边形外部。
3)两类多边形在矩形区域内相间的排列。
15、对于一条扫描线,多边形的扫描转换过程及存在问题?
(1)求交:
计算扫描线与多边形各边的交点;
(2)排序:
把所有交点按x值递增顺序排序;
(3)配对:
第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间,
(4)着色:
把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。
两个问题:
(1)奇点处理。
当扫描线恰与多边形顶点相交时,称该交点为奇点。
(2)多边形边界上像素的取舍问题。
16、一个多边形与若干扫描线示意图
一个多边形与若干扫描线
17、活性边表的定义
为了提高效率,在处理一条扫描线时,仅对与它相交的多边形的边进行求交运算。
我们把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中,称此链表为活性边表(AET)。
18、边填充算法的基本实现
按任意顺序处理多边形的每条边。
在处理每一条边时,首先求出该边与扫描线的交点,然后将每一条扫描线上交点右方的所有像素取补。
19、种子填充算法简介
原理:
假设在多边形区域内部有一象素已知,由此出发找到区域内的所有象素,并对其进行填充。
区域采用边界定义:
区域边界上的所有象素均具有某个特定值,区域内部所有象素均不取这一特定值,而边界外的象素则可具有与边界相同的值。
区域可分为四向连通和八向连通两种:
四向连通区域是指从区域上一点出发,可以通过四方向,即上、下、左、右移动组合,在不越出区域的前提下,达到区域内的任意象素。
八向连通区域是指从区域上一点出发,可以通过四方向,即上、下、左、右、左上、左下、右上、右下这八个方向移动组合,在不越出区域的前提下,达到区域内的任意象素。
20、从当前检测象素到相邻象素的处理方法有哪些?
1)四向算法:
允许从四个方向搜索下一个象素者
2)八向算法:
允许从八个方向搜索下一个象素者
21、简单的种子填充算法的实现及存在问题
用栈结构实现的简单的种子填充算法:
种子象素入栈;当栈非空时重复执行下面三步操作:
1)栈顶象素出栈
2)将出栈象素置成填充色
3)按左、上、右、下顺序检测与出栈象素相邻的四个象素,若其中某个象素在区域内且未置成填充色,则把该象素入栈。
存在问题:
太多象素压入堆栈,有的象素入栈多次,降低了算法的效率,要求很大存储空间以实现栈结构。
解决方法:
在任意一个扫描线与多边形的扫描区间中,只取一个种子象素。
22、扫描线填充算法的算法原理
种子象素入栈:
当栈非空时重复执行下面四步操作:
1)栈顶象素出栈;
2)沿扫描线对出栈象素的左右象素进行填充,直至遇到边界象素为止,即每出栈一个象素,就对包含该象素的整个扫描区间进行填充;
3)上述区间内最左、最右的象素分别记为x1,xr;
4)在区间[x1,xr]中检测与当前扫描线相邻的上下两条扫描线的有关象素是否全为边界象素或已填充的象素,若存在非边界、未填充的象素,则把每一区间的一个象素作为种子象素入栈。
23、扫描线算法与种子填充算法的比较
1)基本思想不同
扫描线算法是按扫描线顺序进行的。
而种子填充算法要求先指定区域内的一点为种子点,然后从这点出发开始对区域进行着色。
2)对边界要求不同
在多边形扫描转换中,要求每一条扫描线与多边形边界的交点为偶数,对不封闭边界是允许的。