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) | ||||
| #endif | ||||
| 
 | ||||
| #define DEGRE_EN_RADIAN  (M_PI / 180.) | ||||
| 
 | ||||
| struct position_t{ | ||||
|     double x_mm, y_mm; | ||||
|     double angle_radian; | ||||
| }; | ||||
| 
 | ||||
| double Geometrie_get_angle_normalisee(double angle); | ||||
| unsigned int Geometrie_compare_angle(double angle, double angle_min, double angle_max); | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
							
								
								
									
										48
									
								
								Test.c
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								Test.c
									
									
									
									
									
								
							| @ -59,6 +59,7 @@ int test_i2c_ecriture_pico_annex_nb_2(); | ||||
| int test_aller_retour(); | ||||
| void test_trajectoire_teleplot(); | ||||
| int test_capteurs_balise(void); | ||||
| int test_geometrie(void); | ||||
| 
 | ||||
| 
 | ||||
| // 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("L - pour la localisation\n"); | ||||
|     printf("M - pour les moteurs\n"); | ||||
|     printf("N - Fonctions geometrique\n"); | ||||
|     printf("T - Trajectoire\n"); | ||||
|     printf("U - Scan du bus i2c\n"); | ||||
|     printf("V - APDS_9960\n"); | ||||
| @ -154,6 +156,11 @@ int mode_test(){ | ||||
|         while(test_moteurs()); | ||||
|         break; | ||||
| 
 | ||||
|     case 'N': | ||||
|     case 'n': | ||||
|         while(test_geometrie()); | ||||
|         break; | ||||
| 
 | ||||
|     case 'T': | ||||
|     case 't': | ||||
|         while(test_trajectoire()); | ||||
| @ -1321,3 +1328,44 @@ int test_vitesse_moteur(enum t_moteur moteur){ | ||||
|     } | ||||
|     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