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