Projet

Général

Profil

« Précédent | Suivant » 

Révision 520

Modifications TP1 et TP2

Voir les différences:

main.c
#include <stdlib.h>
#include <strings.h>
#include <math.h>
#include "trame.h"
#include "trame.h"
#define Rterre 6370
#define PI 3.14159
//Structure
typedef struct
{
float Latitude;
float Longitude;
}Pos;
//Position p1,p2;
typedef struct
{
Pos rp;
float vitmax;
}Zone;
Zone zones[] = {
{{44.7887762, -3.012}, 50}, /* Descripteur de la premi?re zone */
{{44.7891220, -3,013}, 70},
{{46.2514780, 4.000}, 80},
};
int nb_zone=3;
//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",
"$GPGSV,3,3,10,22,39,053,50,28,15,320,*7E",
......
"$GPZDA,141914.00,01,02,2006,00,00*69",
0};
/*void ma_fonction(){
}
void decode_trame(char * tr){
//Fontions personnelles
/*void decode_trame(char * tr){
//implanter une partie de votre code ICI.
Appel de ma_fonction() ;
}
......
}
*/
//Structure
typedef struct
int trame_cmp(char*trame, char*type)
{
float Latitude;
float Longitude;
}Position;
Position p1,p2;
typedef struct
{
Position rpos;
float vitmax;
}Zone;
//Fontions personnelles
int trame_cmp(char * trame, char * type)
{
int i=0, ok=1;
for(i=0;i<6;i++)
......
{
static int cpt=0 ;
cpt++ ;
Pos p;
/* if(trame_cmp("$GPGGA suite chaine","GPGGA"))
if(trame_cmp(trame,"GPGGA")==1)
{
printf("%s\n",trame);
decode_trame(trame,&p);
}*/
printf ("> %s\n",trame);
printf("Latitude= %f , Longtude= %f \n",p.Latitude,p.Longitude);
}
}
......
int decode_int(char c)
{
int b;
if(c>='0' && (c<='9'))
{
c=c-48;
b=c-48;
}
else
{
if((c>='A') && c<='Z')
{
c=64-c;
b=64-c;
}
}
return c;
return b;
}
void test_decode_int(void)
{
......
}
}
int decode_nombre(char *ch, int n)
int decode_nombre(char *ch,int i,int n)
{
int temp=0, i;
int temp=0, j;
for(i=0;i<n;i++)
for(j=i;j<i+n;j++)
{
temp=(temp*10) + decode_int(ch[i]);
temp=(temp*10) + decode_int(ch[j]);
}
return temp;
}
void test_decode_nombre(void)
{
if(decode_nombre("4325",2)!=43){
if(decode_nombre("4325",0,2)!=43){
printf("Erreur test decode_nombre.\n");
}
if(decode_nombre("6789",1,3)!=789){
printf("Erreur test decode_nombre.\n");
}
}
float decode_latitude(char *trame )
{
float degres,reste,flottant,res;
float deg,reste,flottant,res;
int i=17;
degres=decode_nombre(trame,i+2);
reste=decode_nombre(trame,i+4);
flottant=decode_nombre(trame,i+10);
deg=decode_nombre(trame,i+2,i);
reste=decode_nombre(trame,i+4,i+2);
flottant=decode_nombre(trame,i+10,i+5);
res=deg+((reste+(flottant/10000))/60);
res=degres+((reste+(flottant/10000))/60);
if(trame[40]=='W')
{
res-=res;
}
return res;
}
float decode_longitude(char *trame )
{
float degres,reste,flottant,res;
int i=30;
degres=decode_nombre(trame,i+2);
reste=decode_nombre(trame,i+3);
flottant=decode_nombre(trame,i+10);
float deg,reste,flottant,res;
int j=30;
deg=decode_nombre(trame,j+2,j);
reste=decode_nombre(trame,j+3,j+2);
flottant=decode_nombre(trame,j+10,j+5);
res=deg+((reste+(flottant/10000))/60);
res=degres+((reste+(flottant/10000))/60);
if(trame[40]=='S')
{
res-=res;
}
return res;
}
float decode_position(char *trame,Position Pos)
void decode_trame(char *trame,Pos *P)
{
Pos.Latitude=decode_latitude(trame);
Pos.Longitude=decode_longitude(trame);
P->Latitude=decode_latitude(trame);
P->Longitude=decode_longitude(trame);
}
float calcule_distance(Position p1, Position p2)
float calcule_distance(Pos p1, Pos p2)
{
float distance;
distance=((2*3.14*6370)/360)*sqrt((p2.Latitude-p1.Latitude)*(p2.Latitude-p1.Latitude)+(p2.Longitude-p1.Longitude)*(p2.Longitude-p1.Longitude));
distance=((2*3.14*Rterre)/360)*sqrt((p2.Latitude-p1.Latitude)*(p2.Latitude-p1.Latitude)+(p2.Longitude-p1.Longitude)*(p2.Longitude-p1.Longitude));
return distance;
}
float calcule_vitesse(Position p1, Position p2)
float calcule_vitesse(Pos p1, Pos p2)
{
float vitesse;
vitesse=(calcule_distance(p1,p2)*3600);
vitesse=(calcule_distance(p1,p2)*3600); /* v(m/s)=d/t le temps est 1s donc on multiplie par 3600 pour l'avoir en km/h */
return vitesse;
}
Zone r[] = {
{{44.7887762, -3.012}, 50}, /* Descripteur de la premi?re zone */
{{44.7891220, -3,013}, 70},
};
int distance_la_plus_proche_zone(Position p, Zone r[], int nbzones, float *d)
int distance_la_plus_proche_zone(Pos p, Zone rp[], int nbzones, float *d)
{
int min_distance;
min_distance=2000000;
float Dist_int;
int i, j;
Dist_int = calcule_distance(&p, &rp[0].rp);
for (i=0; i<nbzones; i++)
{
*d = calcul_distance(&p, &rp[i].rp);
if (*d<=Dist_int)
{
j=i;
Dist_int=*d;
}
}
return j;
}
// Ne pas modifier cette fonction

Formats disponibles : Unified diff