gpt4 book ai didi

javascript - 如何从矩阵SVG中提取位置、旋转和缩放

转载 作者:数据小太阳 更新时间:2023-10-29 04:26:23 25 4
gpt4 key购买 nike

我有一个简单的问题:我想提取平移 (tx, ty)、旋转 (r) 和缩放 (sx, sy) 值,形成应用于我的 svg 元素的变换矩阵。

让我们用这个例子:

<g
id="myElement"
transform="matrix(0.93893241,0.34410162,-0.34410162,0.93893241,363.88475,-76.125919)"
>... </g>

如果我在 javascript 中这样做

document.getElementById("myElement").getCTM()

我可以访问 a、b、c、d、e、f 值。我怎样才能从那里得到 tx、ty、sx、sy 和 r?谢谢

最佳答案

受此 ActionScript 版本的启发:https://gist.github.com/fwextensions/2052247 ,我写了一个 JavaScript 端口:

    function deltaTransformPoint(matrix, point)  {

var dx = point.x * matrix.a + point.y * matrix.c + 0;
var dy = point.x * matrix.b + point.y * matrix.d + 0;
return { x: dx, y: dy };
}


function decomposeMatrix(matrix) {

// @see https://gist.github.com/2052247

// calculate delta transform point
var px = deltaTransformPoint(matrix, { x: 0, y: 1 });
var py = deltaTransformPoint(matrix, { x: 1, y: 0 });

// calculate skew
var skewX = ((180 / Math.PI) * Math.atan2(px.y, px.x) - 90);
var skewY = ((180 / Math.PI) * Math.atan2(py.y, py.x));

return {

translateX: matrix.e,
translateY: matrix.f,
scaleX: Math.sqrt(matrix.a * matrix.a + matrix.b * matrix.b),
scaleY: Math.sqrt(matrix.c * matrix.c + matrix.d * matrix.d),
skewX: skewX,
skewY: skewY,
rotation: skewX // rotation is the same as skew x
};
}

用法:decomposeMatrix(document.getElementById('myElement').getCTM())

关于javascript - 如何从矩阵SVG中提取位置、旋转和缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16359246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com