8.1.1 Le fichier vecteur.h

Voici le fichier vecteur.h que nous allons utiliser :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/***************************************************************************
     Copyright (C) 2009 by Pierre,,,
     pierre@pierre-laptop
 ***************************************************************************/
#ifndef DEFVECTEUR_H
#define DEFVECTEUR_H

#include <complex.h>
#include <math.h>
#include <stdio.h>
#include <iostream>

//renvoie le signe de a (1 ou -1)
int sign(double a);

/** @brief structure simple permettant de définir un point, un peut comme le Vecteur mais encore plus simple. un Point pouvant être converti en Vecteur et réciproquement*/

// //revoie le max entre a et b
double max(double a, double b);
// //renvoie le min entre a et b
double min(double a, double b);

/** @brief classe permettant de manipuler des Vecteurs et une partie des calculs qui leur est associé sans avoir à se trimballer les 3 coordonnées en vrac*/

/**
libs utilisées dans cette library
@li complex.h : cette lib est utilisée pour calculer la rotation du Vecteur (mais n'est pas utiliser pour le moment)
@li math.h : indispensable pour les calculs qui nécessites des fonctions trigonométriques (sin, cos, tan, asin, acos...)
@li stdio.h : lib utile pour ouvrir un fichier et écrire dedans
@li ostream : utile pour utiliser la sortie standard de la console
*/


class Vecteur{
	public:
		//constructeur de Vecteur
		Vecteur(double vecX = 0, double vecY = 0, double vecZ = 0);
		
		//constructeur de copie de Vecteur
		Vecteur(const Vecteur & vec);
		//destructeur de Vecteur
		virtual ~Vecteur();
		//sauvegarde des coordonnées du Vecteur dans un ficher ouvert en écriture
		void save(FILE* fp);
		//initialisation des coordonnées du Vecteur à partir d'un ficher ouvert en lecture
		void load(FILE* fp);     
		//redéfinition de l'opérateur =
		Vecteur & operator = ( const Vecteur & vect);
		//redéfinition de l'opérateur +=
		Vecteur & operator += ( const Vecteur & vect);
		//redéfinition de l'opérateur -=
		Vecteur & operator -= ( const Vecteur & vect);
		//redéfinition de l'opérateur *=
		Vecteur & operator *= (double coef);    //redéfinition de l'opérateur *=
		//redéfinition de l'opérateur /=
		Vecteur & operator /= (double coef);
		//redéfinition de l'opérateur -
		Vecteur operator - ();
		//donne la norme euclidienne du Vecteur
		double taille();
		//fonction qui calcul et renvoie la norme au carré de *this
		double normeSQR();
		//Retourne un Vecteur ayant pour composantes les valeurs absolues des composantes de this
		Vecteur abs();
		//renvoie un Vecteur qui a un x positif
		Vecteur absX();
		//renvoie un Vecteur qui a un y positif
		Vecteur absY();
		//renvoie un Vecteur qui a un z positif
		Vecteur absZ();
		//donne la composante x du Vecteur
		double getx() const;
		//donne la composante y du Vecteur
		double gety() const;
		//donne la composante z du Vecteur
		double getz() const;
		//donne un Vecteur de la composante x du Vecteur
		Vecteur getVectX() const;
		//donne un Vecteur de la composante y du Vecteur
		Vecteur getVectY() const;
		//donne un Vecteur de la composante z du Vecteur
		Vecteur getVectZ() const;
		//donne le Vecteur unitaire correspondant au Vecteur courrant
		Vecteur getUnit();
		//fonction de calcul d'angle qui doit être plus rapide que le calcul avec des nombres complexes
		double getAngle(const Vecteur & normale);
		//fonction qui initialise les composantes du Vecteur
		void setXYZ(double vecX, double vecY, double vecZ);
		//initialise la composantes x du Vecteur
		void setx(const double x);
		//initialise la composantes y du Vecteur
		void sety(const double y);
		//initialise la composantes z du Vecteur
		void setz(const double z);
		//fonction qui initialise le vecteur avec des angles en coordonnées sphériques
		void setRotation(double angleTeta, double anglePhi);
		float getAngleTeta();
		//fonction qui calcul la rotation du vecteur avec les variations de ses angles en coordonnées sphériques
		void rotation(double dTeta, double dPhi);            //change l'orientation du Vecteur
		//fonction qui calcul le réflexion du Vecteur *this par rapport à un vecteur normal
		void reflexion(Vecteur normal);
		//addition
		friend Vecteur operator + (const Vecteur & vect1, const Vecteur & vect2);
		//soustraction
		friend Vecteur operator - (const Vecteur & vect1, const Vecteur & vect2);
		//Définition du produit scalaire entre deux Vecteur
		friend double operator * (const Vecteur & vect1, const Vecteur & vect2);
		//multiplication par un scalaire à droite
		friend Vecteur operator * (Vecteur vect1, double scal);
		//multiplication par un scalaire à gauche
		friend Vecteur operator * (double scal, Vecteur vect1);
		//division par un scalaire
		friend Vecteur operator / (Vecteur vect1, double scal);
		//Définition  du produit vectoriel
		friend Vecteur operator ^ (const Vecteur & vect1, const Vecteur & vect2);
		//Définition de l'égalité entre deux Vecteur
		friend bool operator == (const Vecteur & vect1, const Vecteur & vect2);
		//Définition de l'inégalité entre deux Vecteur
		friend bool operator != (const Vecteur & vect1, const Vecteur & vect2);
		//permet l'affichage d'un vecteur dans la console
		friend std::ostream & operator << (std::ostream & out, const Vecteur & vecteur);
		//permet l'initialisation d'un Vecteur dans la console où avec un fichier de config
		friend std::istream & operator >> (std::istream & in, Vecteur & v);
		//initialise un Vecteur à partir d'une chaîne de type (x,y,z)
		void loadFromConfig(const char  * source);
	private:
		//initialisation de Vecteur
		void init(double vecX, double vecY, double vecZ);//initialisation de Vecteur
		
		///composante sur l'axe des x
		double x;
		///composante sur l'axe des y
		double y;
		///composante sur l'axe des z
		double z;

};

//fonction qui indique comment initialiser un Vecteur avec un fichier de config
void pConfig_load_obj(const char * source, Vecteur & v);

///définition d'un Vecteur NULL
extern const Vecteur VECT_NULL;
///définition de la constante de gravitation sur terre
extern const Vecteur GTerre;
#endif

Voilà pour le fichier vecteur.h.