public Matrix4d rotationXYZ(double angleX, double angleY, double angleZ) {
        double sinX = Math.sin(angleX);
        double cosX = Math.cosFromSin(sinX, angleX);
        double sinY = Math.sin(angleY);
        double cosY = Math.cosFromSin(sinY, angleY);
        double sinZ = Math.sin(angleZ);
        double cosZ = Math.cosFromSin(sinZ, angleZ);
        double m_sinX = -sinX;
        double m_sinY = -sinY;
        double m_sinZ = -sinZ;
        if ((properties & PROPERTY_IDENTITY) == 0)
            this._identity();

        // rotateX
        double nm11 = cosX;
        double nm12 = sinX;
        double nm21 = m_sinX;
        double nm22 = cosX;
        // rotateY
        double nm00 = cosY;
        double nm01 = nm21 * m_sinY;
        double nm02 = nm22 * m_sinY;
        m20 = sinY;
        m21 = nm21 * cosY;
        m22 = nm22 * cosY;
        // rotateZ
        m00 = nm00 * cosZ;
        m01 = nm01 * cosZ + nm11 * sinZ;
        m02 = nm02 * cosZ + nm12 * sinZ;
        m10 = nm00 * m_sinZ;
        m11 = nm01 * m_sinZ + nm11 * cosZ;
        m12 = nm02 * m_sinZ + nm12 * cosZ;
        properties = PROPERTY_AFFINE | PROPERTY_ORTHONORMAL;
        return this;
    }
public Matrix4d rotationXYZ ( double angleX , double angleY , double angleZ ) { double sinX = Math . sin ( angleX ) ; double cosX = Math . cosFromSin ( sinX , angleX ) ; double sinY = Math . sin ( angleY ) ; double cosY = Math . cosFromSin ( sinY , angleY ) ; double sinZ = Math . sin ( angleZ ) ; double cosZ = Math . cosFromSin ( sinZ , angleZ ) ; double m_sinX = - sinX ; double m_sinY = - sinY ; double m_sinZ = - sinZ ; if ( ( properties & PROPERTY_IDENTITY ) == 0 ) this . _identity ( ) ; double nm11 = cosX ; double nm12 = sinX ; double nm21 = m_sinX ; double nm22 = cosX ; double nm00 = cosY ; double nm01 = nm21 * m_sinY ; double nm02 = nm22 * m_sinY ; m20 = sinY ; m21 = nm21 * cosY ; m22 = nm22 * cosY ; m00 = nm00 * cosZ ; m01 = nm01 * cosZ + nm11 * sinZ ; m02 = nm02 * cosZ + nm12 * sinZ ; m10 = nm00 * m_sinZ ; m11 = nm01 * m_sinZ + nm11 * cosZ ; m12 = nm02 * m_sinZ + nm12 * cosZ ; properties = PROPERTY_AFFINE | PROPERTY_ORTHONORMAL ; return this ; }
Set this matrix to a rotation of <code>angleX</code> radians about the X axis, followed by a rotation
of <code>angleY</code> radians about the Y axis and followed by a rotation of <code>angleZ</code> radians about the Z axis.
<p>
When used with a right-handed coordinate system, the produced rotation will rotate a vector
counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin.
When used with a left-handed coordinate system, the rotation is clockwise.
<p>
This method is equivalent to calling: <code>rotationX(angleX).rotateY(angleY).rotateZ(angleZ)</code>

@param angleX
the angle to rotate about X
@param angleY
the angle to rotate about Y
@param angleZ
the angle to rotate about Z
@return this