- 线性变换:变换能够用矩阵乘法得到
可以说,Linear Transformation = Matrices (of the same dimension)
我们将如下所示的简单矩阵乘法定义为对向量 ( x , y ) T (x, y)^{T} (x,y)T 的线性变换。
[ a 11 a 12 a 21 a 22 ] [ x y ] = [ a 11 x + a 12 y a 21 x + a 22 y ] \left[\begin{array}{ll} a_{11} & a_{12} \\ a_{21} & a_{22} \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right]=\left[\begin{array}{l} a_{11} x+a_{12} y \\ a_{21} x+a_{22} y \end{array}\right] [a11a21a12a22][xy]=[a11x+a12ya21x+a22y]
缩放变换是一种沿着坐标轴作用的变换,定义如下:
scale ( s x , s y ) = [ s x 0 0 s y ] \operatorname{scale}\left(s_{x}, s_{y}\right)=\left[\begin{array}{cc} s_{x} & 0 \\ 0 & s_{y} \end{array}\right] scale(sx,sy)=[sx00sy]
即除了 ( 0 , 0 ) T (0,0)^{T} (0,0)T 保持不变之外,所有的点变为 ( s x x , s y y ) T \left(s_{x} x, s_{y} y\right)^{T} (sxx,syy)T
shear 变换直观理解就是把物体一边固定,然后拉另外一边,定义如下:
s h e a r − x ( s ) = [ 1 s 0 1 ] , s h e a r − y ( s ) = [ 1 0 s 1 ] shear-x(s)=\left[\begin{array}{ll}1 & s \\ 0 & 1\end{array}\right], \\shear-y (s)=\left[\begin{array}{ll}1 & 0 \\ s & 1\end{array}\right] shear−x(s)=[10s1],shear−y(s)=[1s01]
R θ = [ cos θ − sin θ sin θ cos θ ] \mathbf{R}_{\theta}=\left[\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] Rθ=[cosθsinθ−sinθcosθ]
推导如下
定义 2D 坐标和 2D向量如下
vector + vector = vector
point – point = vector
point + vector = point (一个点沿着向量移动)
point + point = 两个点的中点
此外,当第三维为 w ( w ≠ 0 ) w(w\ne 0) w(w=0)时,定义
( x y w ) is the 2 D point ( x / w y / w 1 ) , w ≠ 0 \left(\begin{array}{c} x \\ y \\ w \end{array}\right) \text { is the } 2 \mathrm{D} \text { point }\left(\begin{array}{c} x / w \\ y / w \\ 1 \end{array}\right), w \neq 0 ⎝ ⎛xyw⎠ ⎞ is the 2D point ⎝ ⎛x/wy/w1⎠ ⎞,w=0
S ( s x , s y ) = ( s x 0 0 0 s y 0 0 0 1 ) \mathbf{S}\left(s_{x}, s_{y}\right)=\left(\begin{array}{ccc} s_{x} & 0 & 0 \\ 0 & s_{y} & 0 \\ 0 & 0 & 1 \end{array}\right) S(sx,sy)=⎝ ⎛sx000sy0001⎠ ⎞
R ( α ) = ( cos α − sin α 0 sin α cos α 0 0 0 1 ) \mathbf{R}(\alpha)=\left(\begin{array}{ccc} \cos \alpha & -\sin \alpha & 0 \\ \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 1 \end{array}\right) R(α)=⎝ ⎛cosαsinα0−sinαcosα0001⎠ ⎞
T ( t x , t y ) = ( 1 0 t x 0 1 t y 0 0 1 ) \mathbf{T}\left(t_{x}, t_{y}\right)=\left(\begin{array}{ccc} 1 & 0 & t_{x} \\ 0 & 1 & t_{y} \\ 0 & 0 & 1 \end{array}\right) T(tx,ty)=⎝ ⎛100010txty1⎠ ⎞
再次使用齐次坐标描述
Use 4 × 4 4 \times 4 4×4 matrices for affine transformations
( x ′ y ′ z ′ 1 ) = ( a b c t x d e f t y g h i t z 0 0 0 1 ) ⋅ ( x y z 1 ) \left(\begin{array}{l} x^{\prime} \\ y^{\prime} \\ z^{\prime} \\ 1 \end{array}\right)=\left(\begin{array}{lllc} a & b & c & t_{x} \\ d & e & f & t_{y} \\ g & h & i & t_{z} \\ 0 & 0 & 0 & 1 \end{array}\right) \cdot\left(\begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right) ⎝ ⎛x′y′z′1⎠ ⎞=⎝ ⎛adg0beh0cfi0txtytz1⎠ ⎞⋅⎝ ⎛xyz1⎠ ⎞
S ( s x , s y , s z ) = ( s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 ) \mathbf{S}\left(s_{x}, s_{y}, s_{z}\right)=\left(\begin{array}{cccc} s_{x} & 0 & 0 & 0 \\ 0 & s_{y} & 0 & 0 \\ 0 & 0 & s_{z} & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) S(sx,sy,sz)=⎝ ⎛sx0000sy0000sz00001⎠ ⎞
T ( t x , t y , t z ) = ( 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ) \mathbf{T}\left(t_{x}, t_{y}, t_{z}\right)=\left(\begin{array}{cccc} 1 & 0 & 0 & t_{x} \\ 0 & 1 & 0 & t_{y} \\ 0 & 0 & 1 & t_{z} \\ 0 & 0 & 0 & 1 \end{array}\right) T(tx,ty,tz)=⎝ ⎛100001000010txtytz1⎠ ⎞
around x − , y − x-, y- x−,y−, or z z z-axis
sin α \sin \alpha sinα 的正负号由右手定则确定,顺序是 x → z x\to z x→z
R x ( α ) = ( 1 0 0 0 0 cos α − sin α 0 0 sin α cos α 0 0 0 0 1 ) R y ( α ) = ( cos α 0 sin α 0 0 1 0 0 − sin α 0 cos α 0 0 0 0 1 ) R z ( α ) = ( cos α − sin α 0 0 sin α cos α 0 0 0 0 1 0 0 0 0 1 ) \begin{aligned} \mathbf{R}_{x}(\alpha) &=\left(\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & \cos \alpha & -\sin \alpha & 0 \\ 0 & \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \\ \mathbf{R}_{y}(\alpha) &=\left(\begin{array}{cccc} \cos \alpha & 0 & \sin \alpha & 0 \\ 0 & 1 & 0 & 0 \\ -\sin \alpha & 0 & \cos \alpha & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \\ \mathbf{R}_{z}(\alpha) &=\left(\begin{array}{cccc} \cos \alpha & -\sin \alpha & 0 & 0 \\ \sin \alpha & \cos \alpha & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \end{aligned} Rx(α)Ry(α)Rz(α)=⎝ ⎛10000cosαsinα00−sinαcosα00001⎠ ⎞=⎝ ⎛cosα0−sinα00100sinα0cosα00001⎠ ⎞=⎝ ⎛cosαsinα00−sinαcosα0000100001⎠ ⎞
R x y z ( α , β , γ ) = R x ( α ) R y ( β ) R z ( γ ) \mathbf{R}_{x y z}(\alpha, \beta, \gamma)=\mathbf{R}_{x}(\alpha) \mathbf{R}_{y}(\beta) \mathbf{R}_{z}(\gamma) Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)
Rotation by angle α \alpha α around axis n n n
R ( n , α ) = cos ( α ) I + ( 1 − cos ( α ) ) n n T + sin ( α ) ( 0 − n z n y n z 0 − n x − n y n x 0 ) ⏟ N \mathbf{R}(\mathbf{n}, \alpha)=\cos (\alpha) \mathbf{I}+(1-\cos (\alpha)) \mathbf{n} \mathbf{n}^{T}+\sin (\alpha) \underbrace{\left(\begin{array}{ccc} 0 & -n_{z} & n_{y} \\ n_{z} & 0 & -n_{x} \\ -n_{y} & n_{x} & 0 \end{array}\right)}_{\mathbf{N}} R(n,α)=cos(α)I+(1−cos(α))nnT+sin(α)N ⎝ ⎛0nz−ny−nz0nxny−nx0⎠ ⎞
Think about how to take a photo
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fx3Pqwmp-1660291810051)(https://cdn.jsdelivr.net/gh/QiuHong-1202/FigureBed/2021/202208071729657.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTM6RjtF-1660291810052)(https://cdn.jsdelivr.net/gh/QiuHong-1202/FigureBed/2021/202208071733145.png)]
Translate (center to origin) first, then scale (length/width/height to 2)
M ortho = [ 2 r − l 0 0 0 0 2 t − b 0 0 0 0 2 n − f 0 0 0 0 1 ] [ 1 0 0 − r + l 2 0 1 0 − t + b 2 0 0 1 − n + f 2 0 0 0 1 ] M_{\text {ortho }}=\left[\begin{array}{cccc} \frac{2}{r-l} & 0 & 0 & 0 \\ 0 & \frac{2}{t-b} & 0 & 0 \\ 0 & 0 & \frac{2}{n-f} & 0 \\ 0 & 0 & 0 & 1 \end{array}\right]\left[\begin{array}{cccc} 1 & 0 & 0 & -\frac{r+l}{2} \\ 0 & 1 & 0 & -\frac{t+b}{2} \\ 0 & 0 & 1 & -\frac{n+f}{2} \\ 0 & 0 & 0 & 1 \end{array}\right] Mortho =⎣ ⎡r−l20000t−b20000n−f200001⎦ ⎤⎣ ⎡100001000010−2r+l−2t+b−2n+f1⎦ ⎤
计算机图形学二:视图变换(坐标系转化,正交投影,透视投影,视口变换)
M per = M ortho M persp → ortho \mathrm{M}_{\text {per }}=\mathrm{M}_{\text {ortho }} \mathrm{M}_{\text {persp } \rightarrow\text { ortho }} Mper =Mortho Mpersp → ortho
M per = [ 2 r − l 0 0 0 0 2 t − b 0 0 0 0 2 n − f 0 0 0 0 1 ] [ 1 0 0 − r + l 2 0 1 0 − t + b 2 0 0 1 − n + f 2 0 0 0 1 ] [ n 0 0 0 0 n 0 0 0 0 n + f − f n 0 0 1 0 ] \mathrm{M}_{\text {per }}=\left[\begin{array}{cccc} \frac{2}{r-l} & 0 & 0 & 0 \\ 0 & \frac{2}{t-b} & 0 & 0 \\ 0 & 0 & \frac{2}{n-f} & 0 \\ 0 & 0 & 0 & 1 \end{array}\right]\left[\begin{array}{cccc} 1 & 0 & 0 & -\frac{r+l}{2} \\ 0 & 1 & 0 & -\frac{t+b}{2} \\ 0 & 0 & 1 & -\frac{n+f}{2} \\ 0 & 0 & 0 & 1 \end{array}\right] \left[\begin{array}{cccc} n & 0 & 0 & 0 \\ 0 & n & 0 & 0 \\ 0 & 0 & n+f & -f n \\ 0 & 0 & 1 & 0 \end{array}\right] Mper =⎣ ⎡r−l20000t−b20000n−f200001⎦ ⎤⎣ ⎡100001000010−2r+l−2t+b−2n+f1⎦ ⎤⎣ ⎡n0000n0000n+f100−fn0⎦ ⎤