code: public Quaternionf mul(float qx, float qy, float qz, float qw) {
          set(w * qx + x * qw + y * qz - z * qy,
              w * qy - x * qz + y * qw + z * qx,
              w * qz + x * qy - y * qx + z * qw,
              w * qw - x * qx - y * qy - z * qz);
          return this;
      }
docs: Multiply this quaternion by the quaternion represented via <code>(qx, qy, qz, qw)</code>.
  <p>
  If <code>T</code> is <code>this</code> and <code>Q</code> is the given
  quaternion, then the resulting quaternion <code>R</code> is:
  <p>
  <code>R = T * Q</code>
  <p>
  So, this method uses post-multiplication like the matrix classes, resulting in a
  vector to be transformed by <code>Q</code> first, and then by <code>T</code>.
  
  @param qx
  the x component of the quaternion to multiply <code>this</code> by
  @param qy
  the y component of the quaternion to multiply <code>this</code> by
  @param qz
  the z component of the quaternion to multiply <code>this</code> by
  @param qw
  the w component of the quaternion to multiply <code>this</code> by
  @return this