Révision 349
Ajouté par Yaye Oumy NDONG il y a presque 3 ans
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
modification de la fonction calcul_distance