Bonjour,
voila, je suis en train de créer un petit simulateur de voiture avec conduite automatique :
j'ai un état 1 (position, cap, vitesse, accélération). La fonction commande permet de donner la direction et l'accélération à prendre en fonction de l'environnement (il s'agit d'un circuit avec des obstacles représentés par des 1 et des espaces libres par 0).
La fonction balayage consiste à balayer dans les directions teta appartenant à [cap-pi/2, cap+pi/2]
pour chercher l'obstacle le plus loin dans chacune de ces directions.
ensuite on sélectionne la valeur maximale de ces distances. Et cette valeur sera le nouveau cap à prendre.
voila le code :
le pb que je rencontre, c'est que j'obtient tjs 0 comme distance maximale
je crois que le pb se situe au niveau de la boucle while
typedef struct {float abscisse;float ordonnee;} points;
float balayage ( points position,float cap , int** circ, int n, int m) {
float teta ;int r=0; int k=1;
int a= (position.abscisse);
int b= (position.ordonnee);
points libre1 = position; points libre2;
int i2= (libre2.abscisse);
int j2= (libre2.ordonnee);
float * tab_teta = tab_radians (181);
for ( r=0; r<=180; r++) {
teta = (cap- PI/2. +r*0.01745 ); /*on balaye tous les 1° ( Pi/180~0.01745... */
while (i2<(n*COEF) && j2<(m*COEF) && i2>=0 && j2>=0 && circ[i2][j2]==0) {
libre1 =libre2;
i2= (a + floor (0.1*k));
j2= (b+ floor (tanf (teta) *0.1*k));
k++;
}
tab_teta [r]= distance (position, libre1);
}
return max_tab ( tab_teta, 181);
}
float * tab_radians ( int n) {
float * tab = (float*) malloc (n* sizeof(float ) );
int i;
for (i=0; i<n; i++) tab[i] = 0 ;
return tab;
}
/* fonction puissance pour flottants*/
float puissf (float x, int y) {
return (y > 0) ? (x*puissf(x, y-1)) : 1;
}
/* recherche du maximum dans un tab de flottants*/
float max_tab (float *tab,int taille){
int i;
float max=tab[0];
for(i=1;i<taille;++i){
if (tab[i]> max){
max=tab[i];
}
}
return max;
}
/* calcul de la distance entre deux points du circuit */
float distance (points p1, points p2) {
return sqrtf ( puissf(((p1.abscisse)-(p2.abscisse)),2)+ puissf(( (p1.ordonnee)- (p2.ordonnee)),2));
}