Javascript / jQuery如何从矩阵值中获取比例的值

时间:2012-11-23 06:27:18

标签: javascript jquery matrix scale

首先获取矩阵。

this.getMatrix = function(obj)
{
    var matrix = obj.css("-webkit-transform") ||
                 obj.css("-moz-transform")    ||
                 obj.css("-ms-transform")     ||
                 obj.css("-o-transform")      ||
                 obj.css("transform");
    return matrix;
};

获得量表的价值。

this.getScaleDegrees = function(obj)
{
    var matrix = this.getMatrix(obj),
        matrixRegex = /matrix\((-?\d*\.?\d+),\s*0,\s*0,\s*(-?\d*\.?\d+),\s*0,\s*0\)/,
        matches = matrix.match(matrixRegex);
    return matches;
};

获取旋转的值。

this.getRotationDegrees = function(obj)
{
    var matrix = this.getMatrix(obj),
        angle = 0;

    if(matrix !== 'none') {
        var values = matrix.split('(')[1].split(')')[0].split(','),
            a = values[0],
            b = values[1];
        angle = Math.round(Math.atan2(b, a) * (180/Math.PI));
    }

    return angle;
};

现在,我遇到了一个问题 当存在元素的旋转和比例时,函数'getScaleDegrees'失败 由于函数'getRotationDegrees'正常运行,
我认为我将在函数'getRotationDegrees'的过程的帮助下编辑函数'getScaleDegrees'。

所以,问题是如何获得量表的价值。

有什么好的想法或计算方法吗?


编辑:

有一个改变比例和旋转的功能,每次比例和旋转的值都不同。函数'getMatrix'返回的值变为这样。

none [no rotate & no scale]  
matrix(1.2, 0, 0, 1.2, 0, 0) [edit scale]  
matrix(0.965926, -0.258819, 0.258819, 0.965926, 0, 0) [edit rotate]  
matrix(1.3523, -0.362347, 0.362347, 1.3523, 0, 0) [edit rotate & edit scale]

1 个答案:

答案 0 :(得分:2)

其中一个解决方案已经完成。

将矩阵转换为数组(thanx eicto)

this.parseMatrix = function(_str)
{
    return _str.replace(/^matrix(3d)?\((.*)\)$/,'$2').split(/, /);
};

获取比例值

this.getScaleDegrees = function(obj)
{
    var matrix = this.parseMatrix(this.getMatrix(obj)),
        scale = 1;

    if(matrix[0] !== 'none') {
        var a = matrix[0],
            b = matrix[1],
            d = 10;
        scale = Math.round( Math.sqrt( a*a + b*b ) * d ) / d;
    }

    return scale;
};

'Math.sqrt( a*a + b*b )'提到CSS-TRICKS