给定仿射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
如何从该矩阵中获取rotation
,shearX
和scaleX
的值?
答案 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。