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,shearX和scaleX从矩阵回来?
所以旋转矩阵(完整)将是(我省去了无聊的部分)
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.