计算机图形学04-图形几何变换
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0 0 1
cos(1 2 ) sin(1 2 ) 0 sin( ) cos( ) 0 1 2 1 2 0 0 1
23
§4.1.2 二维复合变换
(4)级联顺序对组合变换的影响 * 先平移,再旋转
1 0 0 cos T1 0 1 0 sin m n 1 0 cos sin m cos n sin sin cos 0 sin cos m sin n cos 0 0 1 0 0 1
10
§4.1.1 基本变换:平移变换
齐次坐标 Homogeneous Coordinate
二次矩阵变换:
a T c
b d
•
二次矩阵变换不能进行平移变换,所以需要齐次矩阵变换
其中T 为:
[x
y
a 1] c k
b d [ax cy k m
其中T 为:
1 T c
b 1
c 和 b 之一为 0。
19
§4.1.1 基本变换:错切变换
错切变换
原图
c 3/3
30º
错切 c = tan
20
§4.1.1 基本变换:变换通式
33齐次变换矩阵:仿射变换
该矩阵可实现: 比例、对称、错切、旋转等基本变换。 [k m] 可实现平移变换。 [p q]T 还可实现透视变换。
bx dy m]
11
§4.1.1 基本变换:平移变换
平移变换
原图
移动后
12
§4.1.1 基本变换:旋转变换
Method:
[ x y] T = [x cos -y sin x sin +y cos ] = [x’ y’]
其中T 为:
cos T sin
0 0 1 1.将图形从点P(m,n)平移到原点O T1 0 1 0 m n 1 cos sin 0 2.绕原点旋转 T2 sin cos 0 0 1 0
3. 将图形从原点平移到P(m, n)
1 0 0 T3 0 1 0 m n 1
பைடு நூலகம்0 0 1 n
0 0 0 1
x z z z’
x’ x
[x y z 1] T = [x+l y+m z+n 1]
32
(2)相对于原点的缩放变换(比例变换)
U
V
U· V即U在V上的投影乘以V的模
5
变换的数学基础
矢量的叉积
i vx
j uy vy
k u z b1i b2 j b3k vz
U V ux
b1 u y vz vyuz , b2 vxuz uxvz , b3 uxvy vxu y
叉乘的性质如下: (1). U V U V sinθ (2). 矢量 U×V垂直于矢量U 和V,三矢量的方向遵从右手系。
U×V V
力F
A作用点
h U
θ
支点O
力臂l
6
变换的数学基础
矩阵的含义 矩阵:由m×n个数按一定位置排列的一个整体,简称m×n矩阵。
a11 a12 ... a1n a 21 a 22 ... a 2 n ... ... ... a m 1 a m 2 ... a mn
Ax+By+C =0
G’ G F
C/A -C/B
对任意直线的对称变换可分解为以下五步: 1.将直线沿x轴平移C/A, 使之过原点
2.让直线绕原点顺时针旋转角, 使之与x 轴重合
0 0 1 T1 0 1 0 C / A 0 1
) 0 cos( ) sin ( T2 sin ( ) cos( ) 0 0 0 1 28
3. 对45°线的对称变换等。
1 0 0 1
1 0 0 1
1 0
0 1
对x 轴对称
对y 轴对称
对原点对称
17
§4.1.1 基本变换:反射变换
反射变换
原图
对y 轴对称
对x 轴对称
对原点对称
18
§4.1.1 基本变换:错切变换
Method: [ x y] T = [x+cy bx+y] = [x’ y’] b = 0 : 沿X方向错切 c = 0 : 沿Y方向错切
x ' ax cy
y ' bx dy;
变换后的位置矢量矩阵
x'
y' x
a b y ax cy bx dy c d
9
位置矢量矩阵
§4.1 二维几何变换
基本变换的种类有:
平移 旋转 缩放 反射 错切
Translation Rotation Scaling Reflection Shear (Skew)
sin cos 0
sin cos
0 0 1
1 0 0 0 1 0 m n 1
0 0 1
n m sin n cos
27
(6)对任意直线的对称变换 F’ 设直线方程 Ax+By+C =0 E’ 则:x轴上的截距为 -C/A y轴上的截距为 -C/B 斜率为 -A/B E
a T 0
0 d
15
§4.1.1 基本变换:缩放变换
缩放变换
Translate
Scale
Restore
16
§4.1.1 基本变换:反射变换
Method:1. 对坐标轴的对称变换
[ X Y] T = [-X Y] = [X’ Y’]
2. 对原点对称变换
[ X Y] T = [-X -Y] = [X’ Y’]
由于矩阵乘法不满足交换率, A B B A 级联的顺序不同,最终的图形不同
24
§4.1.2 二维复合变换
(5)绕平面上任意点P(m,n)的二维旋转变换
P(m,n)
P(m,n)
P(m,n)
P(m,n)
0
0
( 1)
0
( 2)
0
( 3)
25
§4.1.2 二维复合变换
绕平面上任意点P(m,n)的二维旋转变换矩阵
26
§4.1.2 二维复合变换
绕平面上任意点 p(m,n)的二维旋转变换的总变换矩阵
0 0 cos 1 sin T= T1*T2*T3 = 0 1 0 0 m n 1
cos sin = m m cos n sin
其中,aij称为矩阵A的第i行第j列元素
7
第4章:图形几何变换
1 2 3 • 二维几何变换 • 三维几何变换
• 图形几何变换的模式
Computer Graphics
8
§4.1 二维几何变换
1.二维平面上点的表示法 2. 图形变换的矩阵表示 一对坐标(x, y) 一个向量[x y]
改变顶点坐标, 也就是对向量的变换,向量运算必须用矩阵运算来实现。 设: 点P(x,y) 矩阵表达方法 变换矩阵 点P ’(x’, y’) 其数学表达方法
0 1 0 0 1 0 1 0 1 0 m1 m2 n1 n2 m2 n2 1
0 0 1
T T1 *T2
a1 0 0 0 d 0 1 0 0 1
a2 0 0 a1 * a2 0 d 0 2 0 0 0 1 0
关于任意轴的对称变换
30
第4章:图形几何变换
1 2 • 二维几何变换
• 三维几何变换 • 图形几何变换的模式
3
Computer Graphics
31
§4.3.1 三维基本变换
(1)平移变换 指空间的立体从一个位置移动到另一位置时,其形状、大 小都不发生变换的变换。
y’ y y
1 0 0 1 T 0 0 l m
a b p T c d q k m 1
21
§4.1.2 二维复合变换
复合变换:由多个基本变换的连续实施而成的复杂变换,又称基本变换的级连.
(1)复合平移
T T1 *T2
(2)复合比例
1 0 0 0 1 0 m1 n1 1
* 先旋转,再平移
cos sin 0 1 0 0 T1 sin cos 0 0 1 0 0 1 0 m n 1 cos sin 0 sin cos 0 n 1 m
si n cos 0
0 0 1
0 0 1 T5 0 1 0 C / A 0 1
sin 2 cos2 C / A sin 2 0 0 1
29
cos2 T T1 T2 T3 T4 T5 sin 2 C / A(cos2 1)
计算机图形学
Computer Graphics
第4讲:图形几何变换
1
目录
CONTENTS
01 绪论
02 图形系统 03 二维图形生成
04 图形几何变换 05 二维观察
06 三维观察
07 三维对象 08 真实感图形技术 09 交互技术 10 计算机动画
2
变换的数学基础
矢量
u x U u y u z
0 d1 * d1 1
0 0 0
22
§4.1.2 二维复合变换
(3)复合旋转
T T1 *T2
cos1 sin 1 0 sin cos 0 1 1 0 1 0
cos 2 sin 2 0
sin 2 cos 2 0
vx V v y vz
矢量和
u x vx U V u v y y u z vz
3
变换的数学基础
矢量的数乘
kux k U ku y kuz
矢量的点积 性质
(6)对任意直线的对称变换 3.图形对直线的对称变换 变成对x轴的对称变换 4.让直线绕原点逆时针旋转角, 恢复到原来的倾斜位置
1 0 0 T3 0 1 0 0 0 1
5.将直线平移回原来的位置 组合变换矩阵
cos T4 si n 0
U V uxvx u y vy uz vz
U V V U U V 0 U V U U 0 U 0
4
变换的数学基础
矢量的长度
2 2 U U U ux u y uz 2
单位矢量 矢量的夹角
U V cos U V
θ
sin cos
13
§4.1.1 基本变换:旋转变换
旋转变换
14
§4.1.1 基本变换:缩放变换
Method:
[ X Y] T = [aX dY]= [X’ Y’]
Implementation:
for ( int i=0;i<m_PN;i++) { // translate to screen centre ( 400,300) p[i].x = p[i].x-400; p[i].y = 300-p[i].y; p[i].x = p[i].x*sdlg.m_ScaleX; p[i].y = p[i].y*sdlg.m_ScaleY; // restore the original coordinate. p[i].x = p[i].x+400; p[i].y = 300-p[i].y; } PolyLine(p,m_PN); // draw the scaled poly line.