gpt4 book ai didi

3d - 将 3d 4x4 旋转矩阵转换为 2d

转载 作者:行者123 更新时间:2023-12-03 02:29:11 25 4
gpt4 key购买 nike

假设我们有一个 4x4 矩阵,其索引如下:

00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33

如何将该矩阵中包含的旋转数据(忽略 z 轴,如果有帮助的话)转换为单个 2d 旋转角度(以弧度为单位)?

背景:我有一个从 Blender 导出为 Collada 格式的 3D .dae 动画。从技术上讲,动画是 2d 的,所有 z 轴值都是 0。我正在尝试将 4x4 矩阵转换为 2d 平移、旋转和缩放数据。

最佳答案

尺度矩阵S看起来像这样:

sx 0  0  0
0 sy 0 0
0 0 sz 0
0 0 0 1

翻译矩阵T看起来像这样:

1  0  0  0
0 1 0 0
0 0 1 0
tx ty tz 1

Z轴旋转矩阵R看起来像这样:

 cos(a) sin(a)  0  0
-sin(a) cos(a) 0 0
0 0 1 0
0 0 0 1

如果你有一个变换矩阵M ,它是 R 多次相乘的结果, TS矩阵。正在查看M ,这些乘法的顺序和次数未知。但是,如果我们假设 M=S*R*T我们可以将其分解为单独的矩阵。首先我们计算一下S*R*T :

        ( sx*cos(a) sx*sin(a) 0  0)       (m11 m12 m13 m14)
S*R*T = (-sy*sin(a) sy*cos(a) 0 0) = M = (m21 m22 m23 m24)
( 0 0 sz 0) (m31 m32 m33 m34)
( tx ty tz 1) (m41 m42 m43 m44)

由于我们知道这是一个 2D 转换,因此获得翻译非常简单:

translation = vector2D(tx, ty) = vector2D(m41, m42)

要计算旋转和缩放,我们可以使用sin(a)^2+cos(a)^2=1 :

(m11 / sx)^2 + (m12 / sx)^2 = 1
(m21 / sy)^2 + (m22 / sy)^2 = 1

m11^2 + m12^2 = sx^2
m21^2 + m22^2 = sy^2

sx = sqrt(m11^2 + m12^2)
sy = sqrt(m21^2 + m22^2)

scale = vector2D(sx, sy)

rotation_angle = atan2(sx*m22, sy*m12)

关于3d - 将 3d 4x4 旋转矩阵转换为 2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629737/

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