Spaces:
Sleeping
Sleeping
from .geometry_tools import * | |
def rep_to_rep(oldtype, newtype, rotations): | |
if newtype in ["matrix"]: | |
return to_matrix(oldtype, rotations) | |
if oldtype in ["rotvec", "axisangle"]: | |
return axis_angle_to(newtype, rotations) | |
elif oldtype in ["matrix"]: | |
return matrix_to(newtype, rotations) | |
else: | |
raise NotImplementedError("Only rotvec and matrix are supported.") | |
def nfeats_of(rottype): | |
if rottype in ["rotvec", "axisangle"]: | |
return 3 | |
elif rottype in ["rotquat", "quaternion"]: | |
return 4 | |
elif rottype in ["rot6d", "6drot", "rotation6d"]: | |
return 6 | |
elif rottype in ["rotmat"]: | |
return 9 | |
else: | |
return TypeError("This rotation type doesn't have features.") | |
def axis_angle_to(newtype, rotations): | |
if newtype in ["matrix"]: | |
rotations = axis_angle_to_matrix(rotations) | |
return rotations | |
elif newtype in ["rotmat"]: | |
rotations = axis_angle_to_matrix(rotations) | |
rotations = matrix_to("rotmat", rotations) | |
return rotations | |
elif newtype in ["rot6d", "6drot", "rotation6d"]: | |
rotations = axis_angle_to_matrix(rotations) | |
rotations = matrix_to("rot6d", rotations) | |
return rotations | |
elif newtype in ["rotquat", "quaternion"]: | |
rotations = axis_angle_to_quaternion(rotations) | |
return rotations | |
elif newtype in ["rotvec", "axisangle"]: | |
return rotations | |
else: | |
raise NotImplementedError | |
def matrix_to(newtype, rotations): | |
if newtype in ["matrix"]: | |
return rotations | |
if newtype in ["rotmat"]: | |
rotations = rotations.reshape((*rotations.shape[:-2], 9)) | |
return rotations | |
elif newtype in ["rot6d", "6drot", "rotation6d"]: | |
rotations = matrix_to_rotation_6d(rotations) | |
return rotations | |
elif newtype in ["rotquat", "quaternion"]: | |
rotations = matrix_to_quaternion(rotations) | |
return rotations | |
elif newtype in ["rotvec", "axisangle"]: | |
rotations = matrix_to_axis_angle(rotations) | |
return rotations | |
else: | |
raise NotImplementedError | |
def to_matrix(oldtype, rotations): | |
if oldtype in ["matrix"]: | |
return rotations | |
if oldtype in ["rotmat"]: | |
rotations = rotations.reshape((*rotations.shape[:-2], 3, 3)) | |
return rotations | |
elif oldtype in ["rot6d", "6drot", "rotation6d"]: | |
rotations = rotation_6d_to_matrix(rotations) | |
return rotations | |
elif oldtype in ["rotquat", "quaternion"]: | |
rotations = quaternion_to_matrix(rotations) | |
return rotations | |
elif oldtype in ["rotvec", "axisangle"]: | |
rotations = axis_angle_to_matrix(rotations) | |
return rotations | |
else: | |
raise NotImplementedError | |