diff --git a/packages/math/src/Matrix.js b/packages/math/src/Matrix.js index 5f4cd3a..5b68628 100644 --- a/packages/math/src/Matrix.js +++ b/packages/math/src/Matrix.js @@ -357,12 +357,6 @@ if (delta < 0.00001 || Math.abs(PI_2 - delta) < 0.00001) { transform.rotation = skewY; - - if (a < 0 && d >= 0) - { - transform.rotation += (transform.rotation <= 0) ? Math.PI : -Math.PI; - } - transform.skew.x = transform.skew.y = 0; } else diff --git a/packages/math/src/Matrix.js b/packages/math/src/Matrix.js index 5f4cd3a..5b68628 100644 --- a/packages/math/src/Matrix.js +++ b/packages/math/src/Matrix.js @@ -357,12 +357,6 @@ if (delta < 0.00001 || Math.abs(PI_2 - delta) < 0.00001) { transform.rotation = skewY; - - if (a < 0 && d >= 0) - { - transform.rotation += (transform.rotation <= 0) ? Math.PI : -Math.PI; - } - transform.skew.x = transform.skew.y = 0; } else diff --git a/packages/math/test/Matrix.js b/packages/math/test/Matrix.js index 5aeed05..fd19ce1 100644 --- a/packages/math/test/Matrix.js +++ b/packages/math/test/Matrix.js @@ -197,4 +197,23 @@ expect(transformInitial.ty).to.equal(transformDecomposed.ty); } }); + + it('should decompose corner case', function () + { + const matrix = new Matrix(); + const transform = new Transform(); + const result = transform.localTransform; + + matrix.a = -0.00001; + matrix.b = -1; + matrix.c = 1; + matrix.d = 0; + matrix.decompose(transform); + transform.updateLocalTransform(); + + expect(result.a).to.closeTo(matrix.a, 0.001); + expect(result.b).to.closeTo(matrix.b, 0.001); + expect(result.c).to.closeTo(matrix.c, 0.001); + expect(result.d).to.closeTo(matrix.d, 0.001); + }); });