矩阵及矩阵运算坐标变换
矩阵及矩阵运算——坐标变换
北京化工大学 姜冬青
教学目的: 1)通过生动有趣的例子,贯穿本节引入 矩阵、矩阵乘法定义,; 2)通过课程内容的讲解,要求学生能够自己编程实现例子加深 对矩阵及其乘法运算的 理解;
教学重点、难点: 矩阵定义,矩阵乘法。
教学用时: 30 分钟。
使用建议:本例是基本的旋转变换,只要学生学习了 C 语言均可编程实现,算法简单,易于 实现,所有专业均可。该例子还可用作正交矩阵和线性空间中例子。 这里只是矩阵定义和乘法,并非完整教学内容。
0⎤
Sy
⎥ ⎦
,
Sx
,
Sy
分别为
x
轴和
y
轴的缩放比例。若二者不等,则图形形状改
变。现请将前面三角形等比例、不等比例缩放。 MatLab 源程序: % 缩放变换程序
A=[0 1 1 0;0 1 -1 0];
figure(1); plot(A(1,:),A(2,:))
%绘出初始图形
hold on S=[2 0; 0 2]; Anew=S*A;
− +
y sinθ y cosθ
可以表示为
⎡ x'⎤ ⎢⎣ y'⎥⎦
=
⎡cosθ ⎢⎣ sin θ
− sinθ ⎤⎡x⎤ cosθ ⎥⎦⎢⎣ y⎥⎦
( ) ( ) 定义 设 A = aij 是一个 m × s 矩阵,B = bij 是一个 s × n 矩阵,那末规定矩阵 A 与矩
( ) 阵 B 的乘积是一个 m × n 矩阵 C = cij ,其中
A2=Rc*A;
plot(A2(1,:),A2(2,:),'r') legend('原图','旋转后图形')
175
当连续对图形进行旋转变换,就可以得到我们开始看到的动画。
在 MATLAB 中的计算结果及源程序: 下面给出旋转动画程序,旋转 pi/6,旋转 12 次,即旋转 1 周。 % 动画制作程序
0
clf
A=[0 1 1 0;0 1 -1 0]; Rc=[cos(pi/2) -sin(pi/2); sin(pi/2) cos(pi/2)]; %变换矩阵,逆时针旋转 pi/2
figure(2)
hold on plot(A(1,:),A(2,:))
%绘出初始图形
axis([-1.5 1.5 -1.5 1.5]); %避免坐标轴改变影响图形效果
% hold on
pause
A2=Rc*A;
for i=1:12 plot(A2(1,:),A2(2,:))
%绘出旋转图形
x=A2(1,:);
y=A2(2,:);
fill(x,y,'b')
axis([-1.5 1.5 -1.5 1.5A2;
end 练习题:计算机中常用的一种基本几何变换是缩放变换。
%变换矩阵,等比例放大 2 倍 %缩放变换
176
留给学生的思考题:这种旋转变换会改变图形的形状吗? 在第四章讲完正交矩阵后给出解答
177
教学对象:大二,计算机专业、高分子材料专业
引入:
首先演示一下示例,激发学生兴趣,让学生带着问题进入课程中 。 引例
平面上一点在计算机中可以通过它的坐标进行存储,如 p 点坐标(x,y);而平面上的 一个图形可以在计算机上存储为顶点的集合,通过画出顶点,并将顶点用直线进行相连即可
得到图形。若有 n 个顶点 p1, p2 ,..., pn ,则它们对应 n 个坐标,如果将这 n 个坐标写成数表,
y
p'(x', y')
r
r
θD
φD
p(x, y)
x
x = r cosφ x'= r cos(θ + φ)
由图可知
和
,由三角公式可以推出:
y = r sinφ y'= r sin(θ + φ)
r cos(θ + φ) = r(cosθ cosφ − sinθ sinφ) = x cosθ − y sinθ r sin(θ + φ) = r(sinθ cosφ + cosθ sinφ) = x sinθ + y cosθ
s
∑ cij = ai1b1 j + ai2b2 j + " + aisbsj = aikbkj , k =1
(i = 1, 2,"m; j = 1, 2,", n),
记为 C = AB.
注意:左边矩阵的列数等于右边矩阵的行数才能定义乘积。 学生课堂完成:
顶点为(0,0),(1,1),(1,-1)的三角形,逆时针旋转 90 度。 该图形对应的矩阵为:
即
x'= x cosθ − y sinθ y'= x sinθ + y cosθ ,
若将 p 点坐标描述为 (x, y) ,将 p' 坐标描述为 (x', y'),定义旋转变换矩阵为:
174
Rθ
=
⎡cosθ ⎢⎣ sin θ
− sinθ ⎤
cosθ
⎥ ⎦
则,
x'= y'=
x cosθ x sinθ
既有:
x y 1.矩阵的概念
P1
P2
x1
x2
y1
y2
。。。 pn 。。。 xn 。。。 yn
由 m × n 个数 aij (i = 1, 2,", m; j = 1, 2,", n) 排成的 m 行 n 列的数表
a11 a12 " a1n
a21 a22 " a2n
##
#
am1 am2 " amn
称为 m 行 n 列矩阵,简称 m × n 矩阵,记作
A=[0 1 1 0;0 1 -1 0]; Rc=[cos(pi/6) -sin(pi/6); sin(pi/6) cos(pi/6)]; %变换矩阵,逆时针旋转 pi/6
figure(2) plot(A(1,:),A(2,:))
%绘出初始图形
x=A(1,:);
y=A(2,:);
fill(x,y,'b') axis([-1.5 1.5 -1.5 1.5]); %避免坐标轴改变影响图形效果
缩放:指放大或缩小一个对象尺寸。缩放常量 sx 和 s y 恒为正,分别用来描述 x 轴和 y 轴方
向的长度变化。缩放常量大于 1 表示放大图形,小于 1 表示缩小图形。 p' = Ssx ,sy ( p) ,其
中, x'= sx x , y'= sy y ,变换矩阵为
SSx ,Sy
=
⎡ ⎢ ⎣
Sx 0
解决问题:
平面上图形有 n 个顶点 p1, p2 ,..., pn ,则它们对应 n 个坐标,将这 n 个坐标存储在 2×n
矩阵中,顶点的 x 坐标存储在矩阵的第一行,y 坐标存储在第二行。
即:
⎡x1 x2 " xn ⎤
⎢ ⎣
y1
y2
"
y
n
⎥ ⎦
学生课堂练习: 存储一个顶点为(0,0),(1,1),(1,-1)的三角形,给出存储矩阵:
⎛ a11 a12 " a1n ⎞
A
=
⎜ ⎜ ⎜
a21 "
a22 "
"
a2n
⎟ ⎟
" "⎟
⎜ ⎝ am1
am 2
"
⎟ amn ⎠
173
或简记为 Am×n或(aij )m×n , A 或 A = (aij ) .
aij 是第 i 行第 j 列的元素.称为 A 的 (i, j ) 元.
A 中的元素全为实数的矩阵称为实矩阵, A 中的元素是复数的矩阵称为复矩阵.
A
=
⎡0 ⎢⎣0
1 1
1 −1
0⎤ 0⎥⎦
图形封闭,所以终点也是(0,0) 2.矩阵乘法
现在我们已经会将一个平面图形存储在计算机中,下面通过改变顶点的位置,并重新绘 制图形,实现图形变换。如果变换是线性的,则可以通过矩阵乘法实现。
计算机中经常用到的一种基本几何变换为旋转变换: 旋转:对象绕着坐标原点旋转。一般,逆时针为正,顺时针为负。
变换矩阵为:
A
=
⎡0 ⎢⎣0
1 1
1 −1
0⎤ 0⎥⎦
Rθ
=
⎡cos(90) ⎢⎣ sin(90)
− sin(90)⎤
cos(90)
⎥ ⎦
旋转后的图形坐标为:
A'
=
Rθ
A
=
⎡0 ⎢⎣0
−1 1 11
0⎤ 0⎥⎦
在 MATLAB 中的计算结果及源程序:
A2=
0 -1.0000 1.0000
0
0 1.0000 1.0000