【图形学】二维几何变换的一些理论

发布时间:2024年01月20日

一些概念

齐次坐标是用n+1维向量表示n维向量,例如点 P ( x , y ) 的齐次化坐标为 ( w x , w y , w ) , w 为任意不为 0 的数 P(x,y)的齐次化坐标为(wx,wy,w),w为任意不为0的数 P(x,y)的齐次化坐标为(wx,wy,w),w为任意不为0的数如果w取值为1,则称为规范化的齐次坐标。
二维几何变换矩阵
由于二维点的齐次坐标是一个包含三个元素的列向量,那么二维几何变换矩阵就应该是一个3*3的方阵。
T = [ a b e c d f p q s ] T=\begin{bmatrix} a&b&e\\ c&d&f\\ p&q&s \end{bmatrix} T= ?acp?bdq?efs? ?
从功能上可以把二维变换矩阵分成四个子矩阵
T 0 = [ a b c d ] T 1 = [ e f ] T 2 = [ p q ] T 3 = [ s ] T 0 对图形进行比例,旋转,反射和错切变换 , T 1 进行平移变化, T 2 进行投影变换 , T 3 进行整体比例变换 T_0=\begin{bmatrix} a&b\\ c&d \end{bmatrix} T_1=\begin{bmatrix} e\\f\end{bmatrix} T_2=\begin{bmatrix} p&q\end{bmatrix} T_3=\begin{bmatrix} s\end{bmatrix}\\ T_0对图形进行比例,旋转,反射和错切变换,T_1进行平移变化,T_2进行投影变换,T_3进行整体比例变换 T0?=[ac?bd?]T1?=[ef?]T2?=[p?q?]T3?=[s?]T0?对图形进行比例,旋转,反射和错切变换,T1?进行平移变化,T2?进行投影变换,T3?进行整体比例变换

二维图形基本几何变换矩阵

平移变换

平移变换是图形上每一个点移动相同的坐标,假设有一点 P ( x , y ) 移动到点 P ′ ( x ′ , y ′ ) P(x,y)移动到点P^{\prime}(x^{\prime},y^{\prime}) P(x,y)移动到点P(x,y)
{ x ′ = x + T x y ′ = y + T y ( T x , T y 是平移系数 ) \begin{cases} x^{\prime}=x+T_x\\ y^{\prime}=y+T_y \end{cases}(T_x,T_y是平移系数) {x=x+Tx?y=y+Ty??(Tx?,Ty?是平移系数)
设二维平移变换矩阵为T
[ x ′ y ′ 1 ] = [ x + T x y + T y 1 ] = T [ x y 1 ] 得到 T = [ 1 0 T x 0 1 T y 0 0 1 ] \begin{bmatrix} x^{\prime}\\y^{\prime}\\1 \end{bmatrix}=\begin{bmatrix}x+T_x\\y+T_y\\1\end{bmatrix}=T\begin{bmatrix}x\\y\\1\end{bmatrix}得到T=\begin{bmatrix}1&0&T_x\\0&1&T_y\\0&0&1\end{bmatrix} ?xy1? ?= ?x+Tx?y+Ty?1? ?=T ?xy1? ?得到T= ?100?010?Tx?Ty?1? ?

比例变换

P ( x , y ) 相对于原点,沿 x 轴方向缩放 S x 倍,沿 Y 轴方向缩放 S y 倍到点 P ′ ( x ′ , y ′ ) P(x,y)相对于原点,沿x轴方向缩放S_x倍,沿Y轴方向缩放S_y倍到点P_{\prime}(x^{\prime},y^{\prime}) P(x,y)相对于原点,沿x轴方向缩放Sx?倍,沿Y轴方向缩放Sy?倍到点P?(x,y)
设二维变换矩阵为T
[ x ′ y ′ 1 ] = [ x T x y T y 1 ] = T [ x y 1 ] 得到 T = [ T x 0 0 0 T y 0 0 0 1 ] \begin{bmatrix} x^{\prime}\\y^{\prime}\\1 \end{bmatrix}=\begin{bmatrix}xT_x\\yT_y\\1\end{bmatrix}=T\begin{bmatrix}x\\y\\1\end{bmatrix}得到T=\begin{bmatrix}T_x&0&0\\0&T_y&0\\0&0&1\end{bmatrix} ?xy1? ?= ?xTx?yTy?1? ?=T ?xy1? ?得到T= ?Tx?00?0Ty?0?001? ?

更一般的情况, P 相对于点 ( p x , p y ) 进行比例变换到 P ′ P相对于点(p_x,p_y)进行比例变换到P^{\prime} P相对于点(px?,py?)进行比例变换到P。有 { x ′ = S x ( x ? p x ) + p x y ′ = S y ( y ? p y ) + p y \begin{cases} x^{\prime}=S_x(x-p_x)+p_x\\ y^{\prime}=S_y(y-p_y)+p_y \end{cases} {x=Sx?(x?px?)+px?y=Sy?(y?py?)+py??
此时的二维变换矩阵T为 T = [ S x 0 p x ( 1 ? S x ) 0 S y p y ( 1 ? S y ) 0 0 1 ] \\T=\begin{bmatrix} S_x&0&p_x(1-S_x)\\ 0&S_y&p_y(1-S_y)\\ 0&0&1 \end{bmatrix} T= ?Sx?00?0Sy?0?px?(1?Sx?)py?(1?Sy?)1? ?

旋转变换

点P相对于坐标原点旋转一个角度 β \beta β得到点 P ′ P^{\prime} P
对点P,用极坐标可以表示成 { x = r cos ? α y = r sin ? α \begin{cases} x=r \cos\alpha\\y=r \sin\alpha \end{cases} {x=rcosαy=rsinα?
旋转后点 P ′ P^{\prime} P,用极坐标表示为 { x ′ = r cos ? ( α + β ) = r cos ? α cos ? β ? r sin ? α sin ? β = x cos ? β ? y sin ? β y ′ = r sin ? ( α + β ) = r sin ? α cos ? β + r cos ? α sin ? β = y cos ? β + x sin ? β \begin{cases} x^{\prime}=r\cos(\alpha+\beta)=r\cos\alpha\cos\beta-r\sin\alpha\sin\beta=x\cos\beta-y\sin\beta \\y^{\prime}=r\sin(\alpha+\beta)=r\sin\alpha\cos\beta+r\cos\alpha\sin\beta=y\cos\beta+x\sin\beta \end{cases} {x=rcos(α+β)=rcosαcosβ?rsinαsinβ=xcosβ?ysinβy=rsin(α+β)=rsinαcosβ+rcosαsinβ=ycosβ+xsinβ?
由此可以得到二维变换矩阵T
T = [ cos ? β ? sin ? β 0 sin ? β cos ? β 0 0 0 1 ] T=\begin{bmatrix} \cos\beta&-\sin\beta&0\\ \sin\beta&\cos\beta&0\\ 0&0&1 \end{bmatrix} T= ?cosβsinβ0??sinβcosβ0?001? ?

更一般的情况,点P绕点 ( p x , p y ) (p_x,p_y) (px?,py?)旋转角度 β \beta β
{ x ′ = ( x ? p x ) cos ? β ? ( y ? p y ) sin ? β + p x y ′ = ( x ? p x ) sin ? β + ( y ? p y ) cos ? β + p y \begin{cases} x^{\prime}=(x-p_x)\cos\beta-(y-p_y)\sin\beta+p_x\\ y^{\prime}=(x-p_x)\sin\beta+(y-p_y)\cos\beta+p_y \end{cases} {x=(x?px?)cosβ?(y?py?)sinβ+px?y=(x?px?)sinβ+(y?py?)cosβ+py??
此时的二维变换矩阵T为
T = [ cos ? β ? sin ? β p x ( 1 ? cos ? β ) + p y sin ? β sin ? β cos ? β p y ( 1 ? cos ? β ) ? p x sin ? β 0 0 1 ] T=\begin{bmatrix} \cos\beta&-\sin\beta&p_x(1-\cos\beta)+p_y\sin\beta\\ \sin\beta&\cos\beta&p_y(1-\cos\beta)-p_x\sin\beta\\ 0&0&1 \end{bmatrix} T= ?cosβsinβ0??sinβcosβ0?px?(1?cosβ)+py?sinβpy?(1?cosβ)?px?sinβ1? ?

对称变换

关于原点对称,二维变换矩阵T
T = [ ? 1 0 0 0 ? 1 0 0 0 1 ] T=\begin{bmatrix} -1&0&0\\ 0&-1&0\\ 0&0&1 \end{bmatrix} T= ??100?0?10?001? ?
关于x轴对称,二维变换矩阵T
T = [ 1 0 0 0 ? 1 0 0 0 1 ] T=\begin{bmatrix} 1&0&0\\ 0&-1&0\\ 0&0&1 \end{bmatrix} T= ?100?0?10?001? ?
关于轴对称,二维变换矩阵T
T = [ ? 1 0 0 0 1 0 0 0 1 ] T=\begin{bmatrix} -1&0&0\\ 0&1&0\\ 0&0&1 \end{bmatrix} T= ??100?010?001? ?
关于点 ( p x , p y ) (p_x,p_y) (px?,py?)对称的二维变换矩阵T
T = [ ? 1 0 2 p x 0 ? 1 2 p y 0 0 1 ] T=\begin{bmatrix} -1&0&2p_x\\ 0&-1&2p_y\\ 0&0&1 \end{bmatrix} T= ??100?0?10?2px?2py?1? ?

错切变换

错切是点P相对于x,y轴进行不等量变化的过程。
相对于原点进行错切变换
{ x ′ = x + λ x y y ′ = λ y x + y \begin{cases} x^{\prime}=x+\lambda _x y\\y^{\prime}=\lambda _yx+y \end{cases} {x=x+λx?yy=λy?x+y?
二维变换矩阵T为 T = [ 1 λ x 0 λ y 1 0 0 0 1 ] T=\begin{bmatrix} 1&\lambda _x&0\\ \lambda _y&1&0\\ 0&0&1 \end{bmatrix} T= ?1λy?0?λx?10?001? ?
相对于点 ( p x , p y ) (p_x,p_y) (px?,py?)进行错切变换
{ x ′ = x + λ x ( y ? p x ) y ′ = λ y ( x ? p y ) + y \begin{cases} x^{\prime}=x+\lambda _x (y-p_x)\\y^{\prime}=\lambda _y(x-p_y)+y \end{cases} {x=x+λx?(y?px?)y=λy?(x?py?)+y?
二维变换矩阵T为 T = [ 1 λ x ? λ x p x λ y 1 ? λ y p y 0 0 1 ] T=\begin{bmatrix} 1&\lambda _x&-\lambda _xp_x\\ \lambda _y&1&-\lambda _yp_y\\ 0&0&1 \end{bmatrix} T= ?1λy?0?λx?10??λx?px??λy?py?1? ?

文章来源:https://blog.csdn.net/m0_72895175/article/details/135723512
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。