Exercice 65
Énoncé
Modifier la classe point précédente, de manière que les données (privées) soient
maintenant les coordonnées polaires d’un point, et non plus ses coordonnées
cartésiennes. On évitera de modifier la déclaration des membres publics, de sorte
que l’interface de la classe (ce qui est visible pour l’utilisateur) ne change pas.
La déclaration de la nouvelle classe découle directement de l’énoncé :
/* fichier POINT4.H : déclaration de la classe point */
class point
{ float r, t ; // coordonnées (polaires) du point
public :
point (float, float) ; // constructeur
void deplace (float, float) ; // déplacement
void homothetie (float) ; // homothétie
void rotation (float) ; // rotation
float abscisse () ; // abscisse du point
float ordonnee () ; // ordonnée du point
float rho () ; // rayon vecteur
float theta () ; // angle
} ;
En ce qui concerne sa définition, il est maintenant nécessaire de remarquer que :
le constructeur reçoit toujours en argument les coordonnées cartésiennes d’un point ;
il doit donc opérer les transformations appropriées ;
la fonction deplace reçoit un déplacement exprimé en coordonnées cartésiennes ; il
faut donc tout d’abord déterminer les coordonnées cartésiennes du point après
déplacement, avant de repasser en coordonnées polaires.
En revanche, les fonctions homothetie et rotation s’expriment très simplement.
Voici la définition de notre nouvelle classe (nous avons fait appel à la même fonction
de service angle que dans l’exercice précédent) :
#include "point4.h"
#include // pour cos, sin, sqrt et atan
#include
using namespace std ;
const int pi = 3.141592635 ; // valeur de pi
/********** définition des fonctions de service ***********/
/* fonction de calcul de l'angle correspondant aux coordonnées */
/* cartésiennes fournies en argument */
/* On choisit une détermination entre -pi et +pi (0 si x=0) */
140
Précédent

- 141/398

Suivant