eular angle

pytorch3d.transforms.euler_angles_to_matrix详解

⚠️Attention

  • 绕轴旋转时,大拇指指向轴的负方向。例如angle = \pi/2, 绕X轴旋转,大拇指指向-X方向
  • 一般角度都是用弧度表示
  • conversion表示的是旋转的顺序:
    • XYZ表示依次按照 X, Y, Z的顺序旋转
    • ZYX表示依次按照 Z, Y, X的顺序旋转
  • points的坐标右乘旋转矩阵M(x,y,z) · M
  • 连续旋转时,依次在右边添加要乘的旋转矩阵(x,y,z) · M_1·M_2...
    下面是四个例子:
  1. X轴方向选择90°(图中的-X实际是指大拇指指向-X
  2. Z轴方向选择90°(图中的-Z实际是指大拇指指向-Z
  3. 先绕X轴方向选择90°,再绕Z轴方向选择90°
  4. 先绕Z轴方向选择90°,再绕X轴方向选择90°
import pytorch3d.transforms as pyt
import numpy as np
def rotate_matrix(angles, order):
    return pyt.euler_angles_to_matrix(angles, order)

from pytorch3d.transforms import Rotate  
def rotate(m, points):
    return  Rotate(m).transform_points(points)

points =  torch.Tensor([[1,-2,3],[4,5,6]])
  1. X轴方向选择90°(图中的-X实际是指大拇指指向-X
# rotate 90° around the -X direction
angles = torch.Tensor([np.pi/2,0,0])
m = rotate_matrix(angles, "XYZ")
new_points = roate(m, points)
  1. Z轴方向选择90°(图中的-Z实际是指大拇指指向-Z
# rotate 90° around the -Z direction
angles = torch.Tensor([0,0,np.pi/2])
m = rotate_matrix(angles, "XYZ")
new_points = roate(m, points)
  1. 先绕X轴方向选择90°,再绕Z轴方向选择90°
# rotate 90° around the -X direction then rotate 90° around the -Z direction
angles = torch.Tensor([np.pi/2,0,np.pi/2])
m = rotate_matrix(angles, "XYZ")
new_points = roate(m, points)
  1. 先绕Z轴方向选择90°,再绕X轴方向选择90°
# rotate 90° around the -Z direction then rotate 90° around the -X direction
angles = torch.Tensor([np.pi/2,0,np.pi/2])
m = rotate_matrix(angles, "ZYX")
new_points = roate(m, points)
image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。