UFR Physique et Ingénierie - Campus Meinau - TP4 : points et tpts

Université de Strasbourg

Travaux Pratiques (spécialité GI)

TP4 : points et tpts

ci dessous le source à utiliser en TP4 :


using namespace std;
#include <iostream>
#include <cmath>

class point
{
 int num;
 float x,y;
public:
 void saisir(int i);
 void afficher(void);
 int get_num(void);
 float get_x(void);
 float get_y(void);
 void set_coord(float a, float b);
 void set_num(int n);
 float distance(float a, float b);
 float distance(point p);
 void deplace(float dx,float dy);
 void mettre_au_milieu(point p, point q);
};
int point::get_num(void)
{return num;}
float point::get_x(void)
{return x;}
float point::get_y(void)
{return y;}
void point::set_coord(float a, float b)
{x=a;y=b;};
void point::set_num(int n)
{num=n;};
void point::saisir(int i)
{
 cout<<"coordonnees du point "<<i<<" ? ";
 num=i;
 cin>>x;
 cin>>y;
}
void point::afficher(void)
{cout<<"point "<<num<<" : ("<<x<<","<<y<<")";}
void point::deplace(float dx,float dy)
{x=x+dx;y=y+dy;}
float point::distance(float a, float b)
{return sqrt((x-a)*(x-a)+(y-b)*(y-b));}
float point::distance(point p)
{return distance(p.get_x(),p.get_y());}
void point::mettre_au_milieu(point p, point q)
{set_coord((p.get_x()+q.get_x())/2,(p.get_y()+q.get_y())/2);}

//surcharge de << (pour faire cout<< pour un point)
ostream& operator<< (ostream& f,point& x)
{x.afficher();return f;}

#define MAXPTS 1000
class tpts
{
 int nbpoints;
 point n[MAXPTS];
public:
 void saisir(void);
 void afficher(void);
 void deplace(float dx,float dy);
 int get_nbpoints(void);
 int position(int num);
 point get_point_direct(int i);
 point get_point(int num);
 point get_point(float x, float y);
 int indice_du_plus_proche(float x, float y, int a_partir_de);
 void creer(void); //idem saisie mais avec valeurs imposées
};

void tpts::saisir(void)
{
 int i;
 cout<<"combien de points ? ";
 cin>>nbpoints;
 for(i=0;i<nbpoints;i++) n[i].saisir(i+1);
}

void tpts::creer(void)
{
int i;
cout<<"combien de points ? ";
cin>>nbpoints;
for(i=0;i<nbpoints;i++)
  {
    n[i].set_num(i+1);
    n[i].set_coord(i,10-i);
  }
}

void tpts::afficher(void)
{ int i; for(i=0;i<nbpoints;i++) cout<<n[i]<<"\n"; }

void tpts::deplace(float dx,float dy)
{ int i; for(i=0;i<nbpoints;i++) n[i].deplace(dx,dy); }

int tpts::position(int num)
{
 int i;
 for(i=0;i<nbpoints;i++)
   if(n[i].get_num() == num) return i;
 return -1; //au cas o je n'aurais pas trouve
}
int tpts::get_nbpoints(void)
{return nbpoints;}
point tpts::get_point_direct(int i)
{return n[i];}
point tpts::get_point(int num)
{
 int pos;
 pos=position(num);
 return n[pos];
}
int tpts::indice_du_plus_proche(float x, float y, int a_partir_de)
{
 int i,pos;
 float dmin,dis;
 pos=a_partir_de;
 dmin=n[pos].distance(x,y);
 for(i=a_partir_de+1;i<nbpoints;i++)
  {
   dis=n[i].distance(x,y); //n[i] et pas n[pos] comme donné au 1er TP !!!!!!!!!!!
   if(dis<dmin) {dmin=dis;pos=i;}
  }
 return pos;
}
point tpts::get_point(float x, float y)
{
 int pos;
 pos=indice_du_plus_proche(x,y,0);
 return n[pos];
}

ostream& operator<< (ostream& f,tpts& x)
{x.afficher();return f;}

Emplois du temps - Mentions légales - Plan du site