Projet

Général

Profil

« Précédent | Suivant » 

Révision 392

Ajouté par Jordan MORARD il y a environ 3 ans

TP2 bien avancé, quelques questions difficiles a faire..

Voir les différences:

main.c
typedef struct {
float lat;
float lon;
float latitude;
float longitude;
}position;
typedef struct {
......
//d?claration et initialisation de la distance
float distance = 0.0;
float calcul_distance(position *p1,position *p2)
{
float D;
D = sqrt(pow((p2->latitude-p1->latitude)*PI*Rayon_Terre/180.0,2)+pow(((p2->longitude-p1->longitude)*(cos(((p2->latitude+p1->latitude)/2.0)*PI/180.0)*PI*Rayon_Terre/180.0)),2)); //formule calcul d'une distance sur une sphere, voir internet
return D;
}
float latitude(char *ch)
{
float res, res1, res2, res3;
......
if(trame_cmp(trame,"GPGGA")==1) //verifier si la trame GPS contient le caractere "GPGGA"
{
printf ("> %s\n",trame);
printf("\nLatitude : %f Longitude : %f \n\n ", decode_trame_latitude(trame), decode_trame_longitude(trame));
printf("\n> %s \n\n ",trame);
}
}
//description de toutes les zones
zone zones[]= {
{{44.7887762, -3.012}, 50},
{{45.752610, 3.465067}, 60},
{{45.75080886, 3.11006165}, 70},
{{45.752910, 3.110067}, 80},
{{46.753910, 4.618967}, 90},
};
int distance_a_la_proche_zone(position p, zone r[],int nb_zones, float *d)
{
int i,j;
float reference;
reference = calcul_distance(&p,&r[0].rpos); //creation reference sur la premiere zone du tableau pour commnencer la boucle
for(i=0; i<nb_zones; i++)
{
*d=calcul_distance(&p,&r[i].rpos);
if(*d<=reference)
{
j=i; //changement de l'indice de la zone la plus proche
reference=*d; //changement de la reference en distance de la zone la plus proche
}
}
return j;
}
int trame_cmp(char * trame,char * type)
{
int i;
......
}
float decode_trame_latitude(char *ch) //executer directement les deux fonctions pour retrouver la longitude et la latitude
decode_trame(char *ch, position *p) //executer directement les deux fonctions pour retrouver la longitude et la latitude
{
position p2;
p2.lat = latitude(ch);
return p2.lat
p->latitude = latitude(ch);
p->longitude = longitude(ch);
}
float decode_trame_latitude(char *ch) //executer directement les deux fonctions pour retrouver la longitude et la latitude
{
position p2;
p3.lat = latitude(ch);
return p3.lat
}
float calcul_distance(position *p1,position *p2)
{
float D;
D = sqrt(pow((p2->latitude-p1->latitude)*PI*Rayon_Terre/180.0,2)+pow(((p2->longitude-p1->longitude)*(cos(((p2->latitude+p1->latitude)/2.0)*PI/180.0)*PI*Rayon_Terre/180.0)),2)); //formule calcul d'une distance sur une sphere, voir internet
return D;
}
float calcul_vitesse(position p1,position p2)
{
float V;
......
return V;
}
//Ajouter vos tests unitaires dans cette fonction.
void tests_unitaires(void)
{
......
printf ("Erreur Test unitaire calcul vitesse.\n");
exit(-1);
}
int nombre_zone = 5;
//test fonction distance_a_la_proche_zone avec l'indice de la zone la plus proche dans le test, la zone 3 correspond a la 4eme zone du tableau zones[]
if(distance_a_la_proche_zone(pos4,zones,nombre_zone,&distance)!=3){
printf ("Erreur Test unitaire calcul distance_a_la_proche_zone.\n");
exit(-1);
}
}
// Ne pas modifier cette fonction
int main(int argc,char ** argv)

Formats disponibles : Unified diff