2008-04-11 10:11:29 +02:00
|
|
|
#include "referencepoint.hh"
|
|
|
|
|
GuiNuMo : gestion topologie
server.{hh,cc} :
* Utilisation d'une map plutôt que d'une multimap pour stocker la liste
des pièces. Conséquence : les noms des zones doivent être uniques, il
faut donc numéroter les zones des pièces composites (par exemple
« Couloir N1 A » et « Couloir N1 B »).
* Ajout de la fonction inWhichAreas() qui permet d'obtenir la liste des
zones auxquelles appartient un point.
* Modification de la fonction makeWaypointDistancesFromFile() (renommée
makeWaypointListFromFile()) de manière à ce qu'elle calcule la matrice
des distances entre points de passage (lecture d'une liste de points).
Abandon du format décrivant les points en visibilité (voir le fichier
cfg/distances.csv, supprimé à cette révision), puisque nous nous
servons des points de passage et de la description des zones pour
calculer les liens entre points. RESTE À FAIRE : prise en comppte de
la topologie dans le calcul de distance.
* Ajout de deux fonctions areaConnection() qui permettent de récupérer
la liste des points de passage d'une zone, ou faisant l'intersection
entre deux zones.
* Ajout de la fonction distanceTopology, qui calcule la distance entre
deux points en tenant compte de la topologie (zones et points de
passage entre elles).
* Ajout de la fonction makeReferencePointDistances(), qui calcule les
distances entre points de référence, en tenant compte de la
topologie.
* Ajout de la fonction point_vector_idx(), semblable à point_tab_idx()
mais pour un vector<Point>.
referencepoint.{hh,cc} :
* Ajout de l'operator de cast en Point (operator Point()).
area.{hh,cc} :
* Ajout de l'operator==(Area).
cfg/distances.csv
* Suppression de ce fichier obsolète.
git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@47 785a6c6c-259e-4ff1-8b91-dc31627914f0
2008-06-25 16:19:07 +02:00
|
|
|
|
2010-01-04 17:10:42 +01:00
|
|
|
using namespace std ;
|
|
|
|
|
|
|
|
|
GuiNuMo : gestion topologie
server.{hh,cc} :
* Utilisation d'une map plutôt que d'une multimap pour stocker la liste
des pièces. Conséquence : les noms des zones doivent être uniques, il
faut donc numéroter les zones des pièces composites (par exemple
« Couloir N1 A » et « Couloir N1 B »).
* Ajout de la fonction inWhichAreas() qui permet d'obtenir la liste des
zones auxquelles appartient un point.
* Modification de la fonction makeWaypointDistancesFromFile() (renommée
makeWaypointListFromFile()) de manière à ce qu'elle calcule la matrice
des distances entre points de passage (lecture d'une liste de points).
Abandon du format décrivant les points en visibilité (voir le fichier
cfg/distances.csv, supprimé à cette révision), puisque nous nous
servons des points de passage et de la description des zones pour
calculer les liens entre points. RESTE À FAIRE : prise en comppte de
la topologie dans le calcul de distance.
* Ajout de deux fonctions areaConnection() qui permettent de récupérer
la liste des points de passage d'une zone, ou faisant l'intersection
entre deux zones.
* Ajout de la fonction distanceTopology, qui calcule la distance entre
deux points en tenant compte de la topologie (zones et points de
passage entre elles).
* Ajout de la fonction makeReferencePointDistances(), qui calcule les
distances entre points de référence, en tenant compte de la
topologie.
* Ajout de la fonction point_vector_idx(), semblable à point_tab_idx()
mais pour un vector<Point>.
referencepoint.{hh,cc} :
* Ajout de l'operator de cast en Point (operator Point()).
area.{hh,cc} :
* Ajout de l'operator==(Area).
cfg/distances.csv
* Suppression de ce fichier obsolète.
git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@47 785a6c6c-259e-4ff1-8b91-dc31627914f0
2008-06-25 16:19:07 +02:00
|
|
|
|
2009-12-11 17:56:31 +01:00
|
|
|
/*** Constructeurs ***/
|
|
|
|
|
|
|
|
|
2009-12-07 16:03:53 +01:00
|
|
|
ReferencePoint::~ReferencePoint()
|
2010-05-21 10:35:15 +02:00
|
|
|
{
|
2009-12-07 16:03:53 +01:00
|
|
|
measurements.clear() ;
|
2010-05-21 10:35:15 +02:00
|
|
|
}
|
2008-04-11 10:11:29 +02:00
|
|
|
|
GuiNuMo : gestion topologie
server.{hh,cc} :
* Utilisation d'une map plutôt que d'une multimap pour stocker la liste
des pièces. Conséquence : les noms des zones doivent être uniques, il
faut donc numéroter les zones des pièces composites (par exemple
« Couloir N1 A » et « Couloir N1 B »).
* Ajout de la fonction inWhichAreas() qui permet d'obtenir la liste des
zones auxquelles appartient un point.
* Modification de la fonction makeWaypointDistancesFromFile() (renommée
makeWaypointListFromFile()) de manière à ce qu'elle calcule la matrice
des distances entre points de passage (lecture d'une liste de points).
Abandon du format décrivant les points en visibilité (voir le fichier
cfg/distances.csv, supprimé à cette révision), puisque nous nous
servons des points de passage et de la description des zones pour
calculer les liens entre points. RESTE À FAIRE : prise en comppte de
la topologie dans le calcul de distance.
* Ajout de deux fonctions areaConnection() qui permettent de récupérer
la liste des points de passage d'une zone, ou faisant l'intersection
entre deux zones.
* Ajout de la fonction distanceTopology, qui calcule la distance entre
deux points en tenant compte de la topologie (zones et points de
passage entre elles).
* Ajout de la fonction makeReferencePointDistances(), qui calcule les
distances entre points de référence, en tenant compte de la
topologie.
* Ajout de la fonction point_vector_idx(), semblable à point_tab_idx()
mais pour un vector<Point>.
referencepoint.{hh,cc} :
* Ajout de l'operator de cast en Point (operator Point()).
area.{hh,cc} :
* Ajout de l'operator==(Area).
cfg/distances.csv
* Suppression de ce fichier obsolète.
git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@47 785a6c6c-259e-4ff1-8b91-dc31627914f0
2008-06-25 16:19:07 +02:00
|
|
|
|
|
|
|
|
2009-12-11 17:56:31 +01:00
|
|
|
// float ReferencePoint::getSsSquareDistance(const vector<CalibrationMeasurement> &m) const
|
2009-12-07 16:03:53 +01:00
|
|
|
// {
|
|
|
|
// unsigned int i, j;
|
|
|
|
// float ret = 0;
|
|
|
|
// bool found;
|
2009-12-11 17:56:31 +01:00
|
|
|
// vector<CalibrationMeasurement> ref_m = measurements;
|
|
|
|
// vector<CalibrationMeasurement> test_m = m;
|
|
|
|
// CalibrationMeasurement new_meas;
|
2009-12-07 16:03:53 +01:00
|
|
|
|
|
|
|
// new_meas.addSsValue(-95);
|
|
|
|
|
|
|
|
// /* Complete measurement vector with unexisting ap (from ref point) */
|
2010-01-13 15:29:44 +01:00
|
|
|
// for (i = 0 ; i < ref_m.size() ; ++i)
|
2009-12-07 16:03:53 +01:00
|
|
|
// {
|
|
|
|
// found = false;
|
2010-01-13 15:29:44 +01:00
|
|
|
// for (j = 0 ; j < test_m.size() && !found ; ++j)
|
2009-12-07 16:03:53 +01:00
|
|
|
// if (test_m[j].getMacAddr() == ref_m[i].getMacAddr())
|
|
|
|
// found = true;
|
|
|
|
// if (!found)
|
|
|
|
// {
|
|
|
|
// new_meas.setMacAddr(measurements[i].getMacAddr());
|
|
|
|
// test_m.push_back(new_meas);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// /* Now, complete ref. point meas. */
|
2010-01-13 15:29:44 +01:00
|
|
|
// for (i = 0 ; i < test_m.size() ; ++i)
|
2009-12-07 16:03:53 +01:00
|
|
|
// {
|
|
|
|
// found = false;
|
2010-01-13 15:29:44 +01:00
|
|
|
// for (j = 0 ; j < ref_m.size() && !found ; ++j)
|
2009-12-07 16:03:53 +01:00
|
|
|
// if (test_m[i].getMacAddr() == ref_m[j].getMacAddr())
|
|
|
|
// found = true;
|
|
|
|
// if (!found)
|
|
|
|
// {
|
|
|
|
// new_meas.setMacAddr(test_m[i].getMacAddr());
|
|
|
|
// ref_m.push_back(new_meas);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// /* Now, compute SS distance */
|
2010-01-13 15:29:44 +01:00
|
|
|
// for (i = 0 ; i < test_m.size() ; ++i)
|
2009-12-07 16:03:53 +01:00
|
|
|
// {
|
|
|
|
// j = 0;
|
|
|
|
// found = false;
|
|
|
|
// while ((j < ref_m.size())&&(found == false))
|
|
|
|
// {
|
|
|
|
// if (ref_m[j].getMacAddr() == test_m[i].getMacAddr())
|
|
|
|
// {
|
|
|
|
// found = true;
|
|
|
|
// ret += ref_m[j].getSsSquareDistance(test_m[i].getAverage());
|
|
|
|
// }
|
2010-01-13 15:29:44 +01:00
|
|
|
// ++j;
|
2009-12-07 16:03:53 +01:00
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// ref_m.clear();
|
|
|
|
// test_m.clear();
|
|
|
|
|
|
|
|
// return ret;
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// void ReferencePoint::addMeasurement(const string &mac_a, const int &value)
|
|
|
|
// {
|
|
|
|
// unsigned int i;
|
2009-12-11 17:56:31 +01:00
|
|
|
// CalibrationMeasurement m;
|
2009-12-07 16:03:53 +01:00
|
|
|
// bool inserted = false;
|
|
|
|
|
2010-01-13 15:29:44 +01:00
|
|
|
// for (i = 0 ; i < measurements.size() ; ++i)
|
2009-12-07 16:03:53 +01:00
|
|
|
// if (measurements[i].getMacAddr() == mac_a)
|
|
|
|
// {
|
|
|
|
// measurements[i].addSsValue(value);
|
|
|
|
// inserted = true;
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
// if (inserted == false)
|
|
|
|
// {
|
|
|
|
// m.setMacAddr(mac_a);
|
|
|
|
// m.addSsValue(value);
|
|
|
|
// measurements.push_back(m);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// bool ReferencePoint::getPowerForAp(const string &ap_mac, float *p) const
|
|
|
|
// {
|
|
|
|
// unsigned int i;
|
|
|
|
// string str = ap_mac;
|
|
|
|
// string macLowerCase;
|
|
|
|
|
|
|
|
// //Pour convertir les majuscules en miniscules
|
|
|
|
// const int length = str.length();
|
|
|
|
// for (int j=0; j < length; ++j)
|
|
|
|
// str[j] = tolower(str[j]);
|
|
|
|
|
2010-01-13 15:29:44 +01:00
|
|
|
// for (i = 0 ; i < measurements.size() ; ++i)
|
2009-12-07 16:03:53 +01:00
|
|
|
// if (measurements[i].getMacAddr() == str)
|
|
|
|
// {
|
|
|
|
// *p = measurements[i].getAverage();
|
|
|
|
// return true;
|
|
|
|
// }
|
|
|
|
|
|
|
|
// return false;
|
|
|
|
// }
|
GuiNuMo : gestion topologie
server.{hh,cc} :
* Utilisation d'une map plutôt que d'une multimap pour stocker la liste
des pièces. Conséquence : les noms des zones doivent être uniques, il
faut donc numéroter les zones des pièces composites (par exemple
« Couloir N1 A » et « Couloir N1 B »).
* Ajout de la fonction inWhichAreas() qui permet d'obtenir la liste des
zones auxquelles appartient un point.
* Modification de la fonction makeWaypointDistancesFromFile() (renommée
makeWaypointListFromFile()) de manière à ce qu'elle calcule la matrice
des distances entre points de passage (lecture d'une liste de points).
Abandon du format décrivant les points en visibilité (voir le fichier
cfg/distances.csv, supprimé à cette révision), puisque nous nous
servons des points de passage et de la description des zones pour
calculer les liens entre points. RESTE À FAIRE : prise en comppte de
la topologie dans le calcul de distance.
* Ajout de deux fonctions areaConnection() qui permettent de récupérer
la liste des points de passage d'une zone, ou faisant l'intersection
entre deux zones.
* Ajout de la fonction distanceTopology, qui calcule la distance entre
deux points en tenant compte de la topologie (zones et points de
passage entre elles).
* Ajout de la fonction makeReferencePointDistances(), qui calcule les
distances entre points de référence, en tenant compte de la
topologie.
* Ajout de la fonction point_vector_idx(), semblable à point_tab_idx()
mais pour un vector<Point>.
referencepoint.{hh,cc} :
* Ajout de l'operator de cast en Point (operator Point()).
area.{hh,cc} :
* Ajout de l'operator==(Area).
cfg/distances.csv
* Suppression de ce fichier obsolète.
git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@47 785a6c6c-259e-4ff1-8b91-dc31627914f0
2008-06-25 16:19:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
2009-12-11 17:56:31 +01:00
|
|
|
/*** Opérateurs ***/
|
|
|
|
|
|
|
|
|
2010-01-13 15:29:44 +01:00
|
|
|
const ReferencePoint& ReferencePoint::operator=(const ReferencePoint &rp)
|
2008-04-11 10:11:29 +02:00
|
|
|
{
|
2009-05-29 13:46:49 +02:00
|
|
|
if (this == &rp)
|
2009-12-07 16:03:53 +01:00
|
|
|
return *this ;
|
2008-08-18 18:19:02 +02:00
|
|
|
|
2009-12-07 16:03:53 +01:00
|
|
|
this->Point3D::operator=(rp) ;
|
|
|
|
measurements = rp.measurements ;
|
|
|
|
|
|
|
|
return *this ;
|
2008-04-11 10:11:29 +02:00
|
|
|
}
|
|
|
|
|
GuiNuMo : gestion topologie
server.{hh,cc} :
* Utilisation d'une map plutôt que d'une multimap pour stocker la liste
des pièces. Conséquence : les noms des zones doivent être uniques, il
faut donc numéroter les zones des pièces composites (par exemple
« Couloir N1 A » et « Couloir N1 B »).
* Ajout de la fonction inWhichAreas() qui permet d'obtenir la liste des
zones auxquelles appartient un point.
* Modification de la fonction makeWaypointDistancesFromFile() (renommée
makeWaypointListFromFile()) de manière à ce qu'elle calcule la matrice
des distances entre points de passage (lecture d'une liste de points).
Abandon du format décrivant les points en visibilité (voir le fichier
cfg/distances.csv, supprimé à cette révision), puisque nous nous
servons des points de passage et de la description des zones pour
calculer les liens entre points. RESTE À FAIRE : prise en comppte de
la topologie dans le calcul de distance.
* Ajout de deux fonctions areaConnection() qui permettent de récupérer
la liste des points de passage d'une zone, ou faisant l'intersection
entre deux zones.
* Ajout de la fonction distanceTopology, qui calcule la distance entre
deux points en tenant compte de la topologie (zones et points de
passage entre elles).
* Ajout de la fonction makeReferencePointDistances(), qui calcule les
distances entre points de référence, en tenant compte de la
topologie.
* Ajout de la fonction point_vector_idx(), semblable à point_tab_idx()
mais pour un vector<Point>.
referencepoint.{hh,cc} :
* Ajout de l'operator de cast en Point (operator Point()).
area.{hh,cc} :
* Ajout de l'operator==(Area).
cfg/distances.csv
* Suppression de ce fichier obsolète.
git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@47 785a6c6c-259e-4ff1-8b91-dc31627914f0
2008-06-25 16:19:07 +02:00
|
|
|
|
2009-12-14 15:45:16 +01:00
|
|
|
bool ReferencePoint::operator==(const ReferencePoint &rp) const
|
2009-12-11 17:56:31 +01:00
|
|
|
{
|
|
|
|
if (this == &rp)
|
|
|
|
return true ;
|
|
|
|
|
|
|
|
return
|
|
|
|
this->Point3D::operator==(rp) &&
|
|
|
|
measurements == rp.measurements ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
GuiNuMo : gestion topologie
server.{hh,cc} :
* Utilisation d'une map plutôt que d'une multimap pour stocker la liste
des pièces. Conséquence : les noms des zones doivent être uniques, il
faut donc numéroter les zones des pièces composites (par exemple
« Couloir N1 A » et « Couloir N1 B »).
* Ajout de la fonction inWhichAreas() qui permet d'obtenir la liste des
zones auxquelles appartient un point.
* Modification de la fonction makeWaypointDistancesFromFile() (renommée
makeWaypointListFromFile()) de manière à ce qu'elle calcule la matrice
des distances entre points de passage (lecture d'une liste de points).
Abandon du format décrivant les points en visibilité (voir le fichier
cfg/distances.csv, supprimé à cette révision), puisque nous nous
servons des points de passage et de la description des zones pour
calculer les liens entre points. RESTE À FAIRE : prise en comppte de
la topologie dans le calcul de distance.
* Ajout de deux fonctions areaConnection() qui permettent de récupérer
la liste des points de passage d'une zone, ou faisant l'intersection
entre deux zones.
* Ajout de la fonction distanceTopology, qui calcule la distance entre
deux points en tenant compte de la topologie (zones et points de
passage entre elles).
* Ajout de la fonction makeReferencePointDistances(), qui calcule les
distances entre points de référence, en tenant compte de la
topologie.
* Ajout de la fonction point_vector_idx(), semblable à point_tab_idx()
mais pour un vector<Point>.
referencepoint.{hh,cc} :
* Ajout de l'operator de cast en Point (operator Point()).
area.{hh,cc} :
* Ajout de l'operator==(Area).
cfg/distances.csv
* Suppression de ce fichier obsolète.
git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@47 785a6c6c-259e-4ff1-8b91-dc31627914f0
2008-06-25 16:19:07 +02:00
|
|
|
|
2010-01-04 16:37:18 +01:00
|
|
|
ostream &operator<<(ostream &os, const ReferencePoint &rp)
|
2008-04-11 10:11:29 +02:00
|
|
|
{
|
2010-01-04 16:37:18 +01:00
|
|
|
// Coordinates
|
2010-01-13 15:29:44 +01:00
|
|
|
os << (Point3D) rp << '\n' ;
|
2010-01-04 16:37:18 +01:00
|
|
|
|
|
|
|
// List of measurements
|
2009-12-07 16:03:53 +01:00
|
|
|
if (rp.measurements.size() == 0)
|
2010-01-13 15:29:44 +01:00
|
|
|
os << "No measurement." << '\n' ;
|
2009-05-29 13:46:49 +02:00
|
|
|
else
|
2010-01-04 16:37:18 +01:00
|
|
|
for (vector<CalibrationMeasurement*>::const_iterator
|
|
|
|
i = rp.measurements.begin() ;
|
2010-01-13 15:29:44 +01:00
|
|
|
i != rp.measurements.end() ; ++i)
|
|
|
|
os << '\n' << *i ;
|
2008-04-11 10:11:29 +02:00
|
|
|
|
2009-12-07 16:03:53 +01:00
|
|
|
return os ;
|
2010-05-21 10:35:15 +02:00
|
|
|
}
|