aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md74
-rw-r--r--problem.cpp2
-rw-r--r--ui.cpp4
3 files changed, 76 insertions, 4 deletions
diff --git a/README.md b/README.md
index eb95230..9885fc3 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,73 @@
-Projet de robotique pour le cours de JP Laumond 2014-2015. Alex Auvolat, Jean Fabre.
+Projet de robotique pour le cours de JP Laumond 2014-2015.
+
+Alex Auvolat--Bernstein, Jean Fabre-Monplaisir.
+
+
+## Présentation
+
+Pour ce projet nous avons implémenté une méthode de recherche de chemin pour le
+robot Hilare composé d'une voiture qui tire une remorque simple. Notre solution
+se base sur des trajectoires composées d'arcs de cercle et de lignes droites.
+
+
+## Compilation et lancement
+
+Il est nécessaire d'installer la bibliothèque graphique SFML
+<http://www.sfml-dev.org> avant de compiler.
+
+Sous Linux, taper simplement :
+
+ make
+
+Sous Mac OS X, taper :
+
+ g++ -framework sfml-window -framework sfml-graphics -framework sfml-system \
+ ui.cpp problem.cpp main.cpp -o pathfind
+
+Ensuite, pour lancer l'application, invoquer le binaire avec :
+
+ ./pathfind
+
+
+## Utilisation de l'interface graphique
+
+Dans l'interface graphique un certain nombre de touches permettent d'accéder aux
+fonctionnalités du logiciel :
+
+### Déplacement
+
+Les touches h, j, k, l servent à se déplacer respectivement à gauche, en bas, en
+haut et à droite.
+
+Les touches i, o servent à zoomer et dézoomer.
+
+### Définition du problème
+
+Les touches s, e permettent de définir les positions de départ (start) et
+d'arrivée (end) du robot. Lors de la sélection, cliquer une fois pour
+positionner le robot, une fois pour l'orienter, puis une fois pour orienter la
+remorque. À tout moment un clic droit annule la sélection.
+
+La touche a permet d'ajouter un obstacle, et la touche d permet de supprimer
+l'obstacle sous la souris.
+
+### Résolution du problème
+
+La touche g permet de lancer le solveur. Les données intermédiaires (positions
+aléatoires et graphe de connection) sont affichées en gris claire, et lorsqu'une
+solution est trouvée, celle-ci s'affiche en vert.
+
+La touche f permet de faire se déplacer le robot le long de la courbe solution,
+lorsque celle-ci est définie.
+
+
+## Bugs connus
+
+- Ne pas redimentionner la fenêtre d'affichage
+- La position de la souris est parfois mal interprétée (résolu ?)
+- Pas de commande pour arêter l'algorithme de recherche de chemin (on peut
+ néanmoins le relancer, ce qui a pour effet d'interrompre l'exécution
+ précédente)
+
+
+
diff --git a/problem.cpp b/problem.cpp
index c919710..bcae056 100644
--- a/problem.cpp
+++ b/problem.cpp
@@ -110,7 +110,7 @@ vector<solution> solution::direct_sol(const hilare_a &pos_a, const hilare_a &pos
int eps[4][2] = { { 1, 1 }, { 1, -1 }, { -1, 1 }, { -1, -1 } };
double delta = cca.x * ccb.y - cca.y * ccb.x;
- assert(delta != 0);
+ if (delta == 0) return ret; // no solution in this case, we count on direct_sol_r
for (int i_eps = 0; i_eps < 4; i_eps++) {
int ea = eps[i_eps][0];
diff --git a/ui.cpp b/ui.cpp
index 7e6dfdc..52070c1 100644
--- a/ui.cpp
+++ b/ui.cpp
@@ -199,7 +199,7 @@ void UI::handle_sel_pos(const sf::Event &ev) {
void UI::render_circle(const circle &c, sf::Color border, sf::Color inside, int w) {
double r = c.r * _view.zoom;
- sf::CircleShape a(r);
+ sf::CircleShape a(r, 50);
a.setPosition(to_view(c.c));
a.move(-r, -r);
a.setFillColor(inside);
@@ -375,7 +375,7 @@ vec UI::from_view(const sf::Vector2i &p) {
}
vec UI::mouse_coord() {
- return from_view(sf::Mouse::getPosition() - _win.getPosition());
+ return from_view(sf::Mouse::getPosition(_win));
}
/* vim: set ts=4 sw=4 tw=0 noet :*/