Projet

Général

Profil

« Précédent | Suivant » 

Révision 410

Ajouté par Mafall FALL il y a presque 3 ans

calcul distance et vitesse

Voir les différences:

main.c
#include <stdlib.h>
#include <math.h>
#include <strings.h>
#include "trame.h"
#include "trame.h"
#define Rayon 6378.1370
//Trames de tests ? modifier si n?cessaire.
char * trames[]= {"$GPGSV,3,2,10,15,03,077,,18,04,041,42,19,85,271,,20,08,214,*7C",
......
"$GPVTG,99.4,T,,M,0.4,N,0.7,K*57",
"$GPZDA,141914.00,01,02,2006,00,00*69",
0};
// declaration d'un tableau de zones dangereuses
/* Zone zones[] = {
{{44.78887762, -3.012}, 50},
{{44.7891220, -3.013}, 70},
}; */
typedef struct // declaration du type position compos? de la latitude et la longitude
{
float latitude;
float longitude;
} position;
} position;
position test_pos;
//Fonction ? modifier !!!!!
void traitement(char * trame)
{
static int cpt=0;
/*static int cpt=0;
cpt++;
if (trame_cmp(trame,"$GPGGA"))
printf ("> %s\n",trames);
printf ("> %s\n",trames); */
position p;
if (decode_trame(trame,&p))
{
printf ("> %s\n",trame);
printf("la latitude est %f \n la longitude est %f \n ",p.latitude,p.longitude); // affichage des positions de chaque trame GPGGA
}
}
......
{
val_sexa+= (decode_int(longi[i]))*pow(10,-i+4);// d?codage de la partie d?cimale
}
res_convers=(int)(val_sexa/1000);// on recueille les degr?s
res_convers=(int)(val_sexa/100);// on recueille les degr?s
res_convers= res_convers + (val_sexa - res_convers*100)/60;// conversion des minutes en degr? et ajout ? la somme
return res_convers;
}
float fonction_generique(char* ch) // fonction qui convertit la latitude ou la longitude en nombre flottant
{
float res_convers;
......
int decode_trame(char* trame,position *pos)// fonction qui valide le bon format de la trame "GPGGA" et extrait la position (la latitude et la longitude en float)
int decode_trame(char* trame,position *pos)/*fonction qui valide le bon format de la trame "GPGGA" et extrait la position (la latitude et la longitude en float)
retourne 1 quand la trame est bonn etourne 0 quand la trame est ?rron?e et renseigne les champs de Position*/
{
char longi[10]; // tableau pour la longitude
char lati[9]; // tableau pour la latitude
......
}
float calcul_distance(position* pos1,position* pos2) // fonction qui calcule la distance entre deux positions
{
float result= (40000/360) * sqrt(((pos2->latitude - pos1->latitude)*(pos2->latitude - pos1->latitude))+((pos2->longitude - pos1->longitude)*(pos2->longitude - pos1->longitude))) ;
return result;
}
float calcul_vitesse(position* pos1,position* pos2) // fonction qui calcule la vitesse entre deux positions
{
float vitesse;
vitesse=3600*(calcul_distance(&pos1,&pos2)); // calcul de la vitesse entre pos1 et pos2 pendant 1s
return vitesse;
}
//Ajouter vos tests unitaires dans cette fonction.
void tests_unitaires(void) {

Formats disponibles : Unified diff