概述
线性变换
文章目录
- 线性变换
- 1. 矩阵与向量相乘的两重含义
- 1.1 重新线性组合
- 1.2 线性变换
- 2. 线性变换的分类
- 3. 线性变换矩阵的求解
- 4. 满射与单射
- 5. 线性变换与计算机图形学
- 5.1 旋转、伸缩、剪切变换
- 5.2 平移变换
- 5.2.1 齐次坐标系
- 5.2.2 二维的平移变换
- 5.2.3 三维的平移变换
- 5.3 透视投影
- 5.4 绕某点旋转
1. 矩阵与向量相乘的两重含义
1.1 重新线性组合
对于矩阵与向量的乘法AX=b而言,从矩阵角度考虑,向量X的系数作为权值,让矩阵A中的各个列向量进行叠加,最后得到了一个重新线性组合的向量b
1.2 线性变换
从向量角度来考虑,矩阵A对向量具有变换作用,通过矩阵A能够实现向量X的放缩、旋转、镜像等变换,这是矩阵乘法的线性变换含义。
2. 线性变换的分类
- 剪切变换
剪切变换就是通过矩阵使得图形沿着某个方向滑动,一般是所有向量都加上了其中某一个向量的倍数,也就向着这个方向进行滑动
- 旋转变换
旋转变换就是绕着原点顺时针或者逆时针转动一定角度
- 伸缩变换
伸缩变换是所有向量整体增大或者减少一定倍数
- 镜像变换
沿着某条轴做镜像对称得到新向量
3. 线性变换矩阵的求解
线性变换满足数乘和加法的封闭,也就是
T
(
c
X
)
=
c
∗
T
(
X
)
T(cX) = c*T(X)
T(cX)=c∗T(X)
T ( X + Y ) = T ( X ) + T ( Y ) T(X+Y)=T(X)+T(Y) T(X+Y)=T(X)+T(Y)
T
(
C
1
∗
X
+
C
2
∗
Y
)
=
C
1
∗
T
(
X
)
+
C
2
∗
T
(
Y
)
T(C1*X+C2*Y)=C1*T(X)+C2*T(Y)
T(C1∗X+C2∗Y)=C1∗T(X)+C2∗T(Y)
所以,我们只要知道基向量的变换情况,就可以通过基向量的组合得到任意向量的线性变换。比如
v
=
c
1
∗
v
1
+
c
2
∗
v
2
+
c
3
∗
v
3
v = c_1*v_1+c_2*v_2+c_3*v_3
v=c1∗v1+c2∗v2+c3∗v3
T ( v ) = c 1 ∗ T ( v 1 ) + c 2 ∗ T ( v 2 ) + c 3 ∗ T ( v 3 ) T(v)=c_1*T(v_1)+c_2*T(v_2)+c_3*T(v_3) T(v)=c1∗T(v1)+c2∗T(v2)+c3∗T(v3)
我们以旋转为例进行说明
假设向量旋转了90°,那么基向量必然也旋转了90°
开始时候的基向量为
v
1
=
{
1
0
}
v1 = left{begin{matrix}1\0end{matrix}right}
v1={10}
v
2
=
{
0
1
}
v2 = left{begin{matrix}0\1end{matrix}right}
v2={01}
而旋转之后的基向量为
v 1 ′ = { 0 1 } v1' = left{begin{matrix}0\1end{matrix}right} v1′={01}
v 2 ′ = { − 1 0 } v2' = left{begin{matrix}-1\0end{matrix}right} v2′={−10}
所以变换矩阵为
A
=
{
0
−
1
1
0
}
A = left{begin{matrix}0 &-1\1 &0end{matrix}right}
A={01−10}
线性变换的操作为
v
′
=
A
∗
v
v' = A*v
v′=A∗v
4. 满射与单射
- 满射就是,通过现有的向量组合得到目标线性变换所需要的向量,至少有一种实现方式。相当于AX=b有1个或无穷多个解
- 单射就是,通过现有的向量组合得到目标线性变换所需要的向量,最多有一种实现方式。相当于AX=b有0或1个解
5. 线性变换与计算机图形学
5.1 旋转、伸缩、剪切变换
- 剪切变换矩阵
水平剪切
{
1
m
0
1
}
left{begin{matrix}1 &m\0 &1end{matrix}right}
{10m1}
垂直剪切
{
1
0
m
1
}
left{begin{matrix}1 &0\m &1end{matrix}right}
{1m01}
- 伸缩变换
{ m 0 0 1 } left{begin{matrix}m &0\0 &1end{matrix}right} {m001}
{ 1 0 0 m } left{begin{matrix}1 &0\0 &mend{matrix}right} {100m} - 旋转变换
{ c o s θ − s i n θ s i n θ c o s θ } left{begin{matrix}cosθ & -sinθ\sinθ &cosθend{matrix}right} {cosθsinθ−sinθcosθ}
- 复合变换
A 1 ∗ A 2 ∗ . . . . . ∗ A n A_1*A_2*.....*A_n A1∗A2∗.....∗An
5.2 平移变换
5.2.1 齐次坐标系
平移变换并不属于线性变换,因此,如果想要实现n维度空间的平移,必须构建n+1维度的空间,才能实现平移的线性变换,构造的n+1维度空间叫做齐次坐标系
5.2.2 二维的平移变换
假设对v1实行平移变换
v
1
=
{
x
y
}
v1=left{begin{matrix}x\yend{matrix}right}
v1={xy}
增加一个维度,让R2中的每个点(x,y),都变成对应的(x,y,1),放到R3中去,xy平面的上面一个单位上去。
w
1
=
{
x
y
1
}
w1=left{begin{matrix}x\y\1end{matrix}right}
w1=⎩⎨⎧xy1⎭⎬⎫
让(x,y)->(x+h,y+w)的变换可以写做
{ 1 0 w 0 1 h 0 0 1 } ∗ { x y 1 } = { x + w y + h 1 } left{begin{matrix}1&0&w\0&1&h\0&0&1end{matrix}right}*left{begin{matrix}x\y\1end{matrix}right}=left{begin{matrix}x+w\y+h\1end{matrix}right} ⎩⎨⎧100010wh1⎭⎬⎫∗⎩⎨⎧xy1⎭⎬⎫=⎩⎨⎧x+wy+h1⎭⎬⎫
5.2.3 三维的平移变换
三维平移变换也类似,构建四维齐次坐标系进行
{
1
0
0
w
0
1
0
h
0
0
1
s
0
0
0
1
}
∗
{
x
y
z
1
}
=
{
x
+
w
y
+
h
z
+
s
1
}
left{begin{matrix}1&0&0&w\0&1&0&h\0&0&1&s\0&0&0&1end{matrix}right}*left{begin{matrix}x\y\z\1end{matrix}right}=left{begin{matrix}x+w\y+h\z+s\1end{matrix}right}
⎩⎪⎪⎨⎪⎪⎧100001000010whs1⎭⎪⎪⎬⎪⎪⎫∗⎩⎪⎪⎨⎪⎪⎧xyz1⎭⎪⎪⎬⎪⎪⎫=⎩⎪⎪⎨⎪⎪⎧x+wy+hz+s1⎭⎪⎪⎬⎪⎪⎫
一般来说(x,y,z,1)是(x,y,z)对应的齐次坐标,若最后一个数字不为1,应该通过除法使其变成1
(
X
,
Y
,
Z
,
H
)
(X,Y,Z,H)
(X,Y,Z,H)
x = X H x = frac{X}{H} x=HX
y = Y H y = frac{Y}{H} y=HY
z = Z H z = frac{Z}{H} z=HZ
5.3 透视投影
透视投影就是,假设某个点(x,y,z),某个点望去,投影到某个平面上的时候,获得了投影点坐标。比如点(x,y,z),从(0,0,d)位置望去,投影在xy平面上的点是多少
根据三角形相似关系,可以得到
x
x
′
=
d
−
z
d
frac{x}{x'}=frac{d-z}{d}
x′x=dd−z
可得x和y的投影坐标为
x
′
=
x
1
−
z
/
d
x' = frac{x}{1-z/d}
x′=1−z/dx
y ′ = y 1 − z / d y' = frac{y}{1-z/d} y′=1−z/dy
所以(x,y,z,1)投影结果为(x’,y’,0,1),让向量乘以1-z/d,变成(x,y,0,1-z/d)
{
1
0
0
0
0
1
0
0
0
0
0
0
0
0
−
1
d
1
}
∗
{
x
y
z
1
}
=
{
x
y
0
1
−
z
/
d
}
left{begin{matrix}1&0&0&0\0&1&0&0\0&0&0&0\0&0&-frac{1}{d}&1end{matrix}right}*left{begin{matrix}x\y\z\1end{matrix}right}=left{begin{matrix}x\y\0\1-z/dend{matrix}right}
⎩⎪⎪⎨⎪⎪⎧10000100000−d10001⎭⎪⎪⎬⎪⎪⎫∗⎩⎪⎪⎨⎪⎪⎧xyz1⎭⎪⎪⎬⎪⎪⎫=⎩⎪⎪⎨⎪⎪⎧xy01−z/d⎭⎪⎪⎬⎪⎪⎫
在齐次坐标系中,把最后一个坐标除为1,就得到了在三维空间中的透视投影点坐标了。
5.4 绕某点旋转
假设有一个图形,想要绕着点p进行旋转一定角度,具体步骤为
- 图形平移-p到原点
- 绕原点进行旋转
- 旋转后的图形平移p到原位置
最后
以上就是羞涩铅笔为你收集整理的【线性代数及其应用】04 -线性变换线性变换的全部内容,希望文章能够帮你解决【线性代数及其应用】04 -线性变换线性变换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复