Bonjour,
J'i besoin de votre ade svp en fait je débute en c++, j'ai une classe patient qui hérite de la classe personne, j'ai deux fonctions que j'utilise une fonction pour remplir un vecteur d'objets de patient avec des latitudes et longitudes ..
Fonction qui calcule la distance entre deux données GPS données
comme suit :
Après j'ai un fichier csv qui contient des latitudes et des longitudes il contient deux colonnes et 379 ligne , en effet je veux appeler la fonction qui calcule la distance de telle sorte qu'elle calcule la distance avec les patients générés aléatoirement et la latitude et longitude des medecins contenu dans un fichier csv
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 /*------ Patient function that fill a vector with random Latitude and longitude----*/ void Patient:: fillPatient(vector <Patient>& NewPatient) { int etat =0; double LatPa; double LongPa; double min1 = 45.173886; double max1 = 45.213861; double min = 0.673541; double max = 0.747362; //unsigned int size = NewPatient.size(); for (unsigned int i =0; i<100; i++){ LatPa = min1 + ((max1 - min1) * (rand () / (double) RAND_MAX)); LongPa = min + ((max - min) * (rand () / (double) RAND_MAX)); etat ++; Patient NewPat(etat,LatPa, LongPa); NewPatient.push_back(NewPat); } } /*-------- function calculate distance ------*/ double Personne::distance( double latA, double longA, double latB, double longB ) // latitude and longitude of arbitrary entities { constexpr double degToRad = 3.14159265358979 / 180.0; // conversion factor, evaluated at compile time const double radEarth = 6371; // mean radius of the earth in km latA *= degToRad; // convert to radians (if originally in degrees) longA *= degToRad; latB *= degToRad; longB *= degToRad; double cosAngle = sin( latA ) * sin( latB ) + cos( latA ) * cos( latB ) * cos( longA - longB ); // cosine of angle between position vectors, from spherical coordinates and dot product return radEarth * acos( cosAngle ); // great-circle distance ( "r x theta" ) }
le probleme et dans l'appel de la fonction de tel sorte qu'elle calcule la distance entre un nombre de patients et tous les medecins dans le fichier !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 /*------main function -------*/ int main() { ifstream myfile ("C:/Program Files/text.csv");//file that contains latitude and longitude of doctors and it has 2 columns and 379 lignes int lineNumber = 0; int lineNumberSought = 400; // you may get it as argument /*------ Reation d'un vecteur d'objets Patients------*/ vector <Patient> myPat; Patient::fillPatient(myPat); if (myfile.is_open()) { while (getline(myfile,line)) { istringstream myline(line); while(getline(myline, csvItem, ';')) { //cout << csvItem << endl; for ( k = 0; k < 2; k++ ){ // for (int j =0;j<4; j++){ for( j =0; j <379 ; j++ ){ distanc[j][i] = atof(csvItem.c_str()); double dist = Personne::distance(myPat[k].GetLat(), myPat[k].GetLong(), distanc[j][0] ,distanc[j][1] ); cout << "The distance between patient" << k + 1 << " and doctor " << j + 1 << " is " << dist << "km " << endl; } // k++; } myfile.close(); }}}}//} else { cout << "pas de fichier"<<endl; }
![]()
Partager