/*====================ÉCOLE POLYTECHNIQUE DE MONTRÉAL============================

	NOM DU FICHIER :CVector3f.h

	DESCRIPTION :	Fonction qui définit la position de tous les objets en vecteur

	AUTEUR : Martin Bisson, Anne-Marie Buki, Mylene Denis & Jean-Francois Pérusse

	DATE DE CRÉATION : 2004-3-16

	MISES À JOUR :

===============================================================================*/
#ifndef CVECTOR3F_H
#define CVECTOR3F_H

#include <cmath>
#include <iostream>

using namespace std;

class CVector3f{
public:
    CVector3f() {PosX = 0.0; PosY = 0.0; PosZ = 0.0;};
    CVector3f(float XX, float YY, float ZZ = 0);

    float GetPosX() const;
    float GetPosY() const;
    float GetPosZ() const;
    
    void setY(float Y);
    void setZ(float Z);
    void setX(float X);
    
    CVector3f operator+(const CVector3f& Vecteur) const;
    CVector3f operator-(const CVector3f& Vecteur) const;
    CVector3f operator/(const float UnFloat) const;
    float operator*(const CVector3f& Vecteur) const;
    CVector3f operator*(const float UnFloat) const;
    CVector3f operator>>(const CVector3f& Vecteur) const;
    float SideProduct(const CVector3f Vecteur) const;
    CVector3f SideProductV(const CVector3f Vecteur) const;
    CVector3f operator-() const;
    bool operator==(const CVector3f& Vecteur) const;
    float GetNorm() const;
    CVector3f GetNormalVector() const;

private:
    float PosX;
    float PosY;
    float PosZ;
};

CVector3f operator*(const float UnFloat, const CVector3f Vecteur);
std::ostream& operator << (std::ostream& o, const CVector3f& v);

#endif //CVECTOR3F_H



