css – rotate3d速记

如何结合rotateX(50deg)rotateY(20deg)rotateZ(15deg)简写rotate3d()?

解决方法

rotateX(50deg)等价于rotate3d(1,50deg)

rotateY(20deg)相当于rotate3d(0,1,0,20deg)

rotateZ(15deg)等效于rotate3d(0,0,1,15deg)

所以…

rotateX(50deg)rotationY(20deg)rotateZ(15deg)

相当于

rotate3d(1,50deg)rotate3d(0,1,0,20deg)rotate3d(0,0,1,15deg)

对于一个通用的rotate3d(x,y,z,α),你有矩阵

哪里

现在,您可以为3个rotate3d变换中的每一个获取矩阵,并将它们相乘。并且结果矩阵是对应于所得到的单个rotate3d的矩阵。不知道如何轻松地提取rotate3d的值,但它确定很容易提取一个单一matrix3d的值。

在第一种情况下(rotateX(50deg)或rotate3d(1,50deg)),你有:

x = 1,y = 0,z = 0,α= 50deg

因此,在这种情况下矩阵的第一行是1 0 0 0。

第二个是0cos(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轴指向下,不向上。

因此,这些是需要乘以以获得4×4矩阵为所得单个rotate3d变换的三个4×4矩阵。正如我所说,我不知道如何容易得到4个值,但是4×4矩阵中的16个元素恰好是matrix3d等价于链接变换的16个参数。

编辑:

实际上,它很容易…你计算矩阵的矩阵的trace(对角线元素的总和)为rotate3d矩阵。

4-2 * 2 *(1-cos(α))/ 2 = 4-2 *(1-cos(α))= 2 2 * cos

然后,计算三个4×4矩阵的乘积的轨迹,将结果等同于提取α的2 2 * cos(α)。然后计算x,y,z。

在这种特殊情况下,如果我正确计算,从三个4×4矩阵的乘积产生的矩阵的轨迹将是:

T = 
cos(20deg)*cos(15deg) + 
cos(50deg)*cos(15deg) - sin(50deg)*sin(20deg)*cos(15deg) + 
cos(50deg)*cos(20deg) + 
1

因此cos(α)=(T-2)/ 2 = T / 2-1,这意味着α= acos(T / 2-1)。

相关文章

前言 最近项目做完,用户需要兼容IE,于是开展了兼容性的调整工作。边调整边想感叹IE真是个沙雕。。特将...
前言 有些属性不是很常用,但是工作中遇到了,记录一下,方便学习。 1、text-indent text-indent 属性规...
前言 政府网站会遇到公祭日的时候,网站整体颜色变灰的情况。今天正好调了一下。在此把解决方案分享给大...
需求 项目里有个消息中心,当有消息的时候,小铃铛图标可以晃两下,提示当前有信息。 实现过程 书写css...
html代码 css代码 效果图
在一些界面上 , 如果每个icon都去找图片还是相当麻烦的 , 直接使用css画出icon就方便的多了 , 下面两个...