将矩阵转换为组件

Jam*_*ter 1 math transform matrix inverse

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

[a  b  tx]
[c  d  ty]
[0  0  1 ]
Run Code Online (Sandbox Code Playgroud)
  • 对于围绕原点的顺时针旋转,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


我怎样才能得到的值rotation,shearXscaleX从矩阵回来?

wil*_*lem 5

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

R=
a=cos(?)  c=sin(?)
b=-sin(?) d=cos(?)
Run Code Online (Sandbox Code Playgroud)

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

S=
a=s  b=k 
c=0  d=1
Run Code Online (Sandbox Code Playgroud)

现在应用FIRST旋转(R),THEN标度和剪切(S)将只是乘以矩阵,从而得到结果矩阵

S times R
a=s cos(?) - k sin(?)   b=s sin(?)+k cos(?)
c=-sin(theta)    d=cos(theta)
Run Code Online (Sandbox Code Playgroud)

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