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
|
|
|
|
|
|
|
|
2008-04-30 11:36:55 +02:00
|
|
|
float ReferencePoint::getSsSquareDistance(const vector<Measurement> &m)const
|
2008-04-11 10:11:29 +02:00
|
|
|
{
|
2008-08-18 18:19:02 +02:00
|
|
|
unsigned int i, j;
|
|
|
|
float ret = 0;
|
|
|
|
bool found;
|
|
|
|
vector<Measurement> ref_m = measurement_list;
|
|
|
|
vector<Measurement> test_m = m;
|
|
|
|
Measurement new_meas;
|
|
|
|
|
|
|
|
new_meas.addSsValue(-95);
|
|
|
|
|
|
|
|
/* Complete measurement vector with unexisting ap (from ref point) */
|
|
|
|
for(i = 0 ; i < ref_m.size() ; i++)
|
|
|
|
{
|
|
|
|
found = false;
|
|
|
|
for(j = 0 ; j < test_m.size() && !found ; j++)
|
|
|
|
if(test_m[j].getMacAddr() == ref_m[i].getMacAddr())
|
|
|
|
found = true;
|
|
|
|
if(!found)
|
|
|
|
{
|
|
|
|
new_meas.setMacAddr(measurement_list[i].getMacAddr());
|
|
|
|
test_m.push_back(new_meas);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Now, complete ref. point meas. */
|
|
|
|
for(i = 0 ; i < test_m.size() ; i++)
|
2008-04-11 10:11:29 +02:00
|
|
|
{
|
2008-08-18 18:19:02 +02:00
|
|
|
found = false;
|
|
|
|
for(j = 0 ; j < ref_m.size() && !found ; j++)
|
|
|
|
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);
|
|
|
|
}
|
2008-04-11 10:11:29 +02:00
|
|
|
}
|
2008-04-30 11:36:55 +02:00
|
|
|
|
2008-08-18 18:19:02 +02:00
|
|
|
/* Now, compute SS distance */
|
|
|
|
for (i = 0 ; i < test_m.size() ; i++)
|
|
|
|
{
|
|
|
|
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());
|
|
|
|
}
|
|
|
|
j++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ref_m.clear();
|
|
|
|
test_m.clear();
|
|
|
|
|
|
|
|
return ret;
|
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
|
|
|
|
|
|
|
|
2008-04-30 11:36:55 +02:00
|
|
|
void ReferencePoint::addMeasurement(const string &mac_a, const int &value)
|
2008-04-11 10:11:29 +02:00
|
|
|
{
|
2008-08-18 18:19:02 +02:00
|
|
|
unsigned int i;
|
|
|
|
Measurement m;
|
|
|
|
bool inserted = false;
|
|
|
|
|
|
|
|
for (i = 0 ; i < measurement_list.size() ; i++)
|
|
|
|
if(measurement_list[i].getMacAddr() == mac_a)
|
|
|
|
{
|
|
|
|
measurement_list[i].addSsValue(value);
|
|
|
|
inserted = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if(inserted == false)
|
|
|
|
{
|
|
|
|
m.setMacAddr(mac_a);
|
|
|
|
m.addSsValue(value);
|
|
|
|
measurement_list.push_back(m);
|
|
|
|
}
|
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
|
|
|
|
|
|
|
|
|
|
|
bool ReferencePoint::getPowerForAp(const string &ap_mac, float *p)const
|
|
|
|
{
|
2008-08-18 18:19:02 +02:00
|
|
|
unsigned int i;
|
|
|
|
string str;
|
|
|
|
string macLowerCase;
|
|
|
|
|
|
|
|
str=ap_mac;
|
|
|
|
|
|
|
|
//Pour convertir les majuscules en miniscules
|
|
|
|
const int length=str.length();
|
|
|
|
for(int j=0; j < length; ++j)
|
|
|
|
{
|
|
|
|
str[j] = std::tolower(str[j]);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0 ; i < measurement_list.size() ; i++)
|
|
|
|
if(measurement_list[i].getMacAddr() == str)
|
|
|
|
{
|
|
|
|
*p = measurement_list[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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-04-11 10:11:29 +02:00
|
|
|
ReferencePoint ReferencePoint::operator=(const ReferencePoint &rp)
|
|
|
|
{
|
2008-08-18 18:19:02 +02:00
|
|
|
if(this == &rp)
|
|
|
|
return *this;
|
|
|
|
|
|
|
|
coordinates = rp.coordinates;
|
|
|
|
measurement_list = rp.measurement_list;
|
|
|
|
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
|
|
|
|
|
|
|
|
2008-04-11 10:11:29 +02:00
|
|
|
ostream &operator<<(ostream &os, ReferencePoint &rp)
|
|
|
|
{
|
2008-08-18 18:19:02 +02:00
|
|
|
unsigned int i;
|
|
|
|
|
|
|
|
os << rp.coordinates << endl;
|
|
|
|
if(rp.measurement_list.size() == 0)
|
|
|
|
os << "No measurements" << endl;
|
|
|
|
else
|
|
|
|
for (i = 0 ; i < rp.measurement_list.size() ; i++)
|
|
|
|
os << rp.measurement_list[i] << endl;
|
|
|
|
|
|
|
|
return os;
|
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
|
|
|
|
|
|
|
/* Opérateur de cast en Point */
|
|
|
|
ReferencePoint::operator Point() const
|
|
|
|
{
|
2008-08-18 18:19:02 +02:00
|
|
|
return coordinates ;
|
2008-04-11 10:11:29 +02:00
|
|
|
}
|