code: public Vector3d getEulerAnglesZYX(Vector3d dest) {
          dest.x = (float) Math.atan2(m12, m22);
          dest.y = (float) Math.atan2(-m02, Math.sqrt(m12 * m12 + m22 * m22));
          dest.z = (float) Math.atan2(m01, m00);
          return dest;
      }
docs: Extract the Euler angles from the rotation represented by <code>this</code> matrix and store the extracted Euler angles in <code>dest</code>.
  <p>
  This method assumes that <code>this</code> matrix only represents a rotation without scaling.
  <p>
  Note that the returned Euler angles must be applied in the order <code>Z * Y * X</code> to obtain the identical matrix.
  This means that calling {@link Matrix3d#rotateZYX(double, double, double)} using the obtained Euler angles will yield
  the same rotation as the original matrix from which the Euler angles were obtained, so in the below code the matrix
  <code>m2</code> should be identical to <code>m</code> (disregarding possible floating-point inaccuracies).
  <pre>
  Matrix3d m = ...; // &lt;- matrix only representing rotation
  Matrix3d n = new Matrix3d();
  n.rotateZYX(m.getEulerAnglesZYX(new Vector3d()));
  </pre>
  <p>
  Reference: <a href="http://nghiaho.com/?page_id=846">http://nghiaho.com/</a>
  
  @param dest
  will hold the extracted Euler angles
  @return dest