将矩阵转换为组件

时间:2012-06-17 09:16:46

标签: math matrix transform inverse

给定仿射2D变换矩阵,例如:

[a  b  tx]
[c  d  ty]
[0  0  1 ]
  • 要围绕原点顺时针旋转,a会转换cos (θ)b会转换sin (θ)

  • 对于scaleFactor sx的scaleX,a转换sx

  • 对于与x轴平行的剪切,x' = x + ky

  • 转换b k

在我的例子中,a被转换两次,通过旋转和缩放-x,b被转换两次,一次是通过旋转,一次是剪切。

轮换不再只是arcsin(b)

ScaleX不再只是1 / a

ShearX不再仅仅是x - ky


如何从该矩阵中获取rotationshearXscaleX的值?

1 个答案:

答案 0 :(得分:5)

所以旋转矩阵(完整)将是(我遗漏了无聊的部分)

R=
a=cos(θ)  c=sin(θ)
b=-sin(θ) d=cos(θ)

而尺度和剪切矩阵将是(再次,忽略钻孔部分)

S=
a=s  b=k 
c=0  d=1

现在应用FIRST旋转(R),那么缩放和剪切(S)只会乘以矩阵,从而得到矩阵

S times R
a=s cos(θ) - k sin(θ)   b=s sin(θ)+k cos(θ)
c=-sin(theta)    d=cos(theta)

如果你想从那里找回θ,s和k,你可以确定θ= arcsin(-c)。你知道sin(θ)和cos(θ),所以你可以用两个未知数求解两个线性方程(a = s cos(θ) - k sin(θ)b = s sin(θ)+ k cos(θ)找到s和k。