code: public Vector3d rotateAxis(double angle, double aX, double aY, double aZ, Vector3d dest) {
          double hangle = angle * 0.5;
          double sinAngle = Math.sin(hangle);
          double qx = aX * sinAngle, qy = aY * sinAngle, qz = aZ * sinAngle;
          double qw = Math.cosFromSin(sinAngle, hangle);
          double w2 = qw * qw, x2 = qx * qx, y2 = qy * qy, z2 = qz * qz, zw = qz * qw;
          double xy = qx * qy, xz = qx * qz, yw = qy * qw, yz = qy * qz, xw = qx * qw;
          double nx = (w2 + x2 - z2 - y2) * x + (-zw + xy - zw + xy) * y + (yw + xz + xz + yw) * z;
          double ny = (xy + zw + zw + xy) * x + ( y2 - z2 + w2 - x2) * y + (yz + yz - xw - xw) * z;
          double nz = (xz - yw + xz - yw) * x + ( yz + yz + xw + xw) * y + (z2 - y2 - x2 + w2) * z;
          dest.x = nx;
          dest.y = ny;
          dest.z = nz;
          return dest;
      }
docs: /* (non-Javadoc)
  @see org.joml.Vector3dc#rotateAxis(double, double, double, double, org.joml.Vector3d)