@@ -14,6 +14,7 @@ var TransformMatrix = function (a, b, c, d, tx, ty)
1414 ty = typeof ty === 'number' ? ty : 0 ;
1515
1616 this . matrix = new Float32Array ( [ a , b , c , d , tx , ty , 0 , 0 , 1 ] ) ;
17+
1718 this . decomposedMatrix = {
1819 translateX : 0 ,
1920 translateY : 0 ,
@@ -70,12 +71,14 @@ TransformMatrix.prototype.rotate = function (radian)
7071TransformMatrix . prototype . multiply = function ( otherMatrix )
7172{
7273 var matrix = this . matrix ;
74+
7375 var a0 = matrix [ 0 ] ;
7476 var b0 = matrix [ 1 ] ;
7577 var c0 = matrix [ 2 ] ;
7678 var d0 = matrix [ 3 ] ;
7779 var tx0 = matrix [ 4 ] ;
7880 var ty0 = matrix [ 5 ] ;
81+
7982 var a1 = otherMatrix [ 0 ] ;
8083 var b1 = otherMatrix [ 1 ] ;
8184 var c1 = otherMatrix [ 2 ] ;
@@ -96,6 +99,7 @@ TransformMatrix.prototype.multiply = function (otherMatrix)
9699TransformMatrix . prototype . transform = function ( a , b , c , d , tx , ty )
97100{
98101 var matrix = this . matrix ;
102+
99103 var a0 = matrix [ 0 ] ;
100104 var b0 = matrix [ 1 ] ;
101105 var c0 = matrix [ 2 ] ;
@@ -126,13 +130,8 @@ TransformMatrix.prototype.transformPoint = function (x, y, point)
126130 var tx = matrix [ 4 ] ;
127131 var ty = matrix [ 5 ] ;
128132
129- // point.x = x * a + y * c + tx;
130- // point.y = x * b + y * d + ty;
131-
132- var id = 1 / ( ( a * d ) + ( c * - b ) ) ;
133-
134- point . x = ( d * id * x ) + ( - c * id * y ) + ( ( ( ty * c ) - ( tx * d ) ) * id ) ;
135- point . y = ( a * id * y ) + ( - b * id * x ) + ( ( ( - ty * a ) + ( tx * b ) ) * id ) ;
133+ point . x = x * a + y * c + tx ;
134+ point . y = x * b + y * d + ty ;
136135
137136 return point ;
138137} ;
@@ -141,20 +140,21 @@ TransformMatrix.prototype.invert = function ()
141140{
142141 var matrix = this . matrix ;
143142
144- var a1 = matrix [ 0 ] ;
145- var b1 = matrix [ 1 ] ;
146- var c1 = matrix [ 2 ] ;
147- var d1 = matrix [ 3 ] ;
148- var tx1 = matrix [ 4 ] ;
149- var ty1 = matrix [ 5 ] ;
150- var n = a1 * d1 - b1 * c1 ;
151-
152- matrix [ 0 ] = d1 / n ;
153- matrix [ 1 ] = - b1 / n ;
154- matrix [ 2 ] = - c1 / n ;
155- matrix [ 3 ] = a1 / n ;
156- matrix [ 4 ] = ( c1 * ty1 - d1 * tx1 ) / n ;
157- matrix [ 5 ] = - ( a1 * ty1 - b1 * tx1 ) / n ;
143+ var a = matrix [ 0 ] ;
144+ var b = matrix [ 1 ] ;
145+ var c = matrix [ 2 ] ;
146+ var d = matrix [ 3 ] ;
147+ var tx = matrix [ 4 ] ;
148+ var ty = matrix [ 5 ] ;
149+
150+ var n = a * d - b * c ;
151+
152+ matrix [ 0 ] = d / n ;
153+ matrix [ 1 ] = - b / n ;
154+ matrix [ 2 ] = - c / n ;
155+ matrix [ 3 ] = a / n ;
156+ matrix [ 4 ] = ( c * ty - d * tx ) / n ;
157+ matrix [ 5 ] = - ( a * ty - b * tx ) / n ;
158158
159159 return this ;
160160} ;
@@ -176,43 +176,51 @@ TransformMatrix.prototype.setTransform = function (a, b, c, d, tx, ty)
176176TransformMatrix . prototype . decomposeMatrix = function ( )
177177{
178178 var decomposedMatrix = this . decomposedMatrix ;
179+
179180 var matrix = this . matrix ;
181+
180182 var a = matrix [ 0 ] ;
181183 var b = matrix [ 1 ] ;
182184 var c = matrix [ 2 ] ;
183185 var d = matrix [ 3 ] ;
186+
184187 var a2 = a * a ;
185188 var b2 = b * b ;
186189 var c2 = c * c ;
187190 var d2 = d * d ;
191+
188192 var sx = mathSqrt ( a2 + c2 ) ;
189193 var sy = mathSqrt ( b2 + d2 ) ;
190194
191195 decomposedMatrix . translateX = matrix [ 4 ] ;
192196 decomposedMatrix . translateY = matrix [ 5 ] ;
197+
193198 decomposedMatrix . scaleX = sx ;
194199 decomposedMatrix . scaleY = sy ;
200+
195201 decomposedMatrix . rotation = mathAcos ( a / sx ) * ( mathAtan ( - c / a ) < 0 ? - 1 : 1 ) ;
196202
197203 return decomposedMatrix ;
198204} ;
199205
200206/* identity + translate + rotate + scale */
201- TransformMatrix . prototype . applyITRS = function ( x , y , rotation , scaleX , scaleY )
207+ TransformMatrix . prototype . applyITRS = function ( x , y , rotation , scaleX , scaleY )
202208{
203209 var matrix = this . matrix ;
210+
204211 var a = 1 ;
205212 var b = 0 ;
206213 var c = 0 ;
207214 var d = 1 ;
208- var e = 0 ;
209- var f = 0 ;
215+ var tx = 0 ;
216+ var ty = 0 ;
217+
210218 var sr = mathSin ( rotation ) ;
211219 var cr = mathCos ( rotation ) ;
212220
213221 // Translate
214- matrix [ 4 ] = a * x + c * y + e ;
215- matrix [ 5 ] = b * x + d * y + f ;
222+ matrix [ 4 ] = a * x + c * y + tx ;
223+ matrix [ 5 ] = b * x + d * y + ty ;
216224
217225 // Rotate
218226 matrix [ 0 ] = cr * a + - sr * c ;
0 commit comments