gpt4 book ai didi

javascript - 找到矩阵变换的旋转和倾斜

转载 作者:可可西里 更新时间:2023-11-01 01:29:08 25 4
gpt4 key购买 nike

我在 CSS 中有以下变换矩阵

// rotate the element 60deg
element.style.transform = "matrix(0.5,0.866025,-0.866025,0.5,0,0)"

我可以用这个找到旋转......

// where a = [0.710138,0.502055,-0.57735,1,0,0]
var rotation = ((180/Math.PI) * Math.atan2( ((0*a[2])+(1*a[3])),((0*a[0])-(1*a[1]))) - 90
console.log(rotation); // ~60

类似的倾斜如果...

// skew(30deg,-50deg) 
element.style.transform = "matrix(1,-1.19175,0.57735,1,0,0)"

var skewY = ((180/Math.PI) * Math.atan2( ((0*a[2])+(1*a[3])),((0*a[0])-(1*a[1]))) - 90;
var skewX = (180/Math.PI) * Math.atan2( ((1*a[2])+(0*a[3])),((1*a[0])-(0*a[1])));

console.log([skewX,skewY]); // ~= [30,-50]

然而,一旦我同时使用倾斜和旋转,一切都会变得很奇怪,尤其是因为旋转公式与倾斜公式相同......所以公式不可能是正确的。

我如何确定应用了两个属性的旋转和倾斜,我只知道矩阵变换。

缩放也弄乱了我的偏斜值,我认为这不应该。

最佳答案

我需要相同的功能,今天我得到了这段运行良好的代码。

我从这里得到灵感: https://www.youtube.com/watch?v=51MRHjKSbtk来自 answer below , 没有提示 QR 分解 我永远找不到

我处理的是 2x2 案例,我将尝试扩展到 2x3 以包括翻译。但这应该很容易

var a = [a, b, c, d, e, f];
var qrDecompone = function(a) {
var angle = Math.atan2(a[1], a[0]),
denom = Math.pow(a[0], 2) + Math.pow(a[1], 2),
scaleX = Math.sqrt(denom),
scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,
skewX = Math.atan2(a[0] * a[2] + a[1] * a[3], denom);
return {
angle: angle / (Math.PI / 180), // this is rotation angle in degrees
scaleX: scaleX, // scaleX factor
scaleY: scaleY, // scaleY factor
skewX: skewX / (Math.PI / 180), // skewX angle degrees
skewY: 0, // skewY angle degrees
translateX: a[4], // translation point x
translateY: a[5] // translation point y
};
};

看起来 transformMatrix 中的最后两项在分解之前是翻译值。您可以直接提取它们。

关于javascript - 找到矩阵变换的旋转和倾斜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5107134/

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