Il reste encore quelques petits calculs a faire:
Si notre mobile suit un capGPS à 30° et qu'il doit suivre un capDir à 230°, doit t'il tourner a droite ou a gauche pour se retrouver le plus rapidement possible dans l'axe de son nouveau cap?
C'est bien l'un des simple problème qui m'a pourtant donné le plus de fil a retordre!
J'ai fini par le résoudre en décidant de prendre CapDir comme référence et de calculer CapDir + 180 comme opposé + la correction nécessaire si CapDir + 180 dépasse les 360°... et en conditionnant que si "capGPS" empiète sur le secteur de 180° a droite de CapDir, le mobile doit virer a gauche...Et vice-versa...
int capGPS = 81; int capDir = 80; int OpposeCapDir =0; // la valeur en degré de l'opposé de la diagonale de CapDir int ComplementOpposeCapDir = 0; // si le calcul de la diagonale dépasse 360° void setup() { size(200, 200); noLoop(); println ( "capGPS = " +capGPS); println ("capDir ="+capDir); } void draw (){ CarteDir(); } void CarteDir(){ if ( capGPS != capDir ){ // si égal, ne fait rien OpposeCapDir = capDir +180; //------------------------------------------------------ if (OpposeCapDir <= 360){ if ((capGPS > capDir) && (capGPS < OpposeCapDir)){ println ("virage a gauche"); } else { println ("virage a droite"); } } if (OpposeCapDir > 360) {// débordement des 360° ComplementOpposeCapDir = OpposeCapDir - 360; if ((capGPS > capDir) || (capGPS < ComplementOpposeCapDir)){ println ("virage a gauche"); } else { println ("virage a droite"); } } } }
Note: Virage à droite = Allumage moteur gauche.
Virage à gauche = Allumage moteur droit.
Dans l'exemple ci-dessus, si "CapGPS" se trouve dans la partie en jaune, le mobile doit tourner sur la gauche pour se caler sur "CapDir". En effet, "CapGPS" est plus grand que "CapDir", mais plus petit que"OpposeCapDir" .
(Le mobile devrait tourner sur la droite si "CapGPS"était plus grand que "OpposeCapDir", mais plus petit que "CapDir").
Le calcul n'est pas compliqué...
Dans l'exemple ci-dessus, les choses se compliquent, car CapDir + 180 donne 430°, ce qui n'existe pas:
"ComplementOpposeCapDir" représente donc la partie qui "repart de zéro" et vient finaliser le demi-cercle quand "CapDir + 180°" dépasse les 360°...
Il faut finalement comparer si "CapGPS"est dans le secteur de "CapDir" à 360 ou de 0 à "ComplementOpposeCapDir"...
Si "CapGPS" se trouve dans ces secteurs, notre mobile doit virer a gauche pour se rapprocher de la direction "CapDir".
C'est assez difficile a interpréter, mais facile a comprendre si l'on se fait (comme moi) une maquette de compas en papier et carton...
Ouf!
Aucun commentaire:
Enregistrer un commentaire