矩阵的加、减法
两个矩阵必须规模相同
[
1
2
3
4
5
6
]
+
[
1
2
3
4
5
6
]
=
[
1
+
1
2
+
2
3
+
3
4
+
4
5
+
5
6
+
6
]
=
[
2
4
6
8
10
12
]
\begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix}+\begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix}=\begin{bmatrix}1+1&2+2\\3+3&4+4\\5+5&6+6\end{bmatrix}=\begin{bmatrix}2&4\\6&8\\10&12\end{bmatrix}
⎣⎡135246⎦⎤+⎣⎡135246⎦⎤=⎣⎡1+13+35+52+24+46+6⎦⎤=⎣⎡26104812⎦⎤
矩阵的直加
两个不同规模的矩阵可以直加,组合后的矩阵空位用0补位
[
1
2
3
4
]
⨁
[
1
2
3
4
5
6
]
=
[
1
2
0
0
3
4
0
0
0
0
1
2
0
0
3
4
0
0
5
6
]
\begin{bmatrix}1&2\\3&4\end{bmatrix}\bigoplus\begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix}=\begin{bmatrix}1&2&0&0\\3&4&0&0\\0&0&1&2\\0&0&3&4\\0&0&5&6\end{bmatrix}
[1324]⨁⎣⎡135246⎦⎤=⎣⎢⎢⎢⎢⎡13000240000013500246⎦⎥⎥⎥⎥⎤
矩阵的乘除法
几何意义:A x B = 结合两种操作的操作集合。
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和
A
=
[
a
1
a
2
a
3
a
4
a
5
a
6
]
B
=
[
b
1
b
2
b
3
b
4
b
5
b
6
]
A = \begin{bmatrix}a1&a2&a3\\a4&a5&a6\end{bmatrix}B = \begin{bmatrix}b1&b2\\b3&b4\\b5&b6\end{bmatrix}
A=[a1a4a2a5a3a6]B=⎣⎡b1b3b5b2b4b6⎦⎤
C
=
A
B
=
[
a
1
b
1
+
a
2
b
3
+
a
3
b
5
a
1
b
2
+
a
2
b
4
+
a
3
b
6
a
4
b
1
+
a
5
b
3
+
a
6
b
5
a
4
b
2
+
a
5
b
4
+
a
6
b
6
]
C=AB=\begin{bmatrix}a1b1+a2b3+a3b5&a1b2+a2b4+a3b6\\a4b1+a5b3+a6b5&a4b2+a5b4+a6b6\end{bmatrix}
C=AB=[a1b1+a2b3+a3b5a4b1+a5b3+a6b5a1b2+a2b4+a3b6a4b2+a5b4+a6b6]
矩阵的平移
设
x
,
y
为
原
坐
标
,
d
x
、
d
y
为
x
y
坐
标
的
移
动
量
,
则
x
1
、
y
1
为
变
换
后
的
新
坐
标
设x,y为原坐标,dx、dy为xy坐标的移动量,则x1、y1为变换后的新坐标
设x,y为原坐标,dx、dy为xy坐标的移动量,则x1、y1为变换后的新坐标【公式】
(
x
1
y
1
)
=
(
d
x
d
y
)
+
(
x
y
)
\dbinom{x_{1}}{y_{1}}=\dbinom{dx}{dy}+\dbinom{x}{y}
(y1x1)=(dydx)+(yx)
【代码的实现】
//shader中的写法
//新x1坐标 = 原x坐标*cos(角度值) - 原y坐标*sin(角度值),角度值的取值区间是pi = 3.14, 相当于180度。该公式其实就是已知两直角边与夹角求第三遍长
x1 = x + dx;
y1 = y + dy;
空间矩阵的旋转
二维空间
设
x
,
y
为
原
坐
标
,
θ
为
旋
转
角
度
,
则
x
1
、
y
1
为
变
换
后
的
新
坐
标
设x,y为原坐标,\theta为旋转角度,则x1、y1为变换后的新坐标
设x,y为原坐标,θ为旋转角度,则x1、y1为变换后的新坐标【公式】
(
x
1
y
1
)
=
(
c
o
s
θ
−
s
i
n
θ
s
i
n
θ
c
o
s
θ
)
×
(
x
y
)
\dbinom{x_{1}}{y_{1}}=\begin{pmatrix}cos\theta&-sin\theta\\sin\theta& cos\theta\end{pmatrix}\times\dbinom{x}{y}
(y1x1)=(cosθsinθ−sinθcosθ)×(yx)
【代码的实现】
//shader中的写法
//新x1坐标 = 原x坐标*cos(角度值) - 原y坐标*sin(角度值),角度值的取值区间是pi = 3.14, 相当于180度。该公式其实就是已知两直角边与夹角求第三遍长
x1 = x * cos(angle) - y * sin(angle);
y1 = x * sin(angle) + y * cos(angle);
三维空间
设
x
,
y
为
原
坐
标
,
θ
为
旋
转
角
度
,
则
x
1
、
y
1
为
变
换
后
的
新
坐
标
设x,y为原坐标,\theta为旋转角度,则x1、y1为变换后的新坐标
设x,y为原坐标,θ为旋转角度,则x1、y1为变换后的新坐标【公式】
(
x
1
y
1
)
=
(
c
o
s
θ
−
s
i
n
θ
s
i
n
θ
c
o
s
θ
)
×
(
x
y
)
\dbinom{x_{1}}{y_{1}}=\begin{pmatrix}cos\theta&-sin\theta\\sin\theta& cos\theta\end{pmatrix}\times\dbinom{x}{y}
(y1x1)=(cosθsinθ−sinθcosθ)×(yx)
【代码的实现】
//shader中的写法
//新x1坐标 = 原x坐标*cos(角度值) - 原y坐标*sin(角度值),角度值的取值区间是pi = 3.14, 相当于180度。该公式其实就是已知两直角边与夹角求第三遍长
x1 = x * cos(angle) - y * sin(angle);
y1 = x * sin(angle) + y * cos(angle);
矩阵的缩放
设
x
,
y
为
原
坐
标
,
S
x
、
S
y
为
缩
放
倍
数
,
则
x
1
、
y
1
为
变
换
后
的
新
坐
标
设x,y为原坐标,S_{x}、S_{y}为缩放倍数,则x1、y1为变换后的新坐标
设x,y为原坐标,Sx、Sy为缩放倍数,则x1、y1为变换后的新坐标【公式】
(
x
1
y
1
)
=
(
S
x
0
0
S
y
)
×
(
x
y
)
\dbinom{x_{1}}{y_{1}}=\begin{pmatrix}S_{x}&0\\0& S_{y}\end{pmatrix}\times\dbinom{x}{y}
(y1x1)=(Sx00Sy)×(yx)
【代码的实现】
//shader中的写法
x1 = x * size_x + y * 0;
y1 = x * 0 + y * size_y;
矩阵的切变
设
x
,
y
为
原
坐
标
,
K
为
切
变
系
数
,
则
x
1
、
y
1
为
变
换
后
的
新
坐
标
。
设x,y为原坐标,K为切变系数,则x1、y1为变换后的新坐标。
设x,y为原坐标,K为切变系数,则x1、y1为变换后的新坐标。【公式】
第一种,x方向切变:
(
x
1
y
1
)
=
(
1
k
0
1
)
×
(
x
y
)
\dbinom{x_{1}}{y_{1}}=\begin{pmatrix}1&k\\0&1\end{pmatrix}\times\dbinom{x}{y}
(y1x1)=(10k1)×(yx)
第二种,y方向切变:
(
x
1
y
1
)
=
(
1
0
k
1
)
×
(
x
y
)
\dbinom{x_{1}}{y_{1}}=\begin{pmatrix}1&0\\k&1\end{pmatrix}\times\dbinom{x}{y}
(y1x1)=(1k01)×(yx)
【代码的实现】
//shader中的写法
//x方向的切变
x1 = x * 1 + y * k;
y1 = x * 0 + y * 1
//y方向的切变
x1 = x * 1 + y * 0;
y1 = x * k + y * 1
矩阵的反射(?)
设
x
,
y
为
原
坐
标
,
u
x
,
u
y
为
直
线
方
向
的
单
位
向
量
,
则
x
1
、
y
1
为
变
换
后
的
新
坐
标
设x,y为原坐标,ux,uy为直线方向的单位向量,则x1、y1为变换后的新坐标
设x,y为原坐标,ux,uy为直线方向的单位向量,则x1、y1为变换后的新坐标【公式】
(
x
1
y
1
)
=
(
2
u
x
2
−
1
2
u
x
u
y
2
u
x
u
y
2
u
y
2
−
1
)
×
(
x
y
)
\dbinom{x_{1}}{y_{1}}=\begin{pmatrix}2u_{x}^2-1&2u_{x}u_{y}\\2u_{x}u_{y}&2u_{y}^2-1\end{pmatrix}\times\dbinom{x}{y}
(y1x1)=(2ux2−12uxuy2uxuy2uy2−1)×(yx)
【代码的实现】
//shader中的写法
x1 = x * 2 * pow(ux,2) - 1 + y * 2 * ux * uy;
y1 = x * 2 * ux * uy + y * 2 * pow(uy, 2) - 1;
矩阵的正投影
设
x
,
y
为
原
坐
标
,
u
x
,
u
y
为
直
线
方
向
的
单
位
向
量
,
则
x
1
、
y
1
为
变
换
后
的
新
坐
标
设x,y为原坐标,ux,uy为直线方向的单位向量,则x1、y1为变换后的新坐标
设x,y为原坐标,ux,uy为直线方向的单位向量,则x1、y1为变换后的新坐标【公式】
(
x
1
y
1
)
=
(
u
x
2
u
x
u
y
u
x
u
y
u
y
2
)
×
(
x
y
)
\dbinom{x_{1}}{y_{1}}=\begin{pmatrix}u_{x}^2&u_{x}u_{y}\\u_{x}u_{y}&u_{y}^2\end{pmatrix}\times\dbinom{x}{y}
(y1x1)=(ux2uxuyuxuyuy2)×(yx)
【代码的实现】
//shader中的写法
x1 = x * pow(ux,2) + y * ux * uy;
y1 = x * ux * uy + y * pow(uy, 2);