Module_deplacement_robot_di.../Trajectoire_bezier.c

45 lines
1.6 KiB
C

#include "Trajectoire.h"
#include "Trajectoire_bezier.h"
void Trajectoire_bezier_get_longueur(struct trajectoire_t * trajectoire){
struct point_xy_t point, point_old;
float nb_pas=500;
trajectoire->longueur=0;
point_old = trajectoire->p1;
for(float abscisse=0; abscisse<=1; abscisse += 1./nb_pas){
point = Trajectoire_bezier_get_point(trajectoire, abscisse);
trajectoire->longueur += distance_points(point, point_old);
point_old = point;
}
}
void Trajectoire_bezier_rapide_get_longueur(struct trajectoire_t * trajectoire){
struct point_xy_t point, point_old;
float nb_pas=500;
trajectoire->longueur=0;
point_old = trajectoire->p1;
return distance_points(trajectoire->p1, trajectoire->p4);
}
/// @brief Retourne le point sur la trajectoire en fonction de l'abscisse
/// @param abscisse : compris entre 0 et 1
struct point_xy_t Trajectoire_bezier_get_point(struct trajectoire_t * trajectoire, float abscisse){
struct point_xy_t point;
point.x = trajectoire->p1.x * (1-abscisse) * (1-abscisse) * (1-abscisse) +
3 * trajectoire->p2.x * abscisse * (1-abscisse) * (1-abscisse) +
3 * trajectoire->p3.x * abscisse * abscisse * (1-abscisse) +
trajectoire->p4.x * abscisse * abscisse * abscisse;
point.y = trajectoire->p1.y * (1-abscisse) * (1-abscisse) * (1-abscisse) +
3 * trajectoire->p2.y * abscisse * (1-abscisse) * (1-abscisse) +
3 * trajectoire->p3.y * abscisse * abscisse * (1-abscisse) +
trajectoire->p4.y * abscisse * abscisse * abscisse;
return point;
}