translate(tx, ty) 可以写成矩阵形式:
1 0 tx
0 1 ty
0 0 1
scale(sx, sy)可以写成矩阵形式:
sx 0 0
0 sy 0
0 0 1
rotate(a)可以写成矩阵形式:
cos(a) -sin(a) 0
sin(a) cos(a) 0
0 0 1
rotate(a, cx, cy) 是通过 (cx, cy) 进行平移,旋转 a 度,然后再通过 (-cx, -cy) 进行平移的组合操作(
source)。将这些变换的矩阵相乘得到以下结果:
cos(a) -sin(a) -cx × cos(a) + cy × sin(a) + cx
sin(a) cos(a) -cx × sin(a) - cy × cos(a) + cy
0 0 1
如果你将translate(tx, ty)矩阵与rotate(a, cx, cy)矩阵相乘,你会得到:
cos(a) -sin(a) -cx × cos(a) + cy × sin(a) + cx + tx
sin(a) cos(a) -cx × sin(a) - cy × cos(a) + cy + ty
0 0 1
对应于SVG变换矩阵的是:
(cos(a), sin(a), -sin(a), cos(a), -cx × cos(a) + cy × sin(a) + cx + tx, -cx × sin(a) - cy × cos(a) + cy + ty)。
在您的情况下是:matrix(0.866, -0.5 0.5 0.866 8.84 58.35)。
如果您包括缩放(sx, sy)变换,矩阵为:
(sx × cos(a), sy × sin(a), -sx × sin(a), sy × cos(a), (-cx × cos(a) + cy × sin(a) + cx) × sx + tx, (-cx × sin(a) - cy × cos(a) + cy) × sy + ty)
请注意,这假设您按照您编写的顺序进行变换。
所以cx和cy是偏移量,而不是坐标...?
cx和cy是旋转围绕的中心坐标。它不一定在被旋转的图形内部。 - Jesse Chisholmmatrix
对我来说仍然是一个难以处理的问题。 - thednp