code: public Matrix4d rotateAroundLocal(Quaterniondc quat, double ox, double oy, double oz) {
          return rotateAroundLocal(quat, ox, oy, oz, this);
      }
docs: Pre-multiply the rotation - and possibly scaling - transformation of the given {@link Quaterniondc} to this matrix while using <code>(ox, oy, oz)</code>
  as the rotation origin.
  <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>
  If <code>M</code> is <code>this</code> matrix and <code>Q</code> the rotation matrix obtained from the given quaternion,
  then the new matrix will be <code>Q * M</code>. So when transforming a
  vector <code>v</code> with the new matrix by using <code>Q * M * v</code>,
  the quaternion rotation will be applied last!
  <p>
  This method is equivalent to calling: <code>translateLocal(-ox, -oy, -oz).rotateLocal(quat).translateLocal(ox, oy, oz)</code>
  <p>
  Reference: <a href="http://en.wikipedia.org/wiki/Rotation_matrix#Quaternion">http://en.wikipedia.org</a>
  
  @param quat
  the {@link Quaterniondc}
  @param ox
  the x coordinate of the rotation origin
  @param oy
  the y coordinate of the rotation origin
  @param oz
  the z coordinate of the rotation origin
  @return this