如何从旋转/缩放中获取SVG变换矩阵值

时间:2012-05-01 00:58:55

标签: php matrix svg

基本上我正在寻找一个PHP函数或等式,它将输出SVG变换中使用的Matrix值。

我一直在寻找高低,不幸的是没有找到任何东西。

我很清楚rotate()和scale函数()但是这些并不是我需要的。

我需要能够以度数和x / y比例数据获取旋转角度,并以SVG变换格式矩阵(a,b,c,d,e,f)输出一系列值

理想情况下,我希望在PHP中这样做,但如上所述,标准数学方程式也有帮助。

希望有人能指出我正确的方向。

2 个答案:

答案 0 :(得分:3)

您可以通过乘以单个变换的矩阵来计算值。查看SVG specification以查找其定义:

rot(a)       := matrix(cos(a), sin(a), -sin(a), cos(a), 0, 0)
scale(sx,sy) := matrix(sx, 0, 0, sy, 0, 0)

根据应用变换的顺序(缩放前的旋转与旋转前的缩放),您可以得到不同的矩阵:

rot(a)*scale(sx,sy) = matrix(sx*cos(a), sx*sin(a), -sy*sin(a), sy*cos(a), 0, 0)
scale(sx,sy)*rot(a) = matrix(sx*cos(a), sy*sin(a), -sx*sin(a), sy*cos(a), 0, 0)

答案 1 :(得分:0)

function selectElement(evt) {
        selectedElement = evt.target;
        currentX = evt.clientX;
        currentY = evt.clientY;
        currentMatrix = selectedElement.getAttributeNS(null, "transform").slice(7, -1).split(' ');
        alert(currentMatrix );
    }`<svg><rect class="draggable" x="30" y="30" width="80" height="80" fill="blue" transform="matrix(1 0 0 1 0 0)"
        onmousedown="selectElement(evt)"</svg> />`