Presentation is loading. Please wait.

Presentation is loading. Please wait.

第六章 二维变换及二维观察 如何对二维图形进行方向、尺寸和形状方面的变换。 如何进行二维观察。.

Similar presentations


Presentation on theme: "第六章 二维变换及二维观察 如何对二维图形进行方向、尺寸和形状方面的变换。 如何进行二维观察。."— Presentation transcript:

1 第六章 二维变换及二维观察 如何对二维图形进行方向、尺寸和形状方面的变换。 如何进行二维观察。

2 二维变换及二维观察 基本几何变换与基本概念 二维图形几何变换的计算 复合变换 变换的性质

3 6.2 基本几何变换 图形的几何变换是指对图形的几何信息经过平移、比例、旋转等变换后产生新的图形,是图形在方向、尺寸和形状方面的变换。
基本几何变换都是相对于坐标原点和坐标轴进行的几何变换。

4 基本几何变换——平移变换 平移是指将p点沿直线路径从一个坐标位置移到另一个坐标位置的重定位过程。 图6-1 平移变换

5 基本几何变换——平移变换 推导: 矩阵形式: Tx,Ty称为平移矢量。

6 基本几何变换——比例变换 推导: 矩阵形式:

7 基本几何变换——比例变换 比例变换是指对p点相对于坐标原点沿x方向放缩Sx倍,沿y方向放缩Sy倍。其中Sx和Sy称为比例系数。

8 基本几何变换——比例变换 图6-3 比例变换

9 基本几何变换——旋转变换 二维旋转是指将p点绕坐标原点转动某个角度(逆时针为正,顺时针为负)得到新的点p’的重定位过程。 图6-4 旋转变换

10 基本几何变换——旋转变换 推导: (极坐标) 矩阵:逆时针旋转θ角

11 基本几何变换 平移、缩放、旋转变换的矩阵表示: 图形通常要进行一系列基本几何变换,希望能够 把二维变换统一表示为矩阵的乘法。

12 基本几何变换——规范化齐次坐标 齐次坐标表示就是用n+1维向量表示一个n维向量。 规范化齐次坐标表示就是h=1的齐次坐标表示。

13 基本几何变换 平移:

14 基本几何变换 比例:

15 基本几何变换 整体比例变换:

16 基本几何变换 旋转变换:

17 基本几何变换——二维变换矩阵

18 基本几何变换——对称变换 对称变换后的图形是原图形关于某一轴线或原点的镜像。

19 基本几何变换——对称变换

20 基本几何变换——对称变换 (1)关于x轴对称 图6-5 关于x轴对称

21 基本几何变换——对称变换 (2)关于y轴对称 图6-6 关于y轴对称

22 基本几何变换——对称变换 (3)关于原点对称 图6-7 关于原点对称

23 基本几何变换——对称变换 (4)关于y=x轴对称 图6-8 关于x=y对称

24 基本几何变换——对称变换 (5)关于y=-x轴对称 图6-9 关于x=-y对称

25 基本几何变换——错切变换 错切变换,也称为剪切、错位变换,用于产生弹性物体的变形处理。 图6-10 错切变换

26 基本几何变换——错切变换 其变换矩阵为: (1)沿x方向错切 (2)沿y方向错切 (3)两个方向错切

27 二维图形几何变换的计算 几何变换均可表示成P’=P*T的形式。   1. 点的变换  

28 二维图形几何变换的计算  2. 直线的变换

29 二维图形几何变换的计算 3. 多边形的变换

30 复合变换 图形作一次以上的几何变换,变换结果是每次变换矩阵的乘积。 任何一复杂的几何变换都可以看作基本几何变换的组合形式。
复合变换具有形式:

31 复合变换——二维复合平移

32 复合变换——二维复合比例

33 复合变换——二维复合旋转

34 复合变换

35 相对任一参考点的二维几何变换 相对某个参考点(xF,yF)作二维几何变换,其变换过程为: (1) 平移; (2) 针对原点进行二维几何变换;
(3) 反平移。

36 相对任一参考点的二维几何变换 例1. 相对点(xF,yF)的旋转变换

37 相对任意方向的二维几何变换 相对任意方向作二维几何变换,其变换的过程是: (1) 旋转变换; (2) 针对坐标轴进行二维几何变换;
(3) 反向旋转。 例2. 相对直线y=x的反射变换

38 复合变换 例3. 将正方形ABCO各点沿下图所示的(0,0)→(1,1)方向进行拉伸,结果为如图所示的,写出其变换矩阵和变换过程。

39 可能发生的变换:沿(0,0) 到(1,1)的比例变换
可能发生的变换:沿(0,0) 到(1,1)的比例变换 图6-11 沿固定方向拉伸

40 坐标系之间的变换 问题: 图6-12 坐标系间的变换

41 坐标系之间的变换 分析: 图6-13 坐标系间的变换的原理

42 可以分两步进行: 图6-14 坐标系间的变换的步骤

43 于是: 

44 光栅变换 直接对帧缓存中象素点进行操作的变换称为光栅变换。  光栅平移变换: 

45 光栅变换 90°、180°和270°的光栅旋转变换:   图6-15 光栅旋转变换

46 光栅变换 任意角度的光栅旋转变换:   图6-16 任意角度的光栅旋转变换

47 光栅变换 光栅比例变换:进行区域的映射处理。 图6-16 光栅比例变换

48 变换的性质 二维仿射变换是具有如下形式的二维坐标变换:
二维仿射变换是具有如下形式的二维坐标变换:  平移、比例、旋转、错切和反射等变换均是二维仿射变换的特例,反过来,任何常用的二维仿射变换总可以表示为这五种变换的复合。 

49 变换的性质 仅包含旋转、平移和反射的仿射变换维持角度和长度的不变性; 比例变换可改变图形的大小和形状;
错切变换引起图形角度关系的改变,甚至导致图形发生畸变。

50 二维观察 基本概念 二维观察变换 二维裁剪 OpenGL中的二维观察

51 二维观察——基本概念 在计算机图形学中,将在用户坐标系中需要进行观察和处理的一个坐标区域称为窗口(Window)。
将窗口映射到显示设备上的坐标区域称为视区(Viewport)。

52 二维观察——基本概念 要将窗口内的图形在视区中显示出来,必须经过将窗口到视区的变换(Window-Viewport Transformation)处理,这种变换就是观察变换(Viewing Transformation)。

53

54 二维观察——基本概念 观察坐标系(View Coordinate)是依据窗口的方向和形状在用户坐标平面中定义的直角坐标系。
规格化设备坐标系(Normalized Device Coordinate)也是直角坐标系,它是将二维的设备坐标系规格化到(0.0,0.0)到(1.0,1.0)的坐标范围内形成的。

55 二维观察——基本概念 引入了观察坐标系和规格化设备坐标系后,观察变换分为如下图所示的几个步骤,通常称为二维观察流程。
引入了观察坐标系和规格化设备坐标系后,观察变换分为如下图所示的几个步骤,通常称为二维观察流程。   图6-17 二维观察流程

56 二维观察——基本概念 变焦距效果 图6-18 变焦距效果(窗口变、视区不变)

57 二维观察——基本概念 整体放缩效果 图6-17 整体放缩效果(窗口不变、视区变) 漫游效果 

58 用户坐标系到观察坐标系的变换 用户坐标系到观察坐标系的变换分由两个变换步骤合成: 将观察坐标系原点移动到用户坐标系原点;

59 用户坐标系到观察坐标系的变换 绕原点旋转使两坐标系重合 

60 窗口到视区的变换

61 窗口到视区的变换 要将窗口内的点(xw,yw)映射到相对应的视区内的点(xv,yv)需进行以下步骤:
(1) 将窗口左下角点移至用户系统系的坐标原点; (2) 针对原点进行比例变换; (3) 进行反平移。

62 裁剪 在二维观察中,需要在观察坐标系下对窗口进行裁剪,即只保留窗口内的那部分图形,去掉窗口外的图形。
假设窗口是标准矩形,即边与坐标轴平行的矩形,由上(y=wyt)、下(y=wyb)、左(x=wxl)、右(x=wxr)四条边描述。

63 裁剪——点的裁剪

64 二维直线段的裁剪 已知条件: (1)窗口边界wxl,wxr,wyb,wyt的坐标值;
(2)直线段端点p1p2的坐标值x1,y1,x2,y2。 

65 虚交点:处于直线段延长线或窗口边界延长线上的交点。
p6 p1    p3    p4   p5    p2    实交点:直线段与窗口矩形边界的交点; 虚交点:处于直线段延长线或窗口边界延长线上的交点。 

66 Cohen-Sutherland算法 编码:对于任一端点(x,y),根据其坐标所在的区域,赋予一个4位的二进制码D3D2D1D0。
编码规则如下: (1)若x<wxl,D0=1,否则D0=0; (2)若x>wxr,D1=1,否则D1=0; (3)若y<wyb,D2=1,否则D2=0; (4)若y>wyt,D3=1,否则D3=0。

67

68 Cohen-Sutherland算法 (1)判断 裁剪一条线段时,先求出直线段端点p1和p2的编码code1和code2,然后:
a.若code1|code2=0,对直线段简取之; b.若code1&code2≠0,对直线段简弃之;

69 Cohen-Sutherland算法 (2)求交 若上述判断条件不成立,则需求出直线段与窗口边界的交点。
a. 左、右边界交点的计算:y = y1 + k(x - x1); b. 上、下边界交点的计算:x = x1 + (y-y1)/k。 其中,k=(y2-y1)/(x2-x1)。

70 Cohen-Sutherland算法 p2    p1 p2    p1 p3 p1 p2 p2 p1 p4 p1 p2 p1 p2

71 Cohen-Sutherland算法 用编码方法实现了对完全可见和不可见直线段的快速接受和拒绝;
求交过程复杂,有冗余计算,并且包含浮点运算,不利于硬件实现。

72 中点分割算法 中点分割算法的核心思想是通过二分逼近来确定直线段与窗口的交点。

73 中点分割算法 特点:主要计算过程只用到加法或位移运算,易于硬件实现,同时适合于并行计算。 

74 Liang-Barsky算法  分析 

75 Liang-Barsky算法 直线的参数方程 对于直线上一点(x,y),若它在窗口内则有

76 则有

77 Liang-Barsky算法

78 特殊处理: 求出参数值: u3=q3/p3, u4=q4/p4 uA=0, uB= 1,

79 求出参数值: u1=q1/p1, u2=q2/p2 uA= 0, uB= 1,

80 一般情况:

81 算法步骤: (1)输入直线段的两端点坐标:(x1,y1)和(x2,y2),以及窗口的四条边界坐标:wyt、wyb、wxl和wxr。 (2)若Δx=0,则p1=p2=0。此时进一步判断是否满足q1<0或q2<0,若满足,则该直线段不在窗口内,算法转(7)。否则,满足q1>0且q2>0,则进一步计算u1和u2。算法转(5)。 (3)若Δy=0,则p3=p4=0。此时进一步判断是否满足q3<0或q4<0,若满足,则该直线段不在窗口内,算法转(7)。否则,满足q1>0且q2>0,则进一步计算u1和u2。算法转(5)。 (4)若上述两条均不满足,则有pk≠0(k=1,2,3,4)。此时计算u1和u2。 (5)求得u1和u2后,进行判断:若u1>u2,则直线段在窗口外,算法转(7)。若u1<u2,利用直线的参数方程求得直线段在窗口内的两端点坐标。 (6)利用直线的扫描转换算法绘制在窗口内的直线段。算法结束。

82 多边形的裁剪 问题的提出: 

83 Sutherland-Hodgeman多边形裁剪
基本思想:将多边形的边界作为一个整体,每次用窗口的一条边界对要裁剪的多边形进行裁剪,体现分而治之的思想。

84 Sutherland-Hodgeman多边形裁剪
算法实施策略: 为窗口各边界裁剪的多边形存储输入与输出顶点表。在窗口的一条裁剪边界处理完所有顶点后,其输出顶点表将用窗口的下一条边界继续裁剪。 窗口的一条边以及延长线构成的裁剪线把平面分为两个区域,包含窗口区域的区域称为可见侧;不包含窗口区域的域为不可见侧。

85 Sutherland-Hodgeman多边形裁剪
沿着多边形依次处理顶点会遇到四种情况:

86

87

88 特点

89 Weiler-Atherton多边形裁剪
假定按顺时针方向处理顶点,且将用户多边形定义为Ps,窗口矩形为Pw。算法从Ps的任一点出发,跟踪检测Ps的每一条边,当Ps与Pw相交时(实交点),按如下规则处理: (1)若是由不可见侧进入可见侧,则输出可见直线段,转(3);

90 Weiler-Atherton多边形裁剪
(2)若是由可见侧进入不可见侧,则从当前交点开始,沿窗口边界顺时针检测Pw的边,即用窗口的有效边界去裁剪Ps的边,找到Ps与Pw最靠近当前交点的另一交点,输出可见直线段和由当前交点到另一交点之间窗口边界上的线段,然后返回处理的当前交点; (3)沿着Ps处理各条边,直到处理完Ps的每一条边,回到起点为止。

91 下图示了Weiler-Atherton算法裁剪凹多边形的过程和结果。

92 其他裁剪 2. 文字裁剪 文字裁剪的策略包括几种: 串精度裁剪 字符精度裁剪 笔划、象素精度裁剪 3. 外部裁剪
2. 文字裁剪 文字裁剪的策略包括几种: 串精度裁剪 字符精度裁剪 笔划、象素精度裁剪  3. 外部裁剪 保留落在裁剪区域外的图形部分、去掉裁剪区域内的所有图形,这种裁剪过程称为外部裁剪,也称空白裁剪。

93 6.6 OpenGL中的二维观察 指定矩阵堆栈 指定裁剪窗口 指定视区

94 glMatrixMode(GL_PROJECTION)
指定矩阵堆栈 指定当前操作的是投影矩阵堆栈 glMatrixMode(GL_PROJECTION) 初始化,即指定当前操作的矩阵堆栈的栈顶元素为单位矩阵。 glLoadIdentity();

95 gluOtho2D(xwmin, xwmax, ywmin, ywmax);
指定裁剪窗口 定义二维裁剪窗口 gluOtho2D(xwmin, xwmax, ywmin, ywmax); 其中,双精度浮点数xwmin, xwmax, ywmin, ywmax分别对应裁剪窗口的左、右、下、上四条边界。 默认的裁剪窗口,四条边界分别为wxl=-1.0,wxr=1.0,wyt=-1.0,wyb=1.0。

96 glViewPort(xvmin,yvmin,vpWidth,vpHeighht);
指定裁剪窗口 指定视区 glViewPort(xvmin,yvmin,vpWidth,vpHeighht); xvmin和yvmin指定了对应于屏幕上显示窗口中的矩形视区的左下角坐标,单位为像素。 整型值vpWidth和vpHeighht则指定了视区的宽度和高度。 默认的视区大小和位置与显示窗口保持一致。


Download ppt "第六章 二维变换及二维观察 如何对二维图形进行方向、尺寸和形状方面的变换。 如何进行二维观察。."

Similar presentations


Ads by Google