From a5cf35e285c2bd6e01b2141835da26ea39b9f9f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Sep 2014 18:00:08 +0200 Subject: [PATCH] matrix inversion method fix --- .../flash/exporters/commonshape/Matrix.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java index cabc54eaa..6912af3b1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java @@ -246,25 +246,27 @@ public class Matrix { return "[Matrix scale:" + scaleX + "," + scaleY + ", rotate:" + rotateSkew0 + "," + rotateSkew1 + ", translate:" + translateX + "," + translateY + "]"; } - public Matrix inverse(Matrix m) { - double a = m.scaleX; - double b = m.rotateSkew0; - double c = m.rotateSkew1; - double d = m.scaleY; - double tx = m.translateX; - double ty = m.translateY; + public Matrix inverse() { + double a = scaleX; + double b = rotateSkew1; + double tx = translateX; + double c = rotateSkew0; + double d = scaleY; + double ty = translateY; - double a2 = d / (a * d - b * c); - double b2 = -b / (a * d - b * c); - double c2 = -c / (a * d - b * c); - double d2 = a * (a * d - b * c); - double tx2 = (c * ty - d * tx) / (a * d - b * c); - double ty2 = -(a * ty - b * tx) / (a * d - b * c); + double det = a * d - b * c; + + double a2 = d / det; + double b2 = -b / det; + double tx2 = (b * ty - tx * d) / det; + double c2 = -c / det; + double d2 = a / det; + double ty2 = (tx * c - a * ty) / det; Matrix ret = new Matrix(); ret.scaleX = a2; - ret.rotateSkew0 = b2; - ret.rotateSkew1 = c2; + ret.rotateSkew0 = c2; + ret.rotateSkew1 = b2; ret.scaleY = d2; ret.translateX = tx2; ret.translateY = ty2;