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