From 8aa7f2ee67640b6c76b45f99905529ef01078509 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 8 Jan 2015 16:33:13 +0100 Subject: Add geometry & problem description --- problem.hpp | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'problem.hpp') 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 movement; + std::vector movement; + solution(const std::vector &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); }; -- cgit v1.2.3