code: public Matrix3d rotation(double angle, double x, double y, double z) {
          double sin = Math.sin(angle);
          double cos = Math.cosFromSin(sin, angle);
          double C = 1.0 - cos;
          double xy = x * y, xz = x * z, yz = y * z;
          m00 = cos + x * x * C;
          m10 = xy * C - z * sin;
          m20 = xz * C + y * sin;
          m01 = xy * C + z * sin;
          m11 = cos + y * y * C;
          m21 = yz * C - x * sin;
          m02 = xz * C - y * sin;
          m12 = yz * C + x * sin;
          m22 = cos + z * z * C;
          return this;
      }
docs: Set this matrix to a rotation matrix which rotates the given radians about a given axis.
  <p>
  The axis described by the three components needs to be a unit vector.
  <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>
  The resulting matrix can be multiplied against another transformation
  matrix to obtain an additional rotation.
  <p>
  In order to apply the rotation transformation to an existing transformation,
  use {@link #rotate(double, double, double, double) rotate()} instead.
  <p>
  Reference: <a href="http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle">http://en.wikipedia.org</a>
  
  @see #rotate(double, double, double, double)
  
  @param angle
  the angle in radians
  @param x
  the x-component of the rotation axis
  @param y
  the y-component of the rotation axis
  @param z
  the z-component of the rotation axis
  @return this