美文网首页
eular angle

eular angle

作者: asl_1da7 | 来源:发表于2020-09-22 10:35 被阅读0次

    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

    相关文章

      网友评论

          本文标题:eular angle

          本文链接:https://www.haomeiwen.com/subject/qhaiyktx.html