Вопрос по matrix – Конвертировать матрицу вращения 3d 4x4 в 2d

3

Скажем, у нас есть матрица 4x4 с индексами, например:

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

Как преобразовать данные вращения (игнорируя ось z, если это помогает), содержащиеся в этой матрице, в один двумерный угол вращения (в радианах)?

Фон: у меня есть 3D .dae анимация, экспортированная из Blender в формат Collada. Технически анимация 2d, все значения по оси z равны 0. Я пытаюсь преобразовать матрицы 4x4 в 2d данные о перемещении, повороте и масштабировании.

Ваш Ответ

2   ответа
2

Error: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Nathanael Weiss
Error: User Rate Limit Exceeded
11

Error: User Rate Limit ExceededSError: User Rate Limit Exceeded

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

Error: User Rate Limit ExceededTError: User Rate Limit Exceeded

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

Error: User Rate Limit ExceededRError: User Rate Limit Exceeded

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

Error: User Rate Limit ExceededMError: User Rate Limit ExceededR, TError: User Rate Limit ExceededSError: User Rate Limit ExceededMError: User Rate Limit ExceededM=S*R*TError: User Rate Limit ExceededS*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)

Error: User Rate Limit Exceeded

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

Error: User Rate Limit Exceededsin(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)
Error: User Rate Limit Exceeded Nathanael Weiss
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededacosError: User Rate Limit Exceededa=atan2(sx*m22,sy*m12)Error: User Rate Limit Exceededa=atan2(-sy*m11,sx*m21)Error: User Rate Limit Exceededatan2(dx,dy)Error: User Rate Limit Exceededatan2(dy,dx)Error: User Rate Limit Exceeded

Похожие вопросы