Math 获取两个矩阵之间的局部变换
我想知道两个矩阵之间的局部变换 举个例子,我有:Math 获取两个矩阵之间的局部变换,math,language-agnostic,coordinate-transformation,Math,Language Agnostic,Coordinate Transformation,我想知道两个矩阵之间的局部变换 举个例子,我有: Mat3 m = m3_identity(); m = mult(m, imgui.math.rotation(radians(22))); m = mult(m, imgui.math.translation(100, 0)); Mat3 m2 = mult(m, imgui.math.rotation(radians(45))); m2 = mult(m2, imgui.math.translation(100, 0)); Mat3 m3
Mat3 m = m3_identity();
m = mult(m, imgui.math.rotation(radians(22)));
m = mult(m, imgui.math.translation(100, 0));
Mat3 m2 = mult(m, imgui.math.rotation(radians(45)));
m2 = mult(m2, imgui.math.translation(100, 0));
Mat3 m3 = mult(m2, imgui.math.translation(100, 0));
// trash from here on
float tx = m3.m[0][2];
float ty = m3.m[1][2];
float parent_tx = m2.m[0][2];
float parent_ty = m2.m[1][2];
tx -= parent_tx;
ty -= parent_ty;
println(tx, ty); // expected 100, 0, got 39.07, 92.05
这将使:
我的目标是有嵌套的元素,我得到了工作,但我想显示它们的值
举个例子,在blender中我们可以有嵌套的元素(子元素)
现在,如果我们有最后一个立方体并查看变换属性:
从家长的角度来看,他们是这样的:
所以在我的例子中,我想知道从m2看m3的变换
在这种情况下,应该是x100和y0
我该怎么做
如果有帮助,我的矩阵就是:
static public class Mat3 {
public float[][] m = new float[3][3];
}
要计算对象的局部平移,仅减去对象及其父对象的全局位置是不够的。在您的例子中,您获得了一个范数为100的向量,正如预期的那样,但它也是定向的。要修复它,需要考虑父对象的方向。具体来说,你有
m3 = R1*T1 * R2*T2 * T3 = m2 * T3
其中,Ri
和Ti
是形成m
和m2
的旋转和平移矩阵。要获得T3
,请计算:
T3 = inverse(m2) * m3
注意:如果第三次变换还包括旋转(
m3=m2*R3*T3
),则需要计算T3=inverse(m2*R3)*m3
,如果第三次变换包括旋转未知该怎么办?那就不会痛了?或者如果涉及缩放呢?如果第三个变换包含未知旋转,则可以使用2x2子矩阵提取旋转。首先计算m23=逆(m2)*m3
,然后R3=提取子矩阵x22(m23)
,然后T3=逆(R3)*m23
。如果变换包含形式为Si*Ri*Ti
的比例,则同样适用