var m1={"a":-8.80408e-16,"b":-2.05409,"c":2.05409,"d":-8.80408e-16,"e":154.638,"f":465.722}
m={"a":-2.05409,"b":0,"c":0,"d":-2.05409,"e":656.608,"f":880.401}
function decomposeMatrix(m) {
var E = (m.a + m.d) / 2
var F = (m.a - m.d) / 2
var G = (m.c + m.b) / 2
var H = (m.c - m.b) / 2
var Q = Math.sqrt(E * E + H * H);
var R = Math.sqrt(F * F + G * G);
var a1 = Math.atan2(G, F);
var a2 = Math.atan2(H, E);
var theta = (a2 - a1) / 2;
var phi = (a2 + a1) / 2;
// The requested parameters are then theta,
// sx, sy, phi,
return {
translateX: m.e,
translateY: m.f,
rotate: -phi * 180 / Math.PI,
scaleX: Q + R,
scaleY: Q - R,
skew: -theta * 180 / Math.PI
};
}
function deltaTransformPoint(matrix, point) {
var dx = point.x * matrix.a + point.y * matrix.c + 0;
var dy = point.x * matrix.b + point.y * matrix.d + 0;
return { x: dx, y: dy };
}
function decomposeMatrix1(matrix) {
// calculate delta transform point
var px = deltaTransformPoint(matrix, { x: 0, y: 1 });
var py = deltaTransformPoint(matrix, { x: 1, y: 0 });
// calculate skew
var skewX = ((180 / Math.PI) * Math.atan2(px.y, px.x) - 90);
var skewY = ((180 / Math.PI) * Math.atan2(py.y, py.x));
return {
translateX: matrix.e,
translateY: matrix.f,
scaleX: Math.sqrt(matrix.a * matrix.a + matrix.b * matrix.b),
scaleY: Math.sqrt(matrix.c * matrix.c + matrix.d * matrix.d),
skewX: skewX,
skewY: skewY,
rotation: skewX // rotation is the same as skew x
};
}
alert(decomposeMatrix1(m))