code: public Quaterniond mul(double x, double y, double z, double w) {
          return new Quaterniond(
                  this.w * x + this.x * w + this.y * z - this.z * y,
                  this.w * y + this.y * w + this.z * x - this.x * z,
                  this.w * z + this.z * w + this.x * y - this.y * x,
                  this.w * w - this.x * x - this.y * y - this.z * z);
      }
docs: Multiplies the double components of another quaternion with this one.
  
  @param x The x (imaginary) component of the quaternion to multiply with
  @param y The y (imaginary) component of the quaternion to multiply with
  @param z The z (imaginary) component of the quaternion to multiply with
  @param w The w (real) component of the quaternion to multiply with
  @return A new quaternion, which is the product of both