Math 提取旋转值并将其添加到maya矩阵

Math 提取旋转值并将其添加到maya矩阵,math,matrix,3d,maya,Math,Matrix,3d,Maya,我试图理解Maya 3d软件中4x4矩阵的基本数学,但我似乎找不到任何我能理解的场景的具体内容 我基本上有一个对象,其矩阵如下: 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0.8 0.5 0 0 -0.5 0.8 0 0 0 0 1 我知道buttom行表示平移,每行中的1表示缩放值 但是。。。如果将对象在X轴上旋转30*,则得到如下矩阵: 1 0 0 0 0 1 0 0 0 0 1 0 0

我试图理解Maya 3d软件中4x4矩阵的基本数学,但我似乎找不到任何我能理解的场景的具体内容

我基本上有一个对象,其矩阵如下:

1 0 0 0
0 1 0 0
0 0 1 0 
0 0 0 1
1  0      0    0
0  0.8    0.5  0
0  -0.5   0.8  0
0  0      0    1
我知道buttom行表示平移,每行中的1表示缩放值

但是。。。如果将对象在X轴上旋转30*,则得到如下矩阵:

1 0 0 0
0 1 0 0
0 0 1 0 
0 0 0 1
1  0      0    0
0  0.8    0.5  0
0  -0.5   0.8  0
0  0      0    1
首先,如果只知道矩阵,我将如何从数学上计算旋转x值


其次,如果只知道3d对象的旋转、平移和缩放,我将如何计算矩阵值?

当我们谈论Autodesk Maya时,我们可以使用OpenMaya API:

将maya.cmds作为cmds导入
将maya.api.OpenMaya作为om导入
#感兴趣的对象:
object=“pCube1”
#以16个浮点数的列表形式获取变换矩阵
m_list=cmds.xform(对象,查询=True,矩阵=True)
#创建MMatrix对象
m=om.MMatrix(m_列表)
#获取MTTransformationMatrix
mt=om.mt转换矩阵(m)
#轮换
旋转=旋转山()
#以弧度为单位的旋转(如同按xyz顺序旋转):
打印rot.x、rot.y、rot.z
#以度为单位的旋转:
打印om.MAngle(rot.x).asDegrees(),om.MAngle(rot.y).asDegrees(),om.MAngle(rot.z).asDegrees()

当我们谈论Autodesk Maya时,我们可以使用OpenMaya API:

将maya.cmds作为cmds导入
将maya.api.OpenMaya作为om导入
#感兴趣的对象:
object=“pCube1”
#以16个浮点数的列表形式获取变换矩阵
m_list=cmds.xform(对象,查询=True,矩阵=True)
#创建MMatrix对象
m=om.MMatrix(m_列表)
#获取MTTransformationMatrix
mt=om.mt转换矩阵(m)
#轮换
旋转=旋转山()
#以弧度为单位的旋转(如同按xyz顺序旋转):
打印rot.x、rot.y、rot.z
#以度为单位的旋转:
打印om.MAngle(rot.x).asDegrees(),om.MAngle(rot.y).asDegrees(),om.MAngle(rot.z).asDegrees()

看,这是一个复杂的读数。有一个方程是:``旋转矩阵=围绕x(ax)×围绕y(ay)×围绕z(az);``旋转但我把它理解为旋转矩阵=rx=30,ry=0,rz=0旋转矩阵=(30,0,0),这基本上是欧拉旋转值,我已经知道了。如果我阅读子线程,会有一些计算,但我对它有点迷茫。我是否在euler角上使用sin(rx)、sin(ry)和sin(rz),然后在其他地方应用该结果来计算新的矩阵值?不,每个绕轴旋转都有自己的矩阵(其中一些元素实际上是角度的sin、cos),基本上是将矩阵按所需顺序乘以对象。看见每个操作都有自己的矩阵,您只需将其乘以对象矩阵(通常从单位矩阵开始),因此,如果您想从矩阵中提取euler角度,请参见基本上首先从已知角度集和结果矩阵中检测乘法顺序,然后简单地从任何矩阵中计算角度(由相同的变换顺序创建)。平移和比例提取很容易(基向量和原始向量的大小直接是平移)…ex=10[deg],ey=20[deg],ez=30[deg]表示euler旋转?在步骤3中,我似乎不知道这些结果的数字来自何处。如果我使用ex'10'的sin,我不会得到示例中的0.173648,也不会从示例中矩阵x行的任何组合值得到该结果。M[8]代表矩阵值列表中的八个值?我不太明白我是否需要这个计算,或者它是否是我正在寻找的其他东西。看,这是一个复杂的读数。有一个等式是:``旋转矩阵=围绕x旋转(ax)*围绕y旋转(ay)*围绕z旋转(az)``但我把它读作旋转_矩阵=rx=30,ry=0,rz=0旋转_矩阵=(30,0,0),这基本上是欧拉旋转的值,我已经知道了。如果我读到子线程,会有一些计算,但我有点不知所措。我使用sin(rx),sin(ry)和sin(rz)吗在我的euler角上,然后在其他地方应用该结果来计算新的矩阵值?不,每个绕轴旋转都有自己的矩阵(其中一些元素实际上是角度的
sin,cos
)基本上,你把矩阵按所需的顺序乘以你的对象。看……每个操作都有自己的矩阵,你只需要把它乘以你的对象矩阵(通常从单位矩阵开始)所以,如果你想从矩阵中提取欧拉角,首先从已知的角度集合和结果矩阵中检测乘法顺序,然后简单地从任何矩阵(由相同的变换顺序创建)中计算角度。平移和比例提取很容易(基向量和原点向量的大小直接是平移)…ex=10度、ey=20度、ez=30度表示euler旋转?在步骤3中,我似乎不知道这些结果的数字来自何处。如果我使用ex'10'的sin,我不会得到示例中的0.173648,也不会从示例中矩阵x行的任何组合值得到该结果。M[8]代表矩阵值列表中的八个值?我不太明白我是否需要这个计算,或者它是我在寻找的其他东西。