北航计算机图形学公选期末考试整理资料

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

裁剪算法 直线段裁剪

1.直线段和窗口的关系

我们所说的窗口是各边平行于坐标轴的矩形。窗口把一个直线段分成窗口内部分和窗口外部分。通常落在窗口内部分是可见的,而落在窗口外部分是不可见的。

裁剪:确定图形中哪些部分落在显示区之内,哪些落在显示区之外,以便只显示落在显示区内的那部分图形。这个选择过程称为裁剪。 裁减的依据是一对简单的不等式:

通常,我们只要验证点的坐标是否满足上述条件即可。然而,如果逐点验证上述不等式,运算效率是非常低的。

直线段和窗口的关系有 (1)直线段在窗口外; (2)直线段完全在窗口内;

(3)直线段与窗口的一条边相交; (4)直线段与窗口的两条边相交;

结论:对于任意一条直线,它要么被完全排斥在窗口之外;要么在窗口内留下一个可见段,并且只能有一个可见段。

⎩⎨

⎧≤≤≤≤t b l l x

y y x x x

3.实现方法

端点在窗口内。

段只有一个

只有一个成立,则直线或如果满足

.22211⎩⎨⎧<<<<⎩⎨

⎧<<<

l t b r l y y y x x x y y y x x x

窗口外。端点在窗口外或直线段两个都不成立,则直线段的和如果满足

.32211⎩⎨⎧<<<<⎩⎨

⎧<<<

l t b r l y y y x x x y y y x x x

()()⎩⎨

⎧≤≤≤≤⎪⎩

⎪⎨

⎧=+-=+-=10来判断是否满足11交点计算

.42121t y y y x

x ty

y t y tx x t x t

b l

代码裁剪法

基本思想:对于每条线段P 1P 2分为三种情况处理: (1)若P 1P 2完全在窗口内,则显示该线段P 1P 2简称“取”之。 (2)若P 1P 2明显在窗口外,则丢弃该线段,简称“弃”之。

(3)若线段不满足“取”或“弃”的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。

为快速判断,采用如下编码方法:

()()直线段在窗口内。

和如果满足

,右上角为

,假设窗口左下角坐标为⎩⎨⎧<<<<⎩⎨

⎧<<<

l t b r l t r b l y y y x x x y y y x x x y x y x 2211.1,,

每个区域赋予4位编码l r b t C C C C

⎩⎨

⎧<=⎩⎨

⎧>=other y y C other

y y C b t 0101min

max

⎩⎨

⎧>=⎩⎨

⎧>=other x x C other

x x C l r 0

10

1min

max

若P 1P 2完全在窗口内code1=0,且code2=0,则“取” 若P 1P 2明显在窗口外code1&code2≠0,则“弃”

在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段

重复上述处理。

中点分割裁剪算法

基本思想:

与前一种Cohen-Sutherland 算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况:

全在、完全不在和线段和窗口有交。对前两种情况,进行一样的处理。 对于第三种情况,用中点分割的方法求出线段与窗口的交点。

求线段与窗口的交点

P0

A 、

B 分别为距P 0、P 1最近的可见点,P m 为P 0P 1中点

从出发找最近可见点的方法

先求出的中点

若不是显然不可见的,并且在窗口中有可见部分,则距最近的可见点一定落在上,所以用代替;

否则取代替

再对新的求中点。重复上述过程,直到长度小于给定的控制常数为止,此时收敛于交点A。

从出发找最近可见点采用上面类似方法。

多边形裁剪

基本思想是一次用窗口的一条边裁剪多边形。

考虑窗口的一条边以及延长线构成的裁剪线

该线把平面分成两个部分:可见一侧;不可见一侧

基本思想是一次用窗口的一条边裁剪多边形。

考虑窗口的一条边以及延长线构成的裁剪线

该线把平面分成两个部分:可见一侧;不可见一侧

可见一

p S

S S

p p

(1)(2)(3)(4)

对于

情况(1)仅输出顶点P;

情况(2)输出0个顶点;

情况(3)输出线段PS与裁剪线的交点I;

情况(4)输出线段PS与裁剪线的交点I和终点P

上述算法仅用一条裁剪边对多边形进行裁剪,得到一个顶点序列,作为下一条裁剪边处理过程的输入。

对于每一条裁剪边,只是判断点在窗口哪一侧以及求线段PS与裁剪边的交点算法应随之改变。

多边形运算

1.多边形的覆盖

1)多边形覆盖情况分析

当两个多边形互相重叠时,就会产生覆盖的效果。覆盖是指一个多边形部分或全部地盖掉

了下面的另一个多边形

对于多边形的覆盖,特别是凹多边形,由于情况比较复杂,画图的步骤一般是:

①利用“重叠性检验”,排除不会发生覆盖的多边形。

②逐条求出被覆盖多边形的边和覆盖多边形轮廓边的交点。

③对交点进行排序。

④利用“包含性检验”,区分出被覆盖段和未覆盖段。

⑤绘图输出未覆盖线段。

2.多边形的布尔运算

1)布尔运算的概念

多边形的布尔运算指的是:在两个多边形之间进行并、交、差的运算。

2)多边形的描述

任何一个多边形均是由顶点和边组成的。所以可以把多边形的数据结构组成两张数据表:顶点表和边表。

通常,在实际的布尔运算处理中,为了方便把多边形的边表改为环表。环表是由组成多边形的顶点按照一定的顺序连接而成。

在环表中,每相邻两个顶点组成一条有向线段,它的方向与环的方向相同。

3)布尔运算的规则

在两个多边形有相互重叠的部分时,两个多边形可以进行布尔运算。当两个多边形相互重叠时,表示两个多边形的两个环相交,其交点将有向直线段分为两部分:环内部分和环外部分,分别表示处于另一个环的内部或外部。

交点分为出点和入点两种:当一个环的有向线段经过交点进入另一环,则该交点称为入点;反之,如果是走出另一环,则该交点称为出点。

在进行布尔运算时,搜索新环的路径应该从交点处开始。其运算规则如下:

(1)并运算顺着环的方向搜索,当遇到的交点为入点时,则从该点在另一环上的对应点转入另一环,然后沿另一环的方向搜索;当遇到的交点为出点时,则继续顺着本环进行。

(2)交运算顺着环的方向搜索,当遇到的交点为出点时,则从该点在另一环上的对应点转入另一环,然后沿另一环的方向搜索;当遇到的交点为入点时,则继续顺着本环进行。

(3)差运算进行差运算时,首先要将差环的原方向倒转过来,然后按照与并运算相同的规则进行处理。

相关文档
最新文档