on de4e9ac help sign in
elk/libraries/Native/Matrix2D.js
88 lines 2.7 kB history raw
2Elm.Native.Matrix2D = function(elm) {
3 "use strict";
5 elm.Native = elm.Native || {};
6 if (elm.Native.Matrix2D) return elm.Native.Matrix2D;
8 if (typeof Float32Array === 'undefined'){ Float32Array = Array; }
9 var A = Float32Array;
11 // layout of matrix in an array is
12 //
13 // | m11 m12 dx |
14 // | m21 m22 dy |
15 // | 0 0 1 |
16 //
17 // new A([ m11, m12, dx, m21, m22, dy ])
19 var identity = new A([1,0,0,0,1,0]);
20 function matrix(m11, m12, m21, m22, dx, dy) {
21 return new A([m11, m12, dx, m21, m22, dy]);
22 }
23 function rotation(t) {
24 var c = Math.cos(t);
25 var s = Math.sin(t);
26 return new A([c, -s, 0, s, c, 0]);
27 }
29 function rotate(t,m) {
30 var c = Math.cos(t);
31 var s = Math.sin(t);
32 var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
33 return new A([m11*c + m12*s, -m11*s + m12*c, m[2],
34 m21*c + m22*s, -m21*s + m22*c, m[5]]);
35 }
36 /*
37 function move(xy,m) {
38 var x = xy._0;
39 var y = xy._1;
40 var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
41 return new A([m11, m12, m11*x + m12*y + m[2],
42 m21, m22, m21*x + m22*y + m[5]]);
43 }
44 function scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }
45 function scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }
46 function scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }
47 function reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }
48 function reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }
50 function transform(m11, m21, m12, m22, mdx, mdy, n) {
51 var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
52 return new A([m11*n11 + m12*n21,
53 m11*n12 + m12*n22,
54 m11*ndx + m12*ndy + mdx,
55 m21*n11 + m22*n21,
56 m21*n12 + m22*n22,
57 m21*ndx + m22*ndy + mdy]);
58 }
59 */
60 function multiply(m, n) {
61 var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5];
62 var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
63 return new A([m11*n11 + m12*n21,
64 m11*n12 + m12*n22,
65 m11*ndx + m12*ndy + mdx,
66 m21*n11 + m22*n21,
67 m21*n12 + m22*n22,
68 m21*ndx + m22*ndy + mdy]);
69 }
71 return elm.Native.Matrix2D = {
72 identity:identity,
73 matrix:F6(matrix),
74 rotation:rotation,
75 multiply:F2(multiply)
76 /*
77 transform:F7(transform),
78 rotate:F2(rotate),
79 move:F2(move),
80 scale:F2(scale),
81 scaleX:F2(scaleX),
82 scaleY:F2(scaleY),
83 reflectX:reflectX,
84 reflectY:reflectY
85 */
86 };
88};