第 3 章 二维观察变换与裁剪

23
第3第 第第第第第第第第第 3.1 第第—第第第第 3.2 第第第第第 3.3 第第第第第第

Upload: jessica-welch

Post on 03-Jan-2016

129 views

Category:

Documents


0 download

DESCRIPTION

第 3 章 二维观察变换与裁剪. 3.1 窗口 — 视区变换 3.2 工作站变换 3.3 二维裁剪算法. 规范化变换 / 窗口 - 视区变换. 工作站变换. 二维变换. 二维裁剪. 图形显示. 观察变换. 二维图形输出流水线. 3.1 窗口 — 视区变换. 3.1.1 基本概念. 1. 用户域和窗口(对用户坐标系而言). . 窗口. . 世界(用户)坐标系. 用户域 是用户定义设计对象的连续无限的二维或三维空间。 窗口 在用户域中指定的一个区域,用户只能将该区域的图形输出到图形设备上。 窗口是用户域的一个子域。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 3 章     二维观察变换与裁剪

第 3章 二维观察变换与裁剪

3.1 窗口—视区变换

3.2 工作站变换

3.3 二维裁剪算法

Page 2: 第 3 章     二维观察变换与裁剪

二维图形输出流水线

从应用程序得到图形的用户坐标

对窗口区进行裁剪

窗口区到视图区的规格化变换

视图区从规格化坐标系到设备坐标系的变换

在图形设备上输出图形

二维变换 二维裁剪

规范化变换 /

窗口 - 视区变换

工作站变换

观察变换图形显示

Page 3: 第 3 章     二维观察变换与裁剪

3.1 窗口—视区变换

3.1.1 基本概念

1. 用户域和窗口(对用户坐标系而言)

世界(用户)坐标系

窗口

Page 4: 第 3 章     二维观察变换与裁剪

用户域

是用户定义设计对象的连续无限的二维或三维空间。窗口

在用户域中指定的一个区域,用户只能将该区域的图形输出到图形设备上。窗口是用户域的一个子域。窗口一般是矩形区域,可用其左下角点和右上角点坐标来表示。通常窗口的边界与坐标轴平行。窗口可以嵌套。

Page 5: 第 3 章     二维观察变换与裁剪

2. 规范化设备坐标系

1

1

0

视区viewport

规范化设备坐标系•规范化设备坐标系:用一个单位正方形定义的一个虚拟显示设备的显示区域,且单位正方形的左下角位于坐标系统的原点。•目的与作用:引入一个与显示设备无关的工具描述显示区域。使应用程序与图形设备无关,增强应用程序的可移植性。

Page 6: 第 3 章     二维观察变换与裁剪

3.1.2 窗口 - 视区变换

minmax

min

minmax

min

vxvx

vxvx

wxwx

wxwx

minmax

min

minmax

min

vyvy

vyvy

wywy

wywy

窗口maxwy

minwy

minwx maxwx

( wx,wy) 1

1

00

视区maxvy

minvy

minvx maxvx

( vx,vy)

Page 7: 第 3 章     二维观察变换与裁剪

minmin

minmax

minmax

minmin

minmax

minmax

vywywywywy

vyvyvy

vxwxwxwxwx

vxvxvx

矩阵表达式: Nwywxvyvx 1,,1,,

1

010

001

100

00

00

1

010

001

minmin

minmax

minmax

minmax

minmax

minmin

vyvx

wywy

vyvywxwx

vxvx

wywx

N

Page 8: 第 3 章     二维观察变换与裁剪

3.2 工作站变换

H

V

0

工作站视区Workstation viewport

设备 / 图像坐标系

工作站变换:将规范化坐标变换为离散设备 / 图像坐标。它本质上是第二个窗口 - 视区变换。

1

1

0

工作站窗口

规范化设备坐标系

屏幕区

注 : 工作站窗口可以是这个视区 , 也可以是其一部分 .

Page 9: 第 3 章     二维观察变换与裁剪

1 主菜单区2

子菜单区

4 提示信息区

3 图形显示区

视图分区

Page 10: 第 3 章     二维观察变换与裁剪

•设备坐标系 (DC)•图形输出设备 ( 如显示器、绘图机 ) 上的坐标系•是一个二维平面坐标系•定义域是整数域且有界

Page 11: 第 3 章     二维观察变换与裁剪

屏幕域和视图区•屏幕域

屏幕域是图形设备上输出图形的最大区域屏幕域是有限的整数域,如分辨率为 1024×768的显示器,其屏幕域 DC 可定义为: DC [0 1023]×[0 767]∈ ∶ ∶

•视图区用户在屏幕域内指定的用于显示图形的区域用设备坐标定义,一般定义成矩形,由其左下角点和右上角点坐标来定义一个屏幕可以定义多个视图区,并且视图区可以嵌套

Page 12: 第 3 章     二维观察变换与裁剪

3.3 二维裁剪算法

一般地,对于给定的区域,判断图形的哪些部分在该区域内或区域外的过程称为裁剪算法。相应的参考区域称为窗口。

裁剪技术的本质问题是对线段或多边形作求交与裁剪,仅保留需要的部分。

按照裁剪对象的不同,裁剪算法分为:点裁剪线裁剪(直线段)区域裁剪(多边形)曲线裁剪文本裁剪

Page 13: 第 3 章     二维观察变换与裁剪

假设裁剪窗口 是一个矩形,其边界平行于坐标轴。

maxminmaxmin ,,, ywywxwxw

1. 点裁剪 对于点 P(x,y), 若下面的不等式成立,则 P 显示。

maxmin xwxxw

maxmin ywyyw

否则, P 被裁剪掉。

应用 : 由粒子 ( 点 ) 造型的场景,如爆炸、海上的泡沫等。

Page 14: 第 3 章     二维观察变换与裁剪

2. 直线段裁剪P9

P7’

P3

P4

P5

P1

P2

P6

P7

P8

P10

P1’

P2’

P6’ P8’P5’

裁剪前

裁剪后

Page 15: 第 3 章     二维观察变换与裁剪

线段裁剪的基本过程:

首先,对于给定的线段,判定它是否完全在裁剪窗口内;如果不是,判定它是否完全在裁剪窗口外。最后,如果我们不能判定一个线段完全在裁剪窗口内或外,则必须与一个或多个窗口边界求交。

具体方法:对线段的端点进行“内 - 外”测试。

( 1 )若线段的两个端点都在窗口内,则保留线段;

( 2 )若线段的两个端点都在窗口任一边界的外侧,则舍弃线段;

( 3 )所有穿过一个和多个窗口边界的线段需进行求交运算。以找出该线段落在窗口区内或窗口边界上的起始点和终止点的坐标。

Page 16: 第 3 章     二维观察变换与裁剪

编码裁剪法( (Cohen-Sutherland 算法 ):

第一步,区域编码 延长窗口边界,将平面分成 9 个区域,每个区域用 4 位二进制 代码表示,称为区域码。其作用是识别点相对于裁剪窗口边界的位置。

1000

0000

1001 1010

0001 0010

0101 0100 0110

约定 4 位码中最右边一位为第 1 位,则编码规则如下:

left right

below

above

Page 17: 第 3 章     二维观察变换与裁剪

第二步 ,建立线段端点的区域编码。

设 (x,y) 是线段端点的坐标,则第 1 位取minxwx

的符号位。第 2 位取 xxw max 的符号位。 第 3 位取

minywy 的符号位。第 4 位取 yyw max 的符号位。

第三步,判断线段与窗口间的位置关系。 ( 1 )若线段两端点的编码均为“ 0000”, 则线段全部位于窗口内。

( 2 )若线段两端点编码的逻辑“与”不是 0000 ,则线段必位于窗口外。

Page 18: 第 3 章     二维观察变换与裁剪

( 3 )若根据( 1 )、( 2 )不能直接判定线段在窗口内或窗口外,我们需要计算线段与窗口边界的交。由下图可知,这些线段可能穿入窗口的内部,也可能不穿过窗口的内部。

P1

P1’

P3

P4

P2

P2’

P3’

这类线段的处理过程:

将线段的位于窗口外端点与窗口边界进行比较,以确定线段的多大部分被舍弃。对剩余的部分线段继续按( 1 )、( 2 )和( 3 )进行处理。直到线段完全在窗口内或完全在窗口外为止。

Page 19: 第 3 章     二维观察变换与裁剪

具体操作:

( 1 )可以按照 left,right, bottom, top 的顺序检查线段端点与窗口边界之间的关系。

现通过例子对该算法进行说明。考虑线段 P1P2 的端点 P1,依次检查 P1 与窗口的左、右和下边界间的位置关系,发现 P1 点在裁剪窗口的下面。于是求出该线段与窗口底边界的交点 P1’ 。这时,线段变为 P1’P2 。由于 P2 在裁剪窗口之外,通过检查该端点与窗口边界的关系发现,它在窗口的左侧。可以计算出线段 P1’P2 与窗口左边界的交点为 P2’ ,该点位于窗口的上部,因此最后的交点为 P2’’ 。线段 P1’P2’’保留。

P1

P1’

P3

P4

P2

P2’

P3’

P2’’

Page 20: 第 3 章     二维观察变换与裁剪

11 xxmyy

minxwx maxxwx

1212 / xxyym

m

yyxx 1

1

minywy maxywy

类似地,线段与水平边界交点的 x 坐标为:

其中,

( 2 ) 线段与边界的求交算法

一般地,由 (x1, y1) 到 (x2,y2) 的截距式表示可求出该线段与垂直边界交点的 y 坐标为:

Page 21: 第 3 章     二维观察变换与裁剪

回顾二维图形输出流水线 :

从应用程序得到图形的用户坐标

对窗口区进行裁剪

窗口区到视图区的规格化变换

视图区从规格化坐标系到设备坐标系的变换

在图形设备上输出图形

二维变换 二维裁剪

规范化变换 /

窗口 - 视区变换

工作站变换

观察变换图形显示

Page 22: 第 3 章     二维观察变换与裁剪

习题 3

3-1 (a) 求出物体绕坐标原点旋转 30度的变换矩阵 ;

(b) 求出点 P(2,4) 在上述旋转变换后新的坐标值。

3-2 写出物体绕固定点 P(h,k)旋转的变换矩阵的一般形式。

3-3 求三角形 A(0,0), B(1,1), C(5,2)旋转 45度后的新三角形的顶点坐标。 (a)绕坐标原点旋转 ; (b)*绕 P(-1,-1)旋转。

3-4 已知窗口左下角与右上角的坐标分别为 (1,1) 和 (3,5),求规范化坐标变换 。 (a) 视区为整个规范化设备屏幕空间;

(b) 视区的左下角和右上角坐标分别为 (0,0) 和 (1/2,1/2) 。

上机实践题之一 :

编程实现直线段的编码裁剪算法。

Page 23: 第 3 章     二维观察变换与裁剪

选做题3-1 写出关于固定点 P(h,k) 进行比例变换的矩阵的一般形式。

3-2 若将三角形 A(0,0), B(1,1), C(5,2)放大 2倍 , 同时保持 C(5,2)顶点的位置不变,试求出新三角形的坐标。

3-3 了解 Liang-Barsky 裁剪算法。