Пример #1
0
def twist_around_axis(thread, angle1, angle2, axis):
    xyz = thread.getXYZ()
    cons = thread.getConstraints()
    mat1 = euler2mat(*cons[3:6])
    mat2 = euler2mat(*cons[9:12])
    tmat1 = euler2mat(*angle_axis2euler(angle1, axis))
    tmat2 = euler2mat(*angle_axis2euler(angle2, axis))
    newmat1 = dot(tmat1, mat1)
    newmat2 = dot(tmat2, mat2)
    neweul1 = mat2euler(newmat1)
    neweul2 = mat2euler(newmat2)

    cons[3:6] = neweul1
    cons[9:12] = neweul2
    thread.setConstraints(cons)
Пример #2
0
def twist_around_axis(thread,angle1,angle2,axis):
    xyz = thread.getXYZ()
    cons = thread.getConstraints()    
    mat1 = euler2mat(*cons[3:6])
    mat2 = euler2mat(*cons[9:12])
    tmat1 = euler2mat(*angle_axis2euler(angle1,axis))
    tmat2 = euler2mat(*angle_axis2euler(angle2,axis))    
    newmat1 = dot(tmat1,mat1)
    newmat2 = dot(tmat2,mat2)
    neweul1 = mat2euler(newmat1)
    neweul2 = mat2euler(newmat2)

    cons[3:6] = neweul1
    cons[9:12] = neweul2
    thread.setConstraints(cons)
Пример #3
0
def twist_ctrl(thread, angle1, angle2):
    xyz = thread.getXYZ()
    axis1 = xyz[:, 1] - xyz[:, 0]
    axis2 = xyz[:, -1] - xyz[:, -2]
    cons = thread.getConstraints()
    mat1 = euler2mat(*cons[3:6])
    mat2 = euler2mat(*cons[9:12])
    tmat1 = euler2mat(*angle_axis2euler(angle1, axis1))
    tmat2 = euler2mat(*angle_axis2euler(angle2, axis2))
    newmat1 = dot(tmat1, mat1)
    newmat2 = dot(tmat2, mat2)
    neweul1 = mat2euler(newmat1)
    neweul2 = mat2euler(newmat2)

    #print "orig",cons[blah]
    cons[3:6] = neweul1
    cons[9:12] = neweul2
    thread.setConstraints(cons)
Пример #4
0
def twist_ctrl(thread,angle1,angle2):
    xyz = thread.getXYZ()
    axis1 = xyz[:,1] - xyz[:,0]
    axis2 = xyz[:,-1] - xyz[:,-2]
    cons = thread.getConstraints()
    mat1 = euler2mat(*cons[3:6])
    mat2 = euler2mat(*cons[9:12])
    tmat1 = euler2mat(*angle_axis2euler(angle1,axis1))
    tmat2 = euler2mat(*angle_axis2euler(angle2,axis2))
    newmat1 = dot(tmat1,mat1)
    newmat2 = dot(tmat2,mat2)
    neweul1 = mat2euler(newmat1)
    neweul2 = mat2euler(newmat2)

    
    #print "orig",cons[blah]
    cons[3:6] = neweul1
    cons[9:12] = neweul2
    thread.setConstraints(cons)
Пример #5
0
    def euler(self):
        """
        Calculate Euler angles for all affine transformations

        Notes
        -----
        This only makes sense, if the affine transformations are rigid.
        """
        assert self.are_rigid, 'affines must be rigid'
        euler = np.zeros((self.n, 3))
        for t in range(self.n):
            euler[t] = mat2euler(self.affines[t, :3, :3])
        return euler
Пример #6
0
def aff2euler(affine):
    """
    Compute Euler angles from 4 x 4 `affine`

    Parameters
    ----------
    affine : 4 by 4 array
        An affine transformation matrix

    Returns
    -------
    The Euler angles associated with the affine
    """
    return euler.mat2euler(aff2rot_zooms(affine)[0])
Пример #7
0
def aff2euler(affine):
    """
    Compute Euler angles from 4 x 4 `affine`

    Parameters
    ----------
    affine : 4 by 4 array
        An affine transformation matrix

    Returns
    -------
    The Euler angles associated with the affine
    """
    return euler.mat2euler(aff2rot_zooms(affine)[0])
Пример #8
0
def mat2euler(M):
    """Return Euler angles according to z, y, x
    intrinsic rotation according z, y, x
    M = Rz(gamma).Ry(beta).Rx(alpha)

    Parameters
    ----------
    M : 2D array

    Returns
    -------
    eul : list of Euler angles [gamma, beta, alpha] or [yaw, pitch, roll]
    """
    res = ea.mat2euler(M.T)
    return [-ang for ang in res]
Пример #9
0
def transformEuler(eul1,rot_type,rot):
    mat1 = euler2mat(*eul1)

    if rot_type == "angle_axis":
        ang1,ax1 = rot
        tmat1 = angle_axis2mat(ax1,ang1)
    elif rot_type == "mat":
        tmat1 = rot
    elif rot_type == "euler":
        eul1 = rot
        tmat1 = euler2mat(*eul1)
    elif rot_type == "towards":
        targ_vec1,ang1 = rot
        cur_vec1 = euler2mat(*eul1)[:,0]
        ax_rot1 = cross(cur_vec1,targ_vec1)
        tmat1 = angle_axis2mat(ang1,ax_rot1)
    else: raise Exception("rotation type %s not understood"%rot_type)
    mat1new = dot(tmat1,mat1)
    return mat2euler(mat1new)
Пример #10
0
def transformEuler(eul1, rot_type, rot):
    mat1 = euler2mat(*eul1)

    if rot_type == "angle_axis":
        ang1, ax1 = rot
        tmat1 = angle_axis2mat(ax1, ang1)
    elif rot_type == "mat":
        tmat1 = rot
    elif rot_type == "euler":
        eul1 = rot
        tmat1 = euler2mat(*eul1)
    elif rot_type == "towards":
        targ_vec1, ang1 = rot
        cur_vec1 = euler2mat(*eul1)[:, 0]
        ax_rot1 = cross(cur_vec1, targ_vec1)
        tmat1 = angle_axis2mat(ang1, ax_rot1)
    else:
        raise Exception("rotation type %s not understood" % rot_type)
    mat1new = dot(tmat1, mat1)
    return mat2euler(mat1new)
Пример #11
0
def applyRotEul(eul, ang, ax):
    return mat2euler(dot(angle_axis2mat(-ang, ax), euler2mat(*eul)))
Пример #12
0
def applyRotEul(eul,ang,ax):
    "compose a rotation of ang around ax with rotation given by euler angles eul"
    return mat2euler(dot(angle_axis2mat(ang,ax),euler2mat(*eul)))
Пример #13
0
 def euler(self):
     """
     Calculate Euler angles
     """
     assert self.is_rigid, 'does only work if affine is rigid'
     return mat2euler(self.affine[:3, :3])
Пример #14
0
def applyRotEul(eul,ang,ax):
    return mat2euler(dot(angle_axis2mat(-ang,ax),euler2mat(*eul)))