DOMMatrix-invert-invertible.html (2397B)
1 <!DOCTYPE html> 2 <link rel="help" href="https://drafts.fxtf.org/geometry-1/#DOMMatrix"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="support/dommatrix-test-util.js"></script> 6 <p>Test DOMMatrix.inverse()/invertSelf() for invertible matrices</p> 7 <script> 8 test(function() { 9 var m = new DOMMatrix(); 10 assert_true(m.isIdentity); 11 var m1 = m.inverse(); 12 assert_true(m1.isIdentity); 13 checkMatrix(m, m1); 14 m.invertSelf(); 15 checkMatrix(m, m1); 16 }, "identity"); 17 18 test(function() { 19 var m = new DOMMatrix().translate(10, -20.5); 20 var m1 = m.inverse(); 21 checkMatrix(m1, new DOMMatrix().translate(-10, 20.5)); 22 // Check with 'new DOMMatrix()' instead of identity() because the latter is 23 // a 3d identity matrix. 24 checkMatrix(m1.multiply(m), new DOMMatrix()); 25 m.invertSelf(); 26 checkMatrix(m, m1); 27 }, "translate"); 28 29 test(function() { 30 var m = new DOMMatrix().translate(10, -20.5, 30.5); 31 var m1 = m.inverse(); 32 checkMatrix(m1, new DOMMatrix().translate(-10, 20.5, -30.5)); 33 checkMatrix(m1.multiply(m), identity()); 34 m.invertSelf(); 35 checkMatrix(m, m1); 36 }, "translate3d"); 37 38 test(function() { 39 var m = new DOMMatrix().scale(4, -0.5); 40 var m1 = m.inverse(); 41 checkMatrix(m1, new DOMMatrix().scale(0.25, -2.0)); 42 checkMatrix(m1.multiply(m), new DOMMatrix()); 43 m.invertSelf(); 44 checkMatrix(m, m1); 45 }, "scale"); 46 47 test(function() { 48 var m = new DOMMatrix().scale(4, -0.5, 2); 49 var m1 = m.inverse(); 50 checkMatrix(m1, new DOMMatrix().scale(0.25, -2.0, 0.5)); 51 checkMatrix(m1.multiply(m), identity()); 52 m.invertSelf(); 53 checkMatrix(m, m1); 54 }, "scale3d"); 55 56 test(function() { 57 var m = new DOMMatrix().rotateAxisAngle(0, 0, 1, -30) 58 .scale(10, -0.5, 2.5) 59 .rotateAxisAngle(0, 1, 0, 10) 60 .translate(10, -20.5, 30.5) 61 .rotateAxisAngle(1, 0, 0, 20); 62 var expected = new DOMMatrix().rotateAxisAngle(1, 0, 0, -20) 63 .translate(-10, 20.5, -30.5) 64 .rotateAxisAngle(0, 1, 0, -10) 65 .scale(0.1, -2.0, 0.4) 66 .rotateAxisAngle(0, 0, 1, 30); 67 var m1 = m.inverse(); 68 var epsilon = 1e-6; 69 checkMatrix(m1, expected, {epsilon}); 70 m.invertSelf(); 71 checkMatrix(m, expected, {epsilon}); 72 }, "complex"); 73 </script>