Classe Point - Avancée
Objectifs:
- Comprendre la notion de classe et objet
- Instancier des objets
- Définir et appeler des fonctions membres
- Surcharger des fonctions membres
- Définir et appeler des constructeurs
Énoncé:
Créer une classe Point permettant de représenter des points dans un plan caractérisé par deux coordonnées x et y et un caractère désignant le nom du point (pour organiser l’affichage)
Définir les fonctions membres suivantes :
- constructeur d’initialisation
- affiche: se contentant d'afficher les coordonnées cartésiennes du point.
- translation: effectue une translation définie par un argument
- positionner: positionne le point aux coordonnées cartésiennes passées en paramètre
- positionner: positionne le point aux coordonnées d’un autre point
- milieu: renvoie le point milieu du segment composé du point courant et d'un autre point.
- comparer: vérifie si deux points sont identiques
- symétrique: renvoie le symétrique d’un point
- distance: calcule la distance entre deux points
- rotation: effectue au point une rotation d'un angle A par rapport à l’origine.
La rotation d’un point P(x,y) d’un angle a par rapport à l’origine est un point P'(x’,y’) tel que:
x' = x . cos(a) – y . sin(a) y' = x . sin(a) + y . cos(a)
Ecrire un programme de test qui effectue les traitements suivants :
- crée trois points A(1, 1), B(2, 2) et C(3, 3)
- affiche sous forme de chaîne de caractères les coordonnées de ces trois points,
- translate le point B par 10
- positionne le point A aux coordonnées (3, 8)
- positionne le point C aux coordonnées du point B
- calcule la distance de A à l’origine
- calcule la distance entre A et B
- afficher le milieu entre A et C
- vérifie si les deux points B et C se coïncident
- affiche le symétrique du point C
- effectue une rotation au point A d’un angle 45 °
- et indique les deux points les plus proches.
Creation des points :
A(1,1)
-----
B(2,2)
-----
C(3,3)
-----
Translation du point B par 10 :
B(12,12)
-----
Positionnement du point A aux coordonnees (3, 8) :
A(3,8)
-----
Positionnement du point C aux coordonnees du point B :
C(12,12)
-----
La distance entre A et l'origine : 8.544
La distance entre A et B : 9.84886
Le milieu entre A et C :
O(7.5,10)
-----
Comparaison:
Les deux points B et C se coincident
Le symetrique du point C
S(-12,-12)
-----
Le point A apres rotation de 45 deg:
A(-5.23126,-0.248724)
-----
Les deux points les plus proches sont : B et C
//Programme : Classe Point - Avancée //Auteur : IDMANSOUR //Copyright : Exelib.net #include<iostream> #include<cmath> using namespace std; class point { float x, y; char nom; public: point(float a = 0, float b = 0, char n = 'O') { nom = n; x = a; y = b; } void afficher() { cout << nom << "(" << x << "," << y << ")" << endl; cout<<"-----"<<endl; } void translation (float a) { x += a; y += a; } void positionner(float a, float b) { x = a; y = b; } void positionner(point p) { x = p.x; y = p.y; } point milieu(point p) { point m; m.x = (x + p.x) / 2; m.y = (y + p.y) / 2; return m; } bool comparer(point p) { if(x == p.x && y == p.y) return true; return false; } point symetrique() { point s(-x, -y, 'S'); return s; } float distance(point p) { return sqrt(pow(x - p.x , 2) + pow(y - p.y , 2)); } void rotation(float ang) { x = x * cos(ang) - y * sin(ang); y = x * sin(ang) + y * cos(ang); } }; int main() { cout<<"Creation des points : "<<endl; point a(1, 1, 'A'), b(2, 2, 'B'), c(3, 3, 'C'); a.afficher(); b.afficher(); c.afficher(); cout << "Translation du point B par 10 :"<<endl; b.translation(10); b.afficher(); cout << "Positionnement du point A aux coordonnees (3, 8) : " << endl; a.positionner(3, 8); a.afficher(); cout << "Positionnement du point C aux coordonnees du point B : " << endl; c.positionner(b); c.afficher(); point O(0, 0); cout<<"La distance entre A et l'origine : " << a.distance(O) << endl; cout<<"La distance entre A et B : " << a.distance(b) << endl; cout<<"Le milieu entre A et C : "<<endl; point m(0, 0, 'M'); m = a.milieu(c); m.afficher(); cout<<"Comparaison:"<<endl; if(b.comparer(c)) cout << "Les deux points B et C se coincident" << endl; else cout << "Les deux points B et C ne se coincident pas" << endl; cout << "Le symetrique du point C" << endl; c.symetrique().afficher(); cout<<"Le point A apres rotation de 45 deg: "<<endl; a.rotation(45); a.afficher(); float d1 = a.distance(b); float d2 = b.distance(c); float d3 = c.distance(a); cout << "Les deux points les plus proches sont : "; if(d1 <= d2 and d1 <= d3) cout << "A et B" << endl; else if(d2 <= d1 and d2 <= d3) cout << "B et C" << endl; else cout << "A et C" << endl; return 0; }
L'instruction c.symetrique().afficher(); permet d'appeler la méthode afficher du point renvoyer par la fonction symetrique