code: public Quaterniond rotateAxis(double angle, double axisX, double axisY, double axisZ, Quaterniond dest) {
          double hangle = angle / 2.0;
          double sinAngle = Math.sin(hangle);
          double invVLength = 1.0 / Math.sqrt(axisX * axisX + axisY * axisY + axisZ * axisZ);
  
          double rx = axisX * invVLength * sinAngle;
          double ry = axisY * invVLength * sinAngle;
          double rz = axisZ * invVLength * sinAngle;
          double rw = Math.cosFromSin(sinAngle, hangle);
  
          dest.set(w * rx + x * rw + y * rz - z * ry,
                   w * ry - x * rz + y * rw + z * rx,
                   w * rz + x * ry - y * rx + z * rw,
                   w * rw - x * rx - y * ry - z * rz);
          return dest;
      }
docs: /* (non-Javadoc)
  @see org.joml.Quaterniondc#rotateAxis(double, double, double, double, org.joml.Quaterniond)