Ajout des fonctions pour travailler avec les angles
This commit is contained in:
parent
fe161fe5c2
commit
f5994a7f52
40
Geometrie.c
Normal file
40
Geometrie.c
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#include "Geometrie.h"
|
||||||
|
|
||||||
|
|
||||||
|
/// @brief Retourne l'angle entre -PI et +PI
|
||||||
|
/// @param angle
|
||||||
|
/// @return
|
||||||
|
double Geometrie_get_angle_normalisee(double angle){
|
||||||
|
while(angle > M_PI){
|
||||||
|
angle -= 2* M_PI;
|
||||||
|
}
|
||||||
|
while(angle < 2* -M_PI){
|
||||||
|
angle += 2* M_PI;
|
||||||
|
}
|
||||||
|
return angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Indique si un angle est compris entre deux angles
|
||||||
|
/// @param angle : angle à comparer
|
||||||
|
/// @param angle_min : début de la fourchette
|
||||||
|
/// @param angle_max : fin de la fourchette
|
||||||
|
/// @return 1 si l'angle est compris entre min et max, 0 sinon
|
||||||
|
unsigned int Geometrie_compare_angle(double angle, double angle_min, double angle_max){
|
||||||
|
angle = Geometrie_get_angle_normalisee(angle);
|
||||||
|
angle_min = Geometrie_get_angle_normalisee(angle_min);
|
||||||
|
angle_max = Geometrie_get_angle_normalisee(angle_max);
|
||||||
|
|
||||||
|
if(angle_min > angle_max){
|
||||||
|
// cas où la fourchette comprend -PI.
|
||||||
|
if( (angle > angle_min) || (angle < angle_max)){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}else{
|
||||||
|
// Cas normal
|
||||||
|
if( (angle > angle_min) && (angle < angle_max)){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@ -5,10 +5,14 @@
|
|||||||
#define M_PI (3.14159265358979323846)
|
#define M_PI (3.14159265358979323846)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define DEGRE_EN_RADIAN (M_PI / 180.)
|
||||||
|
|
||||||
struct position_t{
|
struct position_t{
|
||||||
double x_mm, y_mm;
|
double x_mm, y_mm;
|
||||||
double angle_radian;
|
double angle_radian;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
double Geometrie_get_angle_normalisee(double angle);
|
||||||
|
unsigned int Geometrie_compare_angle(double angle, double angle_min, double angle_max);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
48
Test.c
48
Test.c
@ -59,6 +59,7 @@ int test_i2c_ecriture_pico_annex_nb_2();
|
|||||||
int test_aller_retour();
|
int test_aller_retour();
|
||||||
void test_trajectoire_teleplot();
|
void test_trajectoire_teleplot();
|
||||||
int test_capteurs_balise(void);
|
int test_capteurs_balise(void);
|
||||||
|
int test_geometrie(void);
|
||||||
|
|
||||||
|
|
||||||
// Mode test : renvoie 0 pour quitter le mode test
|
// Mode test : renvoie 0 pour quitter le mode test
|
||||||
@ -78,6 +79,7 @@ int mode_test(){
|
|||||||
printf("K - Trajets aller retour avec Gyro\n");
|
printf("K - Trajets aller retour avec Gyro\n");
|
||||||
printf("L - pour la localisation\n");
|
printf("L - pour la localisation\n");
|
||||||
printf("M - pour les moteurs\n");
|
printf("M - pour les moteurs\n");
|
||||||
|
printf("N - Fonctions geometrique\n");
|
||||||
printf("T - Trajectoire\n");
|
printf("T - Trajectoire\n");
|
||||||
printf("U - Scan du bus i2c\n");
|
printf("U - Scan du bus i2c\n");
|
||||||
printf("V - APDS_9960\n");
|
printf("V - APDS_9960\n");
|
||||||
@ -154,6 +156,11 @@ int mode_test(){
|
|||||||
while(test_moteurs());
|
while(test_moteurs());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'N':
|
||||||
|
case 'n':
|
||||||
|
while(test_geometrie());
|
||||||
|
break;
|
||||||
|
|
||||||
case 'T':
|
case 'T':
|
||||||
case 't':
|
case 't':
|
||||||
while(test_trajectoire());
|
while(test_trajectoire());
|
||||||
@ -1321,3 +1328,44 @@ int test_vitesse_moteur(enum t_moteur moteur){
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int test_geometrie(){
|
||||||
|
double angle = 270, angle_min, angle_max;
|
||||||
|
printf("Normalise %f° : %f°\n", angle, Geometrie_get_angle_normalisee(angle*DEGRE_EN_RADIAN)/DEGRE_EN_RADIAN);
|
||||||
|
angle = 180;
|
||||||
|
printf("Normalise %f° : %f°\n", angle, Geometrie_get_angle_normalisee(angle*DEGRE_EN_RADIAN)/DEGRE_EN_RADIAN);
|
||||||
|
angle = 181;
|
||||||
|
printf("Normalise %f° : %f°\n", angle, Geometrie_get_angle_normalisee(angle*DEGRE_EN_RADIAN)/DEGRE_EN_RADIAN);
|
||||||
|
angle = 179;
|
||||||
|
printf("Normalise %f° : %f°\n", angle, Geometrie_get_angle_normalisee(angle*DEGRE_EN_RADIAN)/DEGRE_EN_RADIAN);
|
||||||
|
|
||||||
|
|
||||||
|
angle_min = -100;
|
||||||
|
angle_max = -80;
|
||||||
|
angle = -90;
|
||||||
|
printf("Anglee %f° compris entre %f° et %f° : %d\n", angle, angle_min, angle_max,
|
||||||
|
Geometrie_compare_angle(angle*DEGRE_EN_RADIAN, angle_min*DEGRE_EN_RADIAN, angle_max*DEGRE_EN_RADIAN));
|
||||||
|
angle = 90;
|
||||||
|
printf("Anglee %f° compris entre %f° et %f° : %d\n", angle, angle_max, angle_min,
|
||||||
|
Geometrie_compare_angle(angle*DEGRE_EN_RADIAN, angle_min*DEGRE_EN_RADIAN, angle_max*DEGRE_EN_RADIAN));
|
||||||
|
angle = -120;
|
||||||
|
printf("Anglee %f° compris entre %f° et %f° : %d\n", angle, angle_max, angle_min,
|
||||||
|
Geometrie_compare_angle(angle*DEGRE_EN_RADIAN, angle_min*DEGRE_EN_RADIAN, angle_max*DEGRE_EN_RADIAN));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
angle_min = 178;
|
||||||
|
angle_max = 182;
|
||||||
|
angle = 179;
|
||||||
|
printf("Anglee %f° compris entre %f° et %f° : %d\n", angle, angle_min, angle_max,
|
||||||
|
Geometrie_compare_angle(angle*DEGRE_EN_RADIAN, angle_min*DEGRE_EN_RADIAN, angle_max*DEGRE_EN_RADIAN));
|
||||||
|
angle = 177;
|
||||||
|
printf("Anglee %f° compris entre %f° et %f° : %d\n", angle, angle_max, angle_min,
|
||||||
|
Geometrie_compare_angle(angle*DEGRE_EN_RADIAN, angle_min*DEGRE_EN_RADIAN, angle_max*DEGRE_EN_RADIAN));
|
||||||
|
angle = 183;
|
||||||
|
printf("Anglee %f° compris entre %f° et %f° : %d\n", angle, angle_max, angle_min,
|
||||||
|
Geometrie_compare_angle(angle*DEGRE_EN_RADIAN, angle_min*DEGRE_EN_RADIAN, angle_max*DEGRE_EN_RADIAN));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user