如何在速记中组合rotateX(50deg) rotateY(20deg) rotateZ(15deg)
?
最佳答案
rotateX(50deg)
等于rotate3d(1, 0, 0, 50deg)
rotateY(20deg)
等于rotate3d(0, 1, 0, 20deg)
rotateZ(15deg)
等于rotate3d(0, 0, 1, 15deg)
所以…rotateX(50deg) rotateY(20deg) rotateZ(15deg)
相当于rotate3d(1, 0, 0, 50deg) rotate3d(0, 1, 0, 20deg) rotate3d(0, 0, 1, 15deg)
对于一般的rotate3d(x, y, z, α)
,有矩阵
在哪里?
现在得到3个rotate3d
变换的矩阵,并将它们相乘。生成的矩阵是与生成的单个rotate3d
对应的矩阵。不知道如何简单地从中提取rotate3d
的值,但是很容易为单个matrix3d
提取这些值。
在第一种情况下(rotateX(50deg)
或rotate3d(1, 0, 0, 50deg)
),您有:x = 1
,y = 0
,z = 0
,α = 50deg
在这种情况下,矩阵的第一行是1 0 0 0
。
第二种是0 cos(50deg) -sin(50deg) 0
。
第三个0 sin(50deg) cos(50deg) 0
。
第四个明显是0 0 0 1
。
在第二种情况下,您有x = 0
,y = 1
,z = 0
,α = 20deg
。
第一行:cos(20deg) 0 sin(20deg) 0
。
第二排:0 1 0 0
。
第三行:-sin(20) 0 cos(20deg) 0
。
第四:0 0 0 1
在第三种情况下,您有x = 0
,y = 0
,z = 1
,α = 15deg
。
第一行:cos(15deg) -sin(15deg) 0 0
。
第二排sin(15deg) cos(15deg) 0 0
。
第三排和第四排分别为0 0 1 0
和0 0 0 1
。
注意:您可能已经注意到rotatey变换的sin值符号与其他两个变换的sin值符号不同。这不是计算错误。原因是,对于屏幕,y轴指向下,而不是向上。
因此,这是三个4x4
矩阵,需要对它们进行乘法运算,才能得到结果单个4x4
变换的rotate3d
矩阵。正如我所说,我不确定这4个值有多容易得到,但4x4矩阵中的16个元素正是链变换的16个参数。
编辑:
事实上,这很容易…计算matrix3d
矩阵的矩阵轨迹(对角线元素之和)。rotate3d
然后计算三个4 - 2*2*(1 - cos(α))/2 = 4 - 2*(1 - cos(α)) = 2 + 2*cos(α)
矩阵乘积的轨迹,将结果与提取的4x4
相等。然后计算2 + 2*cos(α)
,α
,x
。
在这种特殊情况下,如果我计算正确,由三个y
矩阵的乘积得到的矩阵轨迹将是:
T =
cos(20deg)*cos(15deg) +
cos(50deg)*cos(15deg) - sin(50deg)*sin(20deg)*cos(15deg) +
cos(50deg)*cos(20deg) +
1
所以
z
,这意味着4x4
。