src/cm/media/js/lib/yui/yui3-3.15.0/build/matrix/matrix-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('matrix', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * Matrix utilities.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * @class MatrixUtil
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @module matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
var MatrixUtil = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
         * Used as value for the _rounding method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
         * @property _rounder
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
        _rounder: 100000,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
         * Rounds values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
         * @method _round
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
        _round: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
            val = Math.round(val * MatrixUtil._rounder) / MatrixUtil._rounder;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
            return val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
         * Converts a radian value to a degree.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
         * @method rad2deg
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
         * @param {Number} rad Radian value to be converted.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
         * @return Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
        rad2deg: function(rad) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
            var deg = rad * (180 / Math.PI);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
            return deg;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
         * Converts a degree value to a radian.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
         * @method deg2rad
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
         * @param {Number} deg Degree value to be converted to radian.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
         * @return Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
        deg2rad: function(deg) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
            var rad = deg * (Math.PI / 180);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
            return rad;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
         * Converts an angle to a radian
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
         * @method angle2rad
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
         * @param {Objecxt} val Value to be converted to radian.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
         * @return Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
        angle2rad: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
            if (typeof val === 'string' && val.indexOf('rad') > -1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
                val = parseFloat(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
            } else { // default to deg
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
                val = MatrixUtil.deg2rad(parseFloat(val));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
            return val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
         * Converts a transform object to an array of column vectors.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
         * /                                             \
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
         * | matrix[0][0]   matrix[1][0]    matrix[2][0] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
         * | matrix[0][1]   matrix[1][1]    matrix[2][1] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
         * | matrix[0][2]   matrix[1][2]    matrix[2][2] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
         * \                                             /
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
         * @method getnxn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
        convertTransformToArray: function(matrix)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
            var matrixArray = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
                    [matrix.a, matrix.c, matrix.dx],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                    [matrix.b, matrix.d, matrix.dy],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
                    [0, 0, 1]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
                ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
            return matrixArray;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
         * Returns the determinant of a given matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
         * /                                             \
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
         * | matrix[0][0]   matrix[1][0]    matrix[2][0] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
         * | matrix[0][1]   matrix[1][1]    matrix[2][1] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
         * | matrix[0][2]   matrix[1][2]    matrix[2][2] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
         * | matrix[0][3]   matrix[1][3]    matrix[2][3] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
         * \                                             /
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
         * @method getDeterminant
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
         * @param {Array} matrix An nxn matrix represented an array of vector (column) arrays. Each vector array has index for each row.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
         * @return Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
        getDeterminant: function(matrix)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
            var determinant = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
                len = matrix.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
                i = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
                multiplier;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
            if(len == 2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
                return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
            for(; i < len; ++i)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
                multiplier = matrix[i][0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
                if(i % 2 === 0 || i === 0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
                    determinant += multiplier * MatrixUtil.getDeterminant(MatrixUtil.getMinors(matrix, i, 0));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
                else
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
                    determinant -= multiplier * MatrixUtil.getDeterminant(MatrixUtil.getMinors(matrix, i, 0));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
            return determinant;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
         * Returns the inverse of a matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
         * @method inverse
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
         * @param Array matrix An array representing an nxn matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
         * /                                             \
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
         * | matrix[0][0]   matrix[1][0]    matrix[2][0] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
         * | matrix[0][1]   matrix[1][1]    matrix[2][1] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
         * | matrix[0][2]   matrix[1][2]    matrix[2][2] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
         * | matrix[0][3]   matrix[1][3]    matrix[2][3] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
         * \                                             /
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
        inverse: function(matrix)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
            var determinant = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
                len = matrix.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
                i = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
                j,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
                inverse,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
                adjunct = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
                //vector representing 2x2 matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
                minor = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
            if(len === 2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
                determinant = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                inverse = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
                    [matrix[1][1] * determinant, -matrix[1][0] * determinant],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
                    [-matrix[0][1] * determinant, matrix[0][0] * determinant]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
                ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
            else
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
                determinant = MatrixUtil.getDeterminant(matrix);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
                for(; i < len; ++i)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
                    adjunct[i] = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
                    for(j = 0; j < len; ++j)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
                    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
                        minor = MatrixUtil.getMinors(matrix, j, i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
                        adjunct[i][j] = MatrixUtil.getDeterminant(minor);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
                        if((i + j) % 2 !== 0 && (i + j) !== 0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
                        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
                            adjunct[i][j] *= -1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
                inverse = MatrixUtil.scalarMultiply(adjunct, 1/determinant);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
            return inverse;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
         * Multiplies a matrix by a numeric value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
         * @method scalarMultiply
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
         * @param {Array} matrix The matrix to be altered.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
         * @param {Number} multiplier The number to multiply against the matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
        scalarMultiply: function(matrix, multiplier)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
            var i = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
                j,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
                len = matrix.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
            for(; i < len; ++i)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
                for(j = 0; j < len; ++j)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
                    matrix[i][j] = MatrixUtil._round(matrix[i][j] * multiplier);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
            return matrix;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
         * Returns the transpose for an nxn matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
         * @method transpose
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
         * @param matrix An nxn matrix represented by an array of vector arrays.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
        transpose: function(matrix)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
            var len = matrix.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
                i = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
                j = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
                transpose = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
            for(; i < len; ++i)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
                transpose[i] = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
                for(j = 0; j < len; ++j)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
                    transpose[i].push(matrix[j][i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
            return transpose;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
         * Returns a matrix of minors based on a matrix, column index and row index.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
         * @method getMinors
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
         * @param {Array} matrix The matrix from which to extract the matrix of minors.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
         * @param {Number} columnIndex A zero-based index representing the specified column to exclude.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
         * @param {Number} rowIndex A zero-based index represeenting the specified row to exclude.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
        getMinors: function(matrix, columnIndex, rowIndex)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
            var minors = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
                len = matrix.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
                i = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
                j,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
                column;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
            for(; i < len; ++i)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
                if(i !== columnIndex)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
                    column = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
                    for(j = 0; j < len; ++j)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
                    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
                        if(j !== rowIndex)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
                        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
                            column.push(matrix[i][j]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
                    minors.push(column);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
            return minors;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
         * Returns the sign of value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
         * @method sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
         * @param {Number} val value to be interpreted
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
         * @return Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
        sign: function(val)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
            return val === 0 ? 1 : val/Math.abs(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
         * Multiplies a vector and a matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
         * @method vectorMatrixProduct
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
         * @param {Array} vector Array representing a column vector
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
         * @param {Array} matrix Array representing an nxn matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
        vectorMatrixProduct: function(vector, matrix)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
            var i,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
                j,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
                len = vector.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
                product = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
                rowProduct;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
            for(i = 0; i < len; ++i)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
                rowProduct = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
                for(j = 0; j < len; ++j)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
                    rowProduct += vector[i] * matrix[i][j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
                product[i] = rowProduct;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
            return product;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
         * Breaks up a 2d transform matrix into a series of transform operations.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
         * @method decompose
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
         * @param {Array} matrix A 3x3 multidimensional array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
        decompose: function(matrix)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
            var a = parseFloat(matrix[0][0]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
                b = parseFloat(matrix[1][0]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
                c = parseFloat(matrix[0][1]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
                d = parseFloat(matrix[1][1]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
                dx = parseFloat(matrix[0][2]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
                dy = parseFloat(matrix[1][2]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
                rotate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
                sx,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
                sy,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
                shear;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
            if((a * d - b * c) === 0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
                return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
            //get length of vector(ab)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
            sx = MatrixUtil._round(Math.sqrt(a * a + b * b));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
            //normalize components of vector(ab)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
            a /= sx;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
            b /= sx;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
            shear = MatrixUtil._round(a * c + b * d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
            c -= a * shear;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
            d -= b * shear;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
            //get length of vector(cd)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
            sy = MatrixUtil._round(Math.sqrt(c * c + d * d));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
            //normalize components of vector(cd)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
            c /= sy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
            d /= sy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
            shear /=sy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
            shear = MatrixUtil._round(MatrixUtil.rad2deg(Math.atan(shear)));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
            rotate = MatrixUtil._round(MatrixUtil.rad2deg(Math.atan2(matrix[1][0], matrix[0][0])));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
            return [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
                ["translate", dx, dy],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
                ["rotate", rotate],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
                ["skewX", shear],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
                ["scale", sx, sy]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
         * Parses a transform string and returns an array of transform arrays.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
         * @method getTransformArray
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
         * @param {String} val A transform string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
        getTransformArray: function(transform) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
            var re = /\s*([a-z]*)\(([\w,\.,\-,\s]*)\)/gi,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
                transforms = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
                args,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
                m,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
                decomp,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
                methods = MatrixUtil.transformMethods;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
            while ((m = re.exec(transform))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
                if (methods.hasOwnProperty(m[1]))
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
                    args = m[2].split(',');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
                    args.unshift(m[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
                    transforms.push(args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
                else if(m[1] == "matrix")
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
                    args = m[2].split(',');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
                    decomp = MatrixUtil.decompose([
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
                        [args[0], args[2], args[4]],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
                        [args[1], args[3], args[5]],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
                        [0, 0, 1]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
                    ]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
                    transforms.push(decomp[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
                    transforms.push(decomp[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
                    transforms.push(decomp[2]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
                    transforms.push(decomp[3]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
            return transforms;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
         * Returns an array of transform arrays representing transform functions and arguments.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
         * @method getTransformFunctionArray
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
         * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
        getTransformFunctionArray: function(transform) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
            var list;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
            switch(transform)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
                case "skew" :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
                    list = [transform, 0, 0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
                case "scale" :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
                    list = [transform, 1, 1];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
                case "scaleX" :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
                    list = [transform, 1];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
                case "scaleY" :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
                    list = [transform, 1];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
                case "translate" :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
                    list = [transform, 0, 0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
                default :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
                    list = [transform, 0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
            return list;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
         * Compares to arrays or transform functions to ensure both contain the same functions in the same
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
         * order.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
         * @method compareTransformSequence
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
         * @param {Array} list1 Array to compare
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
         * @param {Array} list2 Array to compare
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
         * @return Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
        compareTransformSequence: function(list1, list2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
        {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
            var i = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
                len = list1.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
                len2 = list2.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
                isEqual = len === len2;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
            if(isEqual)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
                for(; i < len; ++i)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
                    if(list1[i][0] != list2[i][0])
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
                    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
                        isEqual = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
            return isEqual;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
         * Mapping of possible transform method names.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
         * @property transformMethods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
         * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
        transformMethods: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
            rotate: "rotate",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
            skew: "skew",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
            skewX: "skewX",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
            skewY: "skewY",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
            translate: "translate",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
            translateX: "translateX",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
            translateY: "tranlsateY",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
            scale: "scale",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
            scaleX: "scaleX",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
            scaleY: "scaleY"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
Y.MatrixUtil = MatrixUtil;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
 * Matrix is a class that allows for the manipulation of a transform matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
 * This class is a work in progress.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
 * @class Matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
 * @module matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
var Matrix = function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
    this.init(config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
Matrix.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
     * Used as value for the _rounding method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
     * @property _rounder
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
    _rounder: 100000,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
     * Updates the matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
     * @method multiple
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
     * @param {Number} a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
     * @param {Number} b
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
     * @param {Number} c
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
     * @param {Number} d
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
     * @param {Number} dx
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
     * @param {Number} dy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
    multiply: function(a, b, c, d, dx, dy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
        var matrix = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
            matrix_a = matrix.a * a + matrix.c * b,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
            matrix_b = matrix.b * a + matrix.d * b,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
            matrix_c = matrix.a * c + matrix.c * d,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
            matrix_d = matrix.b * c + matrix.d * d,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
            matrix_dx = matrix.a * dx + matrix.c * dy + matrix.dx,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
            matrix_dy = matrix.b * dx + matrix.d * dy + matrix.dy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
        matrix.a = this._round(matrix_a);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
        matrix.b = this._round(matrix_b);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
        matrix.c = this._round(matrix_c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
        matrix.d = this._round(matrix_d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
        matrix.dx = this._round(matrix_dx);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
        matrix.dy = this._round(matrix_dy);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
     * Parses a string and updates the matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
     * @method applyCSSText
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
     * @param {String} val A css transform string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
    applyCSSText: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
        var re = /\s*([a-z]*)\(([\w,\.,\-,\s]*)\)/gi,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
            args,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
            m;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
        val = val.replace(/matrix/g, "multiply");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
        while ((m = re.exec(val))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
            if (typeof this[m[1]] === 'function') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
                args = m[2].split(',');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
                this[m[1]].apply(this, args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
     * Parses a string and returns an array of transform arrays.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
     * @method getTransformArray
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
     * @param {String} val A css transform string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
     * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
    getTransformArray: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
        var re = /\s*([a-z]*)\(([\w,\.,\-,\s]*)\)/gi,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
            transforms = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
            args,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
            m;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
        val = val.replace(/matrix/g, "multiply");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
        while ((m = re.exec(val))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
            if (typeof this[m[1]] === 'function') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
                args = m[2].split(',');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
                args.unshift(m[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
                transforms.push(args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
        return transforms;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
     * Default values for the matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
     * @property _defaults
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
    _defaults: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
        a: 1,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
        b: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
        c: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
        d: 1,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
        dx: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
        dy: 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
     * Rounds values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
     * @method _round
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
    _round: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
        val = Math.round(val * this._rounder) / this._rounder;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
        return val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
     * Initializes a matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
     * @method init
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
     * @param {Object} config Specified key value pairs for matrix properties. If a property is not explicitly defined in the config argument,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
     * the default value will be used.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
    init: function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
        var defaults = this._defaults,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
            prop;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
        config = config || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
        for (prop in defaults) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
            if(defaults.hasOwnProperty(prop))
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
                this[prop] = (prop in config) ? config[prop] : defaults[prop];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
        this._config = config;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
     * Applies a scale transform
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
     * @method scale
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
     * @param {Number} val
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
    scale: function(x, y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
        this.multiply(x, 0, 0, y, 0, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
     * Applies a skew transformation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
     * @method skew
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
     * @param {Number} x The value to skew on the x-axis.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
     * @param {Number} y The value to skew on the y-axis.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
    skew: function(x, y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
        x = x || 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
        y = y || 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
        if (x !== undefined) { // null or undef
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
            x = Math.tan(this.angle2rad(x));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
        if (y !== undefined) { // null or undef
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
            y = Math.tan(this.angle2rad(y));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
        this.multiply(1, y, x, 1, 0, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
     * Applies a skew to the x-coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
     * @method skewX
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
     * @param {Number} x x-coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
    skewX: function(x) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
        this.skew(x);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
     * Applies a skew to the y-coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
     * @method skewY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
     * @param {Number} y y-coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
    skewY: function(y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
        this.skew(null, y);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
     * Returns a string of text that can be used to populate a the css transform property of an element.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
     * @method toCSSText
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
     * @return String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
    toCSSText: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
        var matrix = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
            text = 'matrix(' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
                    matrix.a + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
                    matrix.b + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
                    matrix.c + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
                    matrix.d + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
                    matrix.dx + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
                    matrix.dy + ')';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
        return text;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
     * Returns a string that can be used to populate the css filter property of an element.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
     * @method toFilterText
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
     * @return String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
    toFilterText: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
        var matrix = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
            text = 'progid:DXImageTransform.Microsoft.Matrix(';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
        text +=     'M11=' + matrix.a + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
                    'M21=' + matrix.b + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
                    'M12=' + matrix.c + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
                    'M22=' + matrix.d + ',' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
                    'sizingMethod="auto expand")';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
        text += '';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
        return text;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
     * Converts a radian value to a degree.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
     * @method rad2deg
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
     * @param {Number} rad Radian value to be converted.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
     * @return Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
    rad2deg: function(rad) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
        var deg = rad * (180 / Math.PI);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
        return deg;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
     * Converts a degree value to a radian.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
     * @method deg2rad
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
     * @param {Number} deg Degree value to be converted to radian.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
     * @return Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
    deg2rad: function(deg) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
        var rad = deg * (Math.PI / 180);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
        return rad;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
    angle2rad: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
        if (typeof val === 'string' && val.indexOf('rad') > -1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
            val = parseFloat(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
        } else { // default to deg
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
            val = this.deg2rad(parseFloat(val));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
        return val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
     * Applies a rotate transform.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
     * @method rotate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
     * @param {Number} deg The degree of the rotation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
    rotate: function(deg, x, y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
        var rad = this.angle2rad(deg),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
            sin = Math.sin(rad),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
            cos = Math.cos(rad);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
        this.multiply(cos, sin, 0 - sin, cos, 0, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
     * Applies translate transformation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
     * @method translate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
     * @param {Number} x The value to transate on the x-axis.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
     * @param {Number} y The value to translate on the y-axis.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
    translate: function(x, y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
        x = parseFloat(x) || 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
        y = parseFloat(y) || 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
        this.multiply(1, 0, 0, 1, x, y);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
     * Applies a translate to the x-coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
     * @method translateX
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
     * @param {Number} x x-coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
    translateX: function(x) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
        this.translate(x);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
     * Applies a translate to the y-coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
     * @method translateY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
     * @param {Number} y y-coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
    translateY: function(y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
        this.translate(null, y);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
     * Returns an identity matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
     * @method identity
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
     * @return Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
    identity: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
        var config = this._config,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
            defaults = this._defaults,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
            prop;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
        for (prop in config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
            if (prop in defaults) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
                this[prop] = defaults[prop];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
     * Returns a 3x3 Matrix array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
     * /                                             \
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
     * | matrix[0][0]   matrix[1][0]    matrix[2][0] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
     * | matrix[0][1]   matrix[1][1]    matrix[2][1] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
     * | matrix[0][2]   matrix[1][2]    matrix[2][2] |
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
     * \                                             /
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
     * @method getMatrixArray
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
     * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
    getMatrixArray: function()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
        var matrix = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
            matrixArray = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
                [matrix.a, matrix.c, matrix.dx],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
                [matrix.b, matrix.d, matrix.dy],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
                [0, 0, 1]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
        return matrixArray;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
     * Returns the left, top, right and bottom coordinates for a transformed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
     * item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
     * @method getContentRect
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
     * @param {Number} width The width of the item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
     * @param {Number} height The height of the item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
     * @param {Number} x The x-coordinate of the item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
     * @param {Number} y The y-coordinate of the item.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
     * @return Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
    getContentRect: function(width, height, x, y)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
        var left = !isNaN(x) ? x : 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
            top = !isNaN(y) ? y : 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
            right = left + width,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
            bottom = top + height,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
            matrix = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
            a = matrix.a,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
            b = matrix.b,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
            c = matrix.c,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
            d = matrix.d,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
            dx = matrix.dx,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
            dy = matrix.dy,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
            x1 = (a * left + c * top + dx),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
            y1 = (b * left + d * top + dy),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
            //[x2, y2]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
            x2 = (a * right + c * top + dx),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
            y2 = (b * right + d * top + dy),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
            //[x3, y3]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
            x3 = (a * left + c * bottom + dx),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
            y3 = (b * left + d * bottom + dy),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
            //[x4, y4]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
            x4 = (a * right + c * bottom + dx),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
            y4 = (b * right + d * bottom + dy);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
        return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
            left: Math.min(x3, Math.min(x1, Math.min(x2, x4))),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
            right: Math.max(x3, Math.max(x1, Math.max(x2, x4))),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
            top: Math.min(y2, Math.min(y4, Math.min(y3, y1))),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
            bottom: Math.max(y2, Math.max(y4, Math.max(y3, y1)))
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
     * Returns the determinant of the matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
     * @method getDeterminant
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
     * @return Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
    getDeterminant: function()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
        return Y.MatrixUtil.getDeterminant(this.getMatrixArray());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
     * Returns the inverse (in array form) of the matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
     * @method inverse
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
     * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
    inverse: function()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
        return Y.MatrixUtil.inverse(this.getMatrixArray());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
     * Returns the transpose of the matrix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
     * @method transpose
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
     * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
    transpose: function()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
        return Y.MatrixUtil.transpose(this.getMatrixArray());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
     * Returns an array of transform commands that represent the matrix.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
     * @method decompose
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
     * @return Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
    decompose: function()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
    {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
        return Y.MatrixUtil.decompose(this.getMatrixArray());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
Y.Matrix = Matrix;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
}, '@VERSION@', {"requires": ["yui-base"]});