code: public final void mul(Quaternion q1) {
  		double x1, y1, w1; 
  
  		w1 = this.w*q1.w - this.x*q1.x - this.y*q1.y - this.z*q1.z;
  		x1 = this.w*q1.x + q1.w*this.x + this.y*q1.z - this.z*q1.y;
  		y1 = this.w*q1.y + q1.w*this.y - this.x*q1.z + this.z*q1.x;
  		this.z = this.w*q1.z + q1.w*this.z + this.x*q1.y - this.y*q1.x;
  		this.w = w1;
  		this.x = x1;
  		this.y = y1;
  	}
docs: Sets the value of this quaternion to the quaternion product of
  itself and q1 (this = this * q1).
  @param q1 the other quaternion