/** * Internal utilities for working with CSS transformations. * @name Transformations * @namespace * @private */ define(["lib/jquery", "lib/sylvester", "lib/decompose"], function($, Sylvester, decompose) { "use strict"; // given x, y, and a 3D transform (as a 16-element array), returns // {x: <int>, y: <int>} of the transformed point projected into 2D space. // var transformPoint = function(x, y, t) { // var vector = Sylvester.$V([x, y, 0, 1]); // var matrix = Sylvester.$M([[ t[0], t[1], t[2], t[3] ], // [ t[4], t[5], t[6], t[7] ], // [ t[8], t[9], t[10], t[11] ], // [ t[12], t[13], t[14], t[15] ]]); // // var transformed = matrix.multiply(vector); // return {x: transformed.e(1), y: transformed.e(2)} // } var Transformations = /** @lends Transformations */ { /** * Given a 16-element array representing a 3-D trasform, decomposes * it to a CSSMatrixDecomposed with the following properties: * * var decomposed = Transformations.decompose(someArray) * decomposed.perspective // => {x: <int>, y: <int>, z: <int>, w: <int>} * decomposed.translate // => {x: <int>, y: <int>, z: <int>} * decomposed.rotate // => {x: <int>, y: <int>, z: <int>} (radians) * decomposed.skew // => {x: <int>, y: <int>, z: <int>} * decomposed.scale // => {x: <int>, y: <int>, z: <int>} * */ decompose: function(array) { var matrix = { m11: array[0], m12: array[1], m13: array[2], m14: array[3], m21: array[4], m22: array[5], m23: array[6], m24: array[7], m31: array[8], m32: array[9], m33: array[10], m34: array[11], m41: array[12], m42: array[13], m43: array[14], m44: array[15], }; return decompose(matrix); } }; return Transformations; });