Pytorch 如何将欧拉角转换为旋转矩阵?
这是一段关于转换的代码,我不知道为什么要执行前两步。是关于欧拉角理论的问题还是特定于代码的问题?是的,我已经阅读了理论,但我不明白如何使用代码来完成它仍然不明白您的问题。您是否不理解您发布的代码,或者不理解如何继续?对不起,我不理解我发布的代码。Pytorch 如何将欧拉角转换为旋转矩阵?,pytorch,Pytorch,这是一段关于转换的代码,我不知道为什么要执行前两步。是关于欧拉角理论的问题还是特定于代码的问题?是的,我已经阅读了理论,但我不明白如何使用代码来完成它仍然不明白您的问题。您是否不理解您发布的代码,或者不理解如何继续?对不起,我不理解我发布的代码。 def rot_from_axisangle(vec): angle = torch.norm(vec, 2, 2, True) axis = vec / (angle + 1e-7) ca = torch.cos(angle
def rot_from_axisangle(vec):
angle = torch.norm(vec, 2, 2, True)
axis = vec / (angle + 1e-7)
ca = torch.cos(angle)
sa = torch.sin(angle)
C = 1 - ca
x = axis[..., 0].unsqueeze(1)
y = axis[..., 1].unsqueeze(1)
z = axis[..., 2].unsqueeze(1)
xs = x * sa
ys = y * sa
zs = z * sa
xC = x * C
yC = y * C
zC = z * C
xyC = x * yC
yzC = y * zC
zxC = z * xC
rot = torch.zeros((vec.shape[0], 4, 4)).to(device=vec.device)
rot[:, 0, 0] = torch.squeeze(x * xC + ca)
rot[:, 0, 1] = torch.squeeze(xyC - zs)
rot[:, 0, 2] = torch.squeeze(zxC + ys)
rot[:, 1, 0] = torch.squeeze(xyC + zs)
rot[:, 1, 1] = torch.squeeze(y * yC + ca)
rot[:, 1, 2] = torch.squeeze(yzC - xs)
rot[:, 2, 0] = torch.squeeze(zxC - ys)
rot[:, 2, 1] = torch.squeeze(yzC + xs)
rot[:, 2, 2] = torch.squeeze(z * zC + ca)
rot[:, 3, 3] = 1
return rot