3D вращение матрицы из матрицы вращения - PullRequest
0 голосов
/ 11 марта 2019

У меня есть матрица (назовите ее T) с системой координат ( x , y , z ), которую мне нужно повернуть в новуюсистема координат, ( a , b , c ).Согласно этому источнику, матрица вращения R может быть определена следующим образом в декартовом пространстве:

R = [[ax, bx, cx],
     [ay, by, cy],
     [az, bz, cz]]

Я хочу реализовать вращение в python на моей исходной матрице,T, это дает мне новое изображение.T индексируется ( z , y , x ), как и все матрицы в numpy.До сих пор моя стратегия заключалась в следующем:

from scipy.ndimage import rotate as sp_rotate

# Get the rotation angles in each axis
theta_y = math.asin(R[0, 2])
theta_z = math.acos(R[0, 0] / math.cos(theta_y))
theta_x = math.acos(R[2, 2] / math.cos(theta_y))

# Convert them to degrees
theta_y = math.degrees(theta_y)
theta_z = math.degrees(theta_z)
theta_x = math.degrees(theta_x)

# Rotate along each axis
T = sp_rotate(T, -theta_x, axes=(0, 1), reshape=False, mode='reflect')
T = sp_rotate(T, -theta_y, axes=(0, 2), reshape=False, mode='reflect')
T = sp_rotate(T, -theta_z, axes=(1, 2), reshape=False, mode='reflect')

Есть ли способ определить вращение в питоне из матрицы вращения R без трех отдельных вращений вдоль каждой оси?

...