diff options
Diffstat (limited to 'problem.hpp')
-rw-r--r-- | problem.hpp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/problem.hpp b/problem.hpp index 10adaf8..7097e0c 100644 --- a/problem.hpp +++ b/problem.hpp @@ -33,11 +33,40 @@ struct problem { hilare_a begin_pos, end_pos; }; +struct hilare_a_mvt { + // Describes an elementary movement : rotate car and run on a circle + + // Hilare se déplace sur un arc de cercle. Le chariot donne la contrainte + // par rapport à la droite sur laquelle se place le centre de ce cercle + // (c'est la droite perpendiculaire à dir_trolley() passant par pos_trolley()) + + // deux étapes dans le mouvement : + // - bien orienter la voiture (c'est l'angle dtheta_before) + // - avancer/reculer sur le cercle (c'est l'angle domega) + + hilare_a from, to; + vec center; + double dtheta_before; // rotation de la voiture sur elle-même avant + double domega; // angle parcouru sur le cercle de centre center + + double length(); // length of a movement + + bool intersects(const obstacle& o) const; // intersects an obstacle ? + bool intersects(const problem &p) const; // intersects any obstacle on the map ? +}; + struct solution { - std::vector<hilare_a> movement; + std::vector<hilare_a_mvt> movement; + solution(const std::vector<hilare_a_mvt> &m) : movement(m) {} + + // simple direct solution from A to B, takes into account no obstacles + static solution direct_sol(const hilare_a &pos_a, const hilare_a &pos_b); + + // check if a solution intersects an obstacle of problem + bool intersects(const problem &p) const; - // TODO : décrire mieux un mouvement entre deux points (donner - // le centre de rotation, l'angle, etc.) + // calculate a solution + static solution make_solution(const problem &p); }; |