基本二维几何变换
二维平移
P = [ x y ] \begin{bmatrix} x \\ y \\ \end{bmatrix} [xy], P’ = [ x ′ y ′ ] \begin{bmatrix} x' \\ y' \\ \end{bmatrix} [x′y′], T = [ t x t y ] \begin{bmatrix} t_x \\ t_y \\ \end{bmatrix} [txty]
P ′ P' P′ = P P P + T T T
二维旋转
P = [ x y ] \begin{bmatrix} x \\ y \\ \end{bmatrix} [xy], P’ = [ x ′ y ′ ] \begin{bmatrix} x' \\ y' \\ \end{bmatrix} [x′y′]
x
x
x =
r
r
r * cos(φ)
y
y
y =
r
r
r * sin(φ)
P’ 是通过 P 旋转 φ
角的变换而来
x ′ x' x′ = x x x * cos(φ) - y y y * sin(φ)`
y ′ y' y′ = x x x * sin(φ) + y y y * cos(φ)`
P ′ P' P′ = R R R · P P P
R = [ c o s ( φ ) − s i n ( φ ) s i n ( φ ) c o s ( φ ) ] \begin{bmatrix} cos(φ) & -sin(φ) \\ sin(φ) & cos(φ) \\ \end{bmatrix} [cos(φ)sin(φ)−sin(φ)cos(φ)],
相对旋转点( x r x_r xr, y r y_r yr)将点从位置( x x x, y y y)旋转到位置( x ′ x' x′, y ′ y' y′)
x
′
x'
x′ =
x
r
x_r
xr + (
x
x
x -
x
r
x_r
xr) * cos(φ) - (
y
y
y -
y
r
y_r
yr) * sin(φ)
y
′
y'
y′ =
y
r
y_r
yr + (
x
x
x -
x
r
x_r
xr) * sin(φ) + (
y
y
y -
y
r
y_r
yr) * cos(φ)
二维缩放
x
′
x'
x′ =
x
x
x *
s
x
s_x
sx
y
′
y'
y′ =
y
y
y *
s
y
s_y
sy
缩放系数 s x s_x sx 在 x x x 方向对对象进行缩放, s y s_y sy 在 y y y 方向对对象进行缩放
[
x
′
y
′
]
\begin{bmatrix} x' \\ y' \\ \end{bmatrix}
[x′y′] =
[
s
x
0
0
s
y
]
\begin{bmatrix} s_x & 0 \\ 0 & s_y \\ \end{bmatrix}
[sx00sy] ·
[
x
y
]
\begin{bmatrix} x \\ y \\ \end{bmatrix}
[xy]
或
P
′
P'
P′ =
S
S
S ·
P
P
P
矩阵表示和齐次坐标
在设计和图形构造的应用中, 通过完成平移、旋转和搜房, 将图形组成部分安排到合适的位置。
每个基本变换(平移、旋转和缩放)都可以表示为普通矩阵形式:
P
′
P'
P′ =
M
1
M_1
M1 ·
P
P
P +
M
2
M_2
M2
P
′
P'
P′,
P
P
P: 列向量
M
1
M_1
M1: 2X2 矩阵
M
2
M_2
M2: 包含平移项的两元素列矩阵
二维平移矩阵
[
x
′
y
′
1
]
\begin{bmatrix} x' \\ y' \\ 1 \\ \end{bmatrix}
⎣⎡x′y′1⎦⎤ =
[
1
0
t
x
0
1
t
y
0
0
1
]
\begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \\ \end{bmatrix}
⎣⎡100010txty1⎦⎤ ·
[
x
y
1
]
\begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix}
⎣⎡xy1⎦⎤
P ′ P' P′ = T T T( t x t_x tx, t y t_y ty) · P P P
二维旋转矩阵
[
x
′
y
′
1
]
\begin{bmatrix} x' \\ y' \\ 1 \\ \end{bmatrix}
⎣⎡x′y′1⎦⎤ =
[
c
o
s
(
θ
)
−
s
i
n
(
θ
)
0
s
i
n
(
θ
)
c
o
s
(
θ
)
0
0
0
1
]
\begin{bmatrix} cos(θ) & -sin(θ) & 0 \\ sin(θ) & cos(θ) & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}
⎣⎡cos(θ)sin(θ)0−sin(θ)cos(θ)0001⎦⎤ ·
[
x
y
1
]
\begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix}
⎣⎡xy1⎦⎤
P ′ P' P′ = R R R( θ θ θ) · P P P
二维缩放矩阵
[
x
′
y
′
1
]
\begin{bmatrix} x' \\ y' \\ 1 \\ \end{bmatrix}
⎣⎡x′y′1⎦⎤ =
[
s
x
0
0
0
s
y
0
0
0
1
]
\begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}
⎣⎡sx000sy0001⎦⎤ ·
[
x
y
1
]
\begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix}
⎣⎡xy1⎦⎤
P ′ P' P′ = R R R( s x s_x sx, s y s_y sy) · P P P
其他二维变换
反射
[ 1 0 0 0 − 1 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} ⎣⎡1000−10001⎦⎤
[ − 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} ⎣⎡−100010001⎦⎤
错切
错切是一种使对象形状发生变化的变换, 经过错切的对象好像是由已经相互滑动的内部夹层组成的。
相对于
x
x
x轴的
x
x
x方向错写由下列变换矩阵产生
[ 1 s h x 0 0 1 0 0 0 1 ] \begin{bmatrix} 1 & sh_x & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} ⎣⎡100shx10001⎦⎤