图形的几何变换是指对图形的几何信息颠末平移、比例、旋转等变换后产生新的图形。
基本几何变换都是相对于坐标原点和坐标轴进行的几何变换。
平移变换
推导:
x ′ = x + T x y ′ = y + T y x'=x+T_x\\ y'=y+T_y x′=x+Txy′=y+Ty
矩阵形式
[ x ′ y ′ ] = [ x y ] ⋅ [ S x 0 0 S y ] [x'\quad y']=[x\quad y]\cdot \begin{bmatrix} S_x & 0\\ 0 & S_y \end{bmatrix} [x′y′]=[xy]⋅[Sx00Sy]
比例变换
比例变换是指对p点相对于坐标原点沿x方向放缩Sx倍,沿y方向放缩Sy倍。
推导(极坐标):
x = r cos α y = r sin α x ′ = r cos ( α + θ ) = x cos θ − y sin θ y ′ = r sin ( α + θ ) = x sin θ + y cos θ x=r\cos\alpha\qquad y=r\sin\alpha\\ x'=r\cos(\alpha+\theta)=x\cos\theta-y\sin\theta\\ y'=r\sin(\alpha+\theta)=x\sin\theta+y\cos\theta x=rcosαy=rsinαx′=rcos(α+θ)=xcosθ−ysinθy′=rsin(α+θ)=xsinθ+ycosθ
矩阵:逆时针旋转 θ \theta θ角
[ x ′ y ′ ] = [ x y ] ⋅ [ cos θ sin θ − sin θ cos θ ] [x'\quad y']=[x\quad y]\cdot \begin{bmatrix} \cos\theta & \sin\theta\\ -\sin\theta & \cos\theta \end{bmatrix} [x′y′]=[xy]⋅[cosθ−sinθsinθcosθ]
平移、缩放、旋变化换的矩阵表示:
P ′ = P ⋅ T 1 + T 2 P'=P\cdot T_1+T_2 P′=P⋅T1+T2
其中Sx和Sy称为比例系数。
规范化齐次坐标
齐次坐标表示就是用 n + 1 n+1 n+1维向量表示一个 n n n维向量
( x , y ) ← ( x , y , 1 ) (x,y)\leftarrow(x,y,1) (x,y)←(x,y,1)
平移:
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ 1 0 0 0 1 0 T x T y 1 ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}1 & 0 & 0\\ 0 & 1 & 0\\T_x& T_y & 1 \end{bmatrix} [x′y′1]=[xy1]⋅ 10Tx01Ty001
比例:
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ S x 0 0 0 S y 0 0 0 1 ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}S_x & 0 & 0\\ 0 & S_y & 0\\0& 0 & 1 \end{bmatrix} [x′y′1]=[xy1]⋅ Sx000Sy0001
整体比例变换:
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ 1 0 0 0 1 0 0 0 S ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}1 & 0 & 0\\ 0 & 1 & 0\\0& 0 & S \end{bmatrix} [x′y′1]=[xy1]⋅ 10001000S
旋变化换:
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ cos θ sin θ 0 − sin θ cos θ 0 0 0 1 ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} \cos\theta & \sin\theta & 0\\ -\sin\theta & \cos\theta & 0\\ 0& 0 & 1 \end{bmatrix} [x′y′1]=[xy1]⋅ cosθ−sinθ0sinθcosθ0001
普通变换:
x ′ = a x + c y + l p x + q y + s y ′ = b x + d y + m p x + q y + s x'=\frac{ax+cy+l}{px+qy+s}\quad y'=\frac{bx+dy+m}{px+qy+s} x′=px+qy+sax+cy+ly′=px+qy+sbx+dy+m
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ a b p c d q l m s ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} a & b & p\\ c & d & q\\ l & m & s \end{bmatrix} [x′y′1]=[xy1]⋅ aclbdmpqs
关于x轴对称
[ 1 0 0 0 − 1 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix} 1000−10001
关于y轴对称
[ − 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix} −100010001
关于原点对称
[ − 1 0 0 0 − 1 0 0 0 1 ] \begin{bmatrix} -1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix} −1000−10001
关于 y = x y=x y=x轴对称
[ 0 1 0 1 0 0 0 0 1 ] \begin{bmatrix} 0 & 1 & 0\\ 1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix} 010100001
关于 y = − x y=-x y=−x轴对称
[ 0 − 1 0 − 1 0 0 0 0 1 ] \begin{bmatrix} 0 & -1 & 0\\ -1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix} 0−10−100001
错切变换
错切变换,也称为剪切、错位变换,用于产生弹性物体的变形处理处罚。
其变换矩阵为:
[ 1 b 0 c 1 0 0 0 1 ] \begin{bmatrix} 1 & b & 0\\ c & 1 & 0\\ 0 & 0 & 1 \end{bmatrix} 1c0b10001
二维图形几何变换的盘算
点的变换
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ a b p c d q l m r ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} a & b & p\\ c & d & q\\ l & m & r \end{bmatrix} [x′y′1]=[xy1]⋅ aclbdmpqr
\begin{bmatrix}
x_1&y_1&1\
x_2&y_2&1
\end{bmatrix}
\cdot
\begin{bmatrix}
a &b &p\
c &d &q\
l &m &r
\end{bmatrix}
$$
多边形的变换
复合变换
复合变换具有形式:
P ′ = P ⋅ T 1 ⋅ T 2 ⋅ T 3 ⋯ T n P'=P\cdot T_1\cdot T_2\cdot T_3\cdots T_n P′=P⋅T1⋅T2⋅T3⋯Tn
二维复合平移:
[ 1 0 0 0 1 0 T x 1 + T x 2 T y 1 + T y 2 1 ] \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ T_{x1}+T_{x2} & T_{y1}+T_{y2} & 1 \end{bmatrix} 10Tx1+Tx201Ty1+Ty2001
二维复合比例
[ S x 1 ⋅ S x 2 0 0 0 S y 1 ⋅ S y 2 0 0 0 1 ] \begin{bmatrix} S_{x1}\cdot S_{x2} & 0 & 0\\ 0 & S_{y1}\cdot S_{y2} & 0\\ 0 & 0 & 1 \end{bmatrix} Sx1⋅Sx2000Sy1⋅Sy20001
二维复合旋转
[ cos ( θ 1 + θ 2 ) sin ( θ 1 + θ 2 ) 0 − sin ( θ 1 + θ 2 ) cos ( θ 1 + θ 2 ) 0 0 0 1 ] \begin{bmatrix} \cos(\theta_1+\theta_2) & \sin(\theta_1+\theta_2) & 0\\ -\sin(\theta_1+\theta_2) &\cos(\theta_1+\theta_2) & 0\\ 0 & 0 & 1 \end{bmatrix} cos(θ1+θ2)−sin(θ1+θ2)0sin(θ1+θ2)cos(θ1+θ2)0001
相对恣意一点的二维几何变换
相对某个参考点(xF,yF)作二维几何变换,其变换过程为:
平移/旋转。
针对原点进行二维几何变换。
反平移/反旋转。
光栅变换
直接对帧缓存中象素点进行操作的变换称为光栅变换。
光栅平移变换:
恣意角度的光栅旋变化换:
光栅比例变换:进行地区的映射处理处罚
变换的性子:
二维仿射变换是具有如下形式的二维坐标变换:
x ′ = a x + b y + m y ′ = c x + d y + n x'=ax+by+m\\ y'=cx+dy+n x′=ax+by+my′=cx+dy+n
平移、比例、旋转、错切和反射等变换均是二维仿射变换的特例,反过来,任何常用的二维仿射变换总可以表示为这五种变换的复合。
直线的参数方程:
x = x 1 + u ⋅ ( x 2 − x 1 ) y = y 1 + u ⋅ ( y 2 − y 1 ) \begin{align} x =& x_1 + u \cdot (x_2 - x_1) \\ y =& y_1 + u \cdot (y_2 - y_1) \end{align} x=y=x1+u⋅(x2−x1)y1+u⋅(y2−y1)
对于直线上一点(x,y),若它在窗口内则有:
w x l < = x 1 + u ⋅ ( x 2 − x 1 ) < = w x r w x b < = y 1 + u ⋅ ( y 2 − y 1 ) < = w y t \begin{align} wxl <= x_1 + u\cdot(x_2 - x_1) <= wxr\\ wxb <= y_1 + u\cdot(y_2 - y_1) <= wyt \end{align} wxl<=x1+u⋅(x2−x1)<=wxrwxb<=y1+u⋅(y2−y1)<=wyt
令:
则有:
任何平行于剪切边界之一的直线 p k = 0 p_k = 0 pk=0, 其中 k 对应于该剪切边界(k=1,2,3,4 对应于左、右、下、上边界)