Projet

Général

Profil

« Précédent | Suivant » 

Révision 349

Ajouté par Yaye Oumy NDONG il y a presque 3 ans

modification de la fonction calcul_distance

Voir les différences:

branch/Ndong_Yaye_Oumy/sp4a12/main.c
"$GPGSA,A,3,,03,,22,14,,01,,18,,,,3.9,3.4,1.9*39",
"$GPVTG,99.4,T,,M,0.4,N,0.7,K*57",
"$GPZDA,141914.00,01,02,2006,00,00*69",
0};
0};
typedef struct {
float latitude;
float longitude;
}Position ;
typedef struct {
Position rpos;
float vitmax;
}Zone;
Zone zones[]={
{{44.7887762, -3.012}, 50},
{{44.7891220, -3.013}, 70},
{{45.3456220, -3.045}, 80},
{{46.7350220, -3.023}, 90},
};
int trame_cmp(char* trame,char *type){ // fonction qui renvoie 1 si la trame commence par la cha?ne de caract?re type et z?ro dans les autres cas
int i, ok =1 ;
for(i=0 ;i<=4 ;i=i+1){
......
float calcul_distance(Position pos, Position pos_prec){
float distance;
int perimetre=40000;
distance= sqrt((pos_prec.longitude-pos.longitude)*(pos_prec.longitude-pos.longitude)+(pos_prec.latitude-pos.latitude)*(pos_prec.latitude-pos.latitude)) * perimetre;
return distance; // la distance est en m?tres
int perimetre=40000; // perimetre de la terre
distance= sqrt((pos_prec.longitude-pos.longitude)*(pos_prec.longitude-pos.longitude)+(pos_prec.latitude-pos.latitude)*(pos_prec.latitude-pos.latitude)) *( perimetre/360);
return distance;
}
float calcul_vitesse(Position pos, Position pos_prec)
{
float vitesse,distance;
distance=calcul_distance(pos,pos_prec);
vitesse=distance*3.6;
vitesse=distance*3.6; // le temps ?tant de 1s, on a directement la vitessse en m/s , on la convertit en km/h en multipliant par 3,6
return vitesse;
}
int distance_a_la_plus_proche_zone(Position p,Zone r[],int nb_zones,float *d)
{
float d1;
int a,i;
*d=calcul_distance(p, r[0].rpos); // on calcule la distance entre la position actuelle et la premiere zone dangereuse du tableau
if(nb_zones==0)a=-1;
for(i=1;i<nb_zones;i++)
{
d1=calcul_vitesse(p, r[i].rpos); // a chaque it?ration on calcule la distance entre la position actuelle et une zone dangeureuse
if(d1<(*d)){ // si cette distance est inf?rieure ? la distance d calcul?e,on remplace d par cette nouvelle distance
(*d)=d1;
a=i; // a prend la valeur de l'indice correspondant ? cette zone dangereuse
}
}
return a; // on revoie l'indice de la zone dangereuse la plus proche
}
//Fonction ? modifier !!!!!
void traitement(char * trame)
......
Position a={0.0,0.0}; // on initialise 2 struxtrures afin d'effecuer les test unitaires de decode_trame
Position b={0.0,0.0};
Position p1={45.750000,3.11006};
Position p3={37.750403,4.10065};
Position p3={45.750403,3.11007};
Position* p;
Position* p2; // pour tester decode_trame
p=&a; // on affecte ? chache pointeur l'adresse d'une stru
......
exit(-1);
}
if(calcul_distance(p1,p3)-8932820>1){ //test calcul_distance (prise en com^te de l'erreur d'1m)
if(calcul_distance(p1,p3)-0.044812>0.001){ //test calcul_distance (prise en com^te de l'erreur d'1m)
printf ("Erreur Test unitaire calcul_distance.\n");
exit(-1);
}
if(calcul_vitesse(p1,p3)-32158152>0.1){ //test calcul_vitesse (prise en compte de l'erreur)
printf ("Erreur Test unitaire calcul_distance.\n");
if(calcul_vitesse(p1,p3)-0.1613232>0.01){ //test calcul_vitesse (prise en compte de l'erreur)
printf ("Erreur Test unitaire calcul_vitesse.\n");
exit(-1);
}

Formats disponibles : Unified diff