(ai, aj, ak, axes='sxyz')
return M
Return homogeneous rotation matrix from Euler angles and axis sequence.

    ai, aj, ak : Euler's roll, pitch and yaw angles
    axes : One of 24 axis sequences as string or encoded tuple

    >>> R = euler_matrix(1, 2, 3, 'syxz')
    >>> numpy.allclose(numpy.sum(R[0]), -1.34786452)
    True
    >>> R = euler_matrix(1, 2, 3, (0, 1, 0, 1))
    >>> numpy.allclose(numpy.sum(R[0]), -0.383436184)
    True
    >>> ai, aj, ak = (4*math.pi) * (numpy.random.random(3) - 0.5)
    >>> for axes in _AXES2TUPLE.keys():
    ...    R = euler_matrix(ai, aj, ak, axes)
    >>> for axes in _TUPLE2AXES.keys():
    ...    R = euler_matrix(ai, aj, ak, axes)
Return homogeneous rotation matrix from Euler angles and axis sequence.
Return homogeneous rotation matrix from Euler angles and axis sequence .
def euler_matrix(ai, aj, ak, axes='sxyz'):
    """Return homogeneous rotation matrix from Euler angles and axis sequence.

    ai, aj, ak : Euler's roll, pitch and yaw angles
    axes : One of 24 axis sequences as string or encoded tuple

    >>> R = euler_matrix(1, 2, 3, 'syxz')
    >>> numpy.allclose(numpy.sum(R[0]), -1.34786452)
    True
    >>> R = euler_matrix(1, 2, 3, (0, 1, 0, 1))
    >>> numpy.allclose(numpy.sum(R[0]), -0.383436184)
    True
    >>> ai, aj, ak = (4*math.pi) * (numpy.random.random(3) - 0.5)
    >>> for axes in _AXES2TUPLE.keys():
    ...    R = euler_matrix(ai, aj, ak, axes)
    >>> for axes in _TUPLE2AXES.keys():
    ...    R = euler_matrix(ai, aj, ak, axes)

    """
    try:
        firstaxis, parity, repetition, frame = _AXES2TUPLE[axes]
    except (AttributeError, KeyError):
        _TUPLE2AXES[axes]  # validation
        firstaxis, parity, repetition, frame = axes

    i = firstaxis
    j = _NEXT_AXIS[i+parity]
    k = _NEXT_AXIS[i-parity+1]

    if frame:
        ai, ak = ak, ai
    if parity:
        ai, aj, ak = -ai, -aj, -ak

    si, sj, sk = math.sin(ai), math.sin(aj), math.sin(ak)
    ci, cj, ck = math.cos(ai), math.cos(aj), math.cos(ak)
    cc, cs = ci*ck, ci*sk
    sc, ss = si*ck, si*sk

    M = numpy.identity(4)
    if repetition:
        M[i, i] = cj
        M[i, j] = sj*si
        M[i, k] = sj*ci
        M[j, i] = sj*sk
        M[j, j] = -cj*ss+cc
        M[j, k] = -cj*cs-sc
        M[k, i] = -sj*ck
        M[k, j] = cj*sc+cs
        M[k, k] = cj*cc-ss
    else:
        M[i, i] = cj*ck
        M[i, j] = sj*sc-cs
        M[i, k] = sj*cc+ss
        M[j, i] = cj*sk
        M[j, j] = sj*ss+cc
        M[j, k] = sj*cs-sc
        M[k, i] = -sj
        M[k, j] = cj*si
        M[k, k] = cj*ci
    return M
def euler_matrix ( ai , aj , ak , axes = 'sxyz' ) : try : firstaxis , parity , repetition , frame = _AXES2TUPLE [ axes ] except ( AttributeError , KeyError ) : _TUPLE2AXES [ axes ] # validation firstaxis , parity , repetition , frame = axes i = firstaxis j = _NEXT_AXIS [ i + parity ] k = _NEXT_AXIS [ i - parity + 1 ] if frame : ai , ak = ak , ai if parity : ai , aj , ak = - ai , - aj , - ak si , sj , sk = math . sin ( ai ) , math . sin ( aj ) , math . sin ( ak ) ci , cj , ck = math . cos ( ai ) , math . cos ( aj ) , math . cos ( ak ) cc , cs = ci * ck , ci * sk sc , ss = si * ck , si * sk M = numpy . identity ( 4 ) if repetition : M [ i , i ] = cj M [ i , j ] = sj * si M [ i , k ] = sj * ci M [ j , i ] = sj * sk M [ j , j ] = - cj * ss + cc M [ j , k ] = - cj * cs - sc M [ k , i ] = - sj * ck M [ k , j ] = cj * sc + cs M [ k , k ] = cj * cc - ss else : M [ i , i ] = cj * ck M [ i , j ] = sj * sc - cs M [ i , k ] = sj * cc + ss M [ j , i ] = cj * sk M [ j , j ] = sj * ss + cc M [ j , k ] = sj * cs - sc M [ k , i ] = - sj M [ k , j ] = cj * si M [ k , k ] = cj * ci return M