public double getProduitScalaire(cQuaternion quat)
 {
     return(this.w * quat.w
            + this.v.x * quat.v.x
            + this.v.y * quat.v.y
            + this.v.z * quat.v.z);
 }
        public cQuaternion getDifference(cQuaternion quat)
        {
            var tmp = this.getInverse();
            var res = quat.getMultiply(tmp);

            return(res);
        }
        public cQuaternion minus(cQuaternion quat)
        {
            var res = this;

            res.v.minus(quat.v);
            res.w = res.w - quat.w;
            return(res);
        }
        public cQuaternion add(cQuaternion quat)
        {
            var res = this;

            res.v.add(quat.v);
            res.w = res.w + quat.w;
            return(res);
        }
        public cQuaternion negate()
        {
            var vRes = this.v;

            vRes.negate();
            var res = new cQuaternion(-this.w, vRes);

            return(res);
        }
        public cQuaternion getMultiply(cQuaternion quat)
        {
            var res = this;

            res.w   = quat.w * res.w - quat.v.x * res.v.x - quat.v.y * res.v.y - quat.v.z * res.v.z;
            res.v.x = quat.w * res.v.x + quat.v.x * res.w - quat.v.y * res.v.z + quat.v.z * res.v.y;
            res.v.y = quat.w * res.v.y + quat.v.x * res.v.z + quat.v.y * res.w - quat.v.z * res.v.x;
            res.v.z = quat.w * res.v.z - quat.v.x * res.v.y + quat.v.y * res.v.x + quat.v.z * res.w;
            return(res);
        }
        public cQuaternion getInverse()
        {
            var magnetude = this.getMagnetude();
            var res       = new cQuaternion(this.w / magnetude
                                            , this.v.x / magnetude
                                            , this.v.y / magnetude
                                            , this.v.z / magnetude);

            return(res);
        }