Résolu Boussole (direction) en C#/VB.net/C/C++

Solutions (9)
Tags :
  • Windows Mobile
  • Iris
  • Réseau
  • Programmation
|
Bonjour. :bounce: 

Je suis actuellement en 2ème année de BTS IRIS (Informatique et Réseau pour l'Industrie et les Services techniques). J'ai un projet de fin d'année à réaliser.
Je développe une application pour Windows Mobile 6.1-6.5 en C#.

L'application comporte un indicateur de direction. Une sorte de boussole qui indique par une flèche ou se trouve un endroit.
La réception et le décryptage des trames émises par le GPS n'est pas un problème, cependant, je ne sais pas comment m'en servir pour créer cette fameuse boussole. J'ai chercher des exemple sur internet, et je n'ai trouvé que des codes sources pour une boussole indiquant le Nord.

Auriez vous une idée de l'algorithme à utiliser pour ce type de boussole?
Je ne demande pas un code source complet, mais juste la façon d'obtenir le sens de la flèche (son angle) en fonction des coordonnée du GPS de l'appareil où se trouve l'application, des coordonnées GPS du lieu à trouvé et de l'orientation de l'appareil.

Merci !
Contenus similaires
Meilleure solution
partage
|
Ce n'est pas très compliqué en fait.

[X Y] c'est le vecteur entre les 2 points: X = X2 - X1 et Y = Y2 - Y1, où [X2 Y2] est la position de l'endroit et [X1 Y1] celle du smartphone.

[X Y] est mis dans le repère ou [0 1] pointe vers le nord de la planète. Ton smartphone pointe vers une autre direction. Il faut donc faire le changement de repère du nord de la planète sur la direction du smartphone. En gros T est l'angle (probablement inverse) de la boussole.
Si pour la boussole, tu n'as pas un angle mais un vecteur directionnel, c'est encore mieux, car tu calcules directement cosT en calculant le produit scalaire et déduit sinT sans faire aucun calcul de cosinus ni sinus.
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par Momo5775.
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui, j'utilise la boussole du Smartphone. C'est justement ce que j'essaye de faire, la flèche qui bouge en fonction de notre "angle" à nous.

J'ai réussi à bricolé une petite méthode pour ça.
Quand je dis bricolé, le mot est faible, c'est une vrai usine à gaz.

  1. /* AngleS : angle du smartphone,
  2. * X1 Y1 : position du smartphone
  3. * X2 Y2 : position de l'endroit
  4. * Renvoi l'angle de la flèche en degrés*/
  5. private double CalculerAngleFleche(double AngleS,
  6. double X1, double Y1, double X2, double Y2)
  7. {
  8. double X = X2 - X1; //Calcul du vecteur entre P1 et P2
  9. double Y = Y2 - Y1;
  10.  
  11. double Distance_P1P2 = Math.Sqrt(Math.Pow(X, 2) + Math.Pow(Y, 2));
  12. //Calcul de la longueur du vecteur
  13.  
  14. double Distance_Abs = X;
  15. //Calcul de la longueur du coté adjacent au triangle
  16.  
  17. //SOHCAHTOA ^^
  18. double AngleT = Math.Acos(Distance_Abs / Distance_P1P2) * 180 / Math.PI;
  19. //Conversion de radians à degrés
  20.  
  21. if (Y1 > Y2)
  22. {
  23. if (X1 == X2)
  24. AngleT = 270;
  25. else if (X1 < X2)
  26. AngleT += 270;
  27. else
  28. AngleT += 90;
  29. }
  30. //Bricolage pur et dur. Transforme un angle compris en 0 et 180
  31. //en un angle compris entre 0 et 360
  32.  
  33. double AngleFin = AngleT - AngleS;
  34. //Calcul de l'angle en fonction de l'angle du smartphone
  35.  
  36. if (AngleFin < 0) //Afin de ne pas avoir un angle négatif
  37. return (360 - AngleFin);
  38. return AngleFin;
  39. }


J'ai fait pas mal de tests, elle tient la route, j'essayerai de l'arranger un peu.
  • Commenter cette réponse |
Score
0
òh
òi
|
Est-ce que tu utilises la boussole (du nord magnétique) du smartphone ?

Parce que le problème est aussi de savoir comment est orienté le smartphone: si tu le bouge, la direction doit bouger aussi.
  • Commenter cette réponse |
Score
0
òh
òi
|
Je suis désolé, mais je ne comprend pas :(  .

Le vecteur entre les deux points, ça je comprend, mais je ne comprend pas comment obtenir l'angle entr ela position du smartphone et l'endroit par rapport au Nord.
Je ne comprend pas comment ça ce traduit mathématiquement.

Je doit juste faire une flèche qui pointe vers l'endroit voulu.
  • Commenter cette réponse |
Score
0
òh
òi
|
Ah ok merci :)  !

Par contre, ce n'est pas exactement le même problème. J'ai deux jeux de coordonnées. L'un est celui du smartphone, l'autre celui d'un endroit.

Il faut que je détermine l'angle entre les deux, par rapport eu méridien de greenwich.
En gros, j'ai X, Y, X', Y', mais il me manque T.
  • Commenter cette réponse |
Score
0
òh
òi
|

[X'] = [ cosT -sinT] [ X ]
[Y'] = [ sinT cosT ] [ Y ]

donc:
X' = cosT * X - sinT * Y
Y' = sinT * X + cosT * Y

C'est un changement de repère de même centre et de rotation d'angle T.

Exemple:
pour une rotation de 90° sur la gauche, T = Pi/4 et cos(Pi/4) = 0 et sin(Pi/4) = 1
d'ou X' = -Y et Y' = X
  • Commenter cette réponse |
Score
0
òh
òi
|
Ouch .....

Il n'y aurait pas quelque chose de moins violent? :sweat: 
Parce-que j'avoue que là, même en lisant et en essayant de comprendre tous ça, je ne suis pas vraiment avancé.

Nous n'avons pas encore attaqué les Matrices en mathématiques.

Edit : Comment ce traduit un changement de repère en programmation ??
Edit 2 : Après des recherches plus poussées, j'ai trouvé un outils pour les Matrices en C#/VB : System.Drawing.Drawing2D.Matrix.
Malheureusement, je programme pour Windows Mobile, et donc avec le compact Framework 3.5, où les matrices n'existent pas.

Help.
  • Commenter cette réponse |
Score
0
òh
òi
|
C'est un simple changement de repère en 2 dimensions.
http://fr.wikipedia.org/wiki/Matrice_de_rotation
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS