Dịch (tx, ty) có thể được viết dưới dạng ma trận:
1 0 tx
0 1 ty
0 0 1
Scale (sx, sy) có thể được viết dưới dạng ma trận:
sx 0 0
0 sy 0
0 0 1
Rotate (một) có thể được viết dưới dạng ma trận:
cos(a) -sin(a) 0
sin(a) cos(a) 0
0 0 1
Xoay (a, cx, c y) là sự kết hợp của một bản dịch bằng (-cx, cy), vòng xoay cảng gồm một mức độ và bản dịch trở lại (cx, cy), mang đến cho:
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
Nếu bạn chỉ cần nhân này với bản dịch ma trận bạn nhận được:
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
nào tương ứng với SVG chuyển đổi ma trận:
(cos(a), sin(a), -sin(a), cos(a), -cx × cos(a) + cy × sin(a) + cx + tx, -cx × sin(a) - cy × cos(a) + cy + ty)
.
Trong trường hợp của bạn là: matrix(0.866, -0.5 0.5 0.866 8.84 58.35)
.
Nếu bạn bao gồm quy mô (sx, sy) biến đổi, ma trận là:
(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)
Lưu ý rằng điều này giả định bạn đang làm biến đổi theo thứ tự bạn đã viết cho họ.
bạn có thể vui lòng xây dựng một, cx, cy, tx và ty không? để tôi có thể dùng thử. –
Trong ví dụ của bạn a = -30 (độ), cx = 10, cy = 25, tx = 20, ty = 50 (sx = 1, sy = 1).Nói chung, vòng quay được cho là xoay (a, cx, cy) và bản dịch là dịch (tx, ty). –
Xin lỗi nhưng trong 'Xoay (a, cx, cy)' thì dấu chấm đại diện cho '-cx.cos (a)' là gì? Đến từ một nền JavaScript tôi không hiểu ý nghĩa của việc áp dụng cos/sin cho một đối tượng trực tiếp, không có Math.cos(). –