2024-04-28 21:12:34 +00:00
|
|
|
#include "math.h"
|
|
|
|
#include "Trajectoire.h"
|
|
|
|
|
|
|
|
|
|
|
|
void Trajectoire_circulaire_get_longueur(struct trajectoire_t * trajectoire){
|
|
|
|
float distance_angulaire;
|
2025-01-20 19:39:28 +00:00
|
|
|
if(trajectoire->angle_debut_rad > trajectoire->angle_fin_rad){
|
|
|
|
distance_angulaire = trajectoire->angle_debut_rad - trajectoire->angle_fin_rad;
|
2024-04-28 21:12:34 +00:00
|
|
|
}else{
|
2025-01-20 19:39:28 +00:00
|
|
|
distance_angulaire = trajectoire->angle_fin_rad - trajectoire->angle_debut_rad;
|
2024-04-28 21:12:34 +00:00
|
|
|
}
|
2025-01-20 19:39:28 +00:00
|
|
|
trajectoire->longueur = trajectoire->rayon * distance_angulaire;
|
2024-04-28 21:12:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// @brief Retourne le point sur la trajectoire en fonction de l'abscisse
|
|
|
|
/// @param abscisse : compris entre 0 et 1
|
|
|
|
struct point_xy_t Trajectoire_circulaire_get_point(struct trajectoire_t * trajectoire, float abscisse){
|
|
|
|
struct point_xy_t point;
|
2025-01-20 19:39:28 +00:00
|
|
|
float angle_rad;
|
2024-04-28 21:12:34 +00:00
|
|
|
|
2025-01-20 19:39:28 +00:00
|
|
|
angle_rad = (float) trajectoire->angle_debut_rad * (1-abscisse) + (float) trajectoire->angle_fin_rad * abscisse;
|
|
|
|
point.x = trajectoire->p1.x + cos(angle_rad) * trajectoire->rayon;
|
|
|
|
point.y = trajectoire->p1.y + sin(angle_rad) * trajectoire->rayon;
|
2024-04-28 21:12:34 +00:00
|
|
|
|
|
|
|
return point;
|
|
|
|
}
|