IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Déplacer un point sur une sphère


Sujet :

Mathématiques

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Déplacer un point sur une sphère
    Bonjour

    Voilà mon problème est algorithmique je pense, je veux faire un programme en C, et j'ai besoin de résoudre ce truc.

    J'aimerai pouvoir bouger un point sur une sphère (je reprend le titre du topic), je connais les coordonnées sphériques via wikipédia (j'ai réussi à intégrer ça dans un mini programme opengl).

    Mon problème c'est que je n'aime pas le fait de devoir modifier les angles Theta et Phi pour se déplacer autour de la sphère.
    J'aimerai juste pouvoir faire bouger un point avec les contrôles suivant:

    Gauche et Droite: modifier la direction du point
    Haut et Bas: modifier si on va de l'avant ou vers l'arrière par rapport à la direction choisi avec gauche et droite.

    Merci de votre attention, et de votre aide j'espère.

  2. #2
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Bonjour,

    Je ne comprend pas vraiment ton problème. Quel est le soucis avec les coordonnées sphériques?


    Je ne vois pas pourquoi un simple glRotate avec comme origine le centre de la sphère n'irait pas?

    Peut-tu décrire un peu plus les difficultés que tu rencontres?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Gauche et Droite: modifier la direction du point
    Qu'est ce que la "direction d'un point" ???

    De plus, est-ce que la vitesse de déplacement doit être prise en compte ?

  4. #4
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Il te suffit de définir droite, gauche,etc de façon suffisamment précise pour pouvoir être comprise d'un ordinateur

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    En sphérique(er,etheta,ephi les vecteurs de la base), le vecteur vitesse (sur une sphère) s'écrit :

    v=r.dPhi/dt.ephi + r.sin(Phi).dTheta/dt.eTheta

    A mon sens, il suffit donc de :
    1 - se fixer une vitesse de déplacement v0 (ou un pas de déplacement DeltaR si le temps n'a pas d'importance mais de toute façon deltaR=v0.Deltat)
    2 - Initialiser un paramètre angulaire 'a' qui définit (à lui seul) la direction de déplacement (on peut donc écrire le vecteur vitesse v=v0cosa.ephi+v0sina.etheta)
    3 - Par identification : v0.cosa=r.dPhi/dt donc on déduit facilement le "nouveau" Phi (connaissant sa valeur initiale), puisque c'est la seule inconnue.
    4 - Par identification : v0.sina=r.sin(Phi).dTheta/dt, on en déduit donc le "nouveau" Theta

    Les flèches gauche et droite agissent sur la valeur du paramètre a
    Les flèches haut et bas changent v en - v (quand nécessaire) ou augmentent et diminue la valeur de v0 (ce qui me parait plus logique)



    En principe cela devrait marcher ... si j'ai bien compris l'énoncé !

  6. #6
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Un homme marche 5 km vers le sud, puis 5 km vers l'est. A se moment, il voit un ours. Il marche encore 5 km vers le nord et se retrouve au point de départ. Quelle est la couleur de l'ours?
    Jean-Marc Blanc

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    C'est un ours blanc bien sur (car l'homme est forcément au pôle nord) ...
    Cela aide-t-il notre ami ou est-ce une simple digression distractive ? (dans le premier cas je ne vois pas)

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci de vos réponses,

    Je suis loin d'être particulièrement fort en math, ça s'est dit.

    Peut être que ton post, Fredchkek, me sera utile, mais je ne le comprend pas trop.

    En sphérique(er,etheta,ephi les vecteurs de la base)
    ça ok, je gère.

    v=r.dPhi/dt.ephi + r.sin(Phi).dTheta/dt.eTheta
    là, y'a plein de nouvelles variables, je m'y perd.
    qu'est ce que dt ?
    Quand tu mets un point "." c'est pour multiplier, ou c'est des variables situé dans des structures ?

    Merci beaucoup, à tous, de m'aider.

    ps: FR119492, ah oui pas mal l'énigme.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Hello,


    v=r.dPhi/dt.ephi + r.sin(Phi).dTheta/dt.eTheta
    là, y'a plein de nouvelles variables, je m'y perd.
    qu'est ce que dt ?
    Quand tu mets un point "." c'est pour multiplier, ou c'est des variables situé dans des structures ?
    dX/dt = dérivée de la variable X par rapport au temps
    Le "." est une multiplication


    Apparemment, la dimension temporelle ne t'intéresse pas, donc, pour simplifier:

    Je note:
    * r le rayon de ta sphère
    * s le pas de déplacement
    * a le paramètre direction de déplacement (c'est un angle)
    * Dphi : la variation de phi associée au déplacement
    * Dtheta : la variation de theta associée au déplacement

    Tu calcules alors simplement les variations des angles :
    Dphi=s.cosa/r
    Dtheta=s.sina/(r.sin(Phi))

    et les angles deviennent donc :
    Phi=Phi+Dphi
    Theta=Theta+Dtheta

    Au clavier, tu joues sur la valeur de 'a' pour changer de direction de déplacement et sur la valeur de 's' pour changer le pas de déplacement.

    Est-ce clair ?

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    owi, très clair, je vais essayer tout ça.

    (le rayon de ma sphère est de 1, donc c'est encore plus simple)

    Merci beaucoup.

    ps: seeme, dans mon problème je ne veux pas utiliser glRotate.
    j'aurais l'impression de ne plus savoir ou je suis vraiment, dans les matrices toussa.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    bon j'ai testé, et tout fonctionne bien mise à part un (gros) problème.

    Quand j'arrive aux pôles, bah ça ne fonctionne plus correctement, en fait, il m'est carrément impossible de suivre un disque complet hormis le méridiens quand "a" est à zéro.

    puis avec Dtheta=s.sina/(r.sin(Phi)) j'ai une division par zéro.
    en rajoutant Dtheta=s.sina/(r.sin(Phi)+0.001) ça marche.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    puis avec Dtheta=s.sina/(r.sin(Phi)) j'ai une division par zéro.
    en rajoutant Dtheta=s.sina/(r.sin(Phi)+0.001) ça marche.
    Oui, bien sur, il faut ajouter un test sur Phi !
    Si Phi est à zéro, l'angle Theta n'a pas de sens !!! Pour que le problème soit compatible avec tes équations, il suffit, dans ce cas, de prendre Theta=0.

    Quand j'arrive aux pôles, bah ça ne fonctionne plus correctement, en fait, il m'est carrément impossible de suivre un disque complet hormis le méridiens quand "a" est à zéro.
    C'est à cause de la division par 0 ou c'est un autre problème ?

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    ça doit être un autre problème.

    j'ai l'impression que ma demande est plus complexe que ça...
    si j'avance dans la direction a tout va bien si je suis loin des pôles et plus je m'en rapproche plus ça part en spirale. Jusqu'à ce coller au pôle puis repartir en spirale dans le sens inverse.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Question : est ce que tes variations d'angles sont petites par rapport aux angles eux mêmes ?

    Peux-tu nous montrer le code ?

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'ai du mal à comprendre la question

    mon code est assez fouillis pour le moment, car c'est pour un jeu d'avion au final, donc y'a plein de fichiers inutiles pour ce problème en particulier.

    Cependant si tu veux tu peux voir le problème par toi même ici:
    http://thomastortorini.free.fr/bazar...spheriques.zip

    donc tu peux tester avec les flèches directionnelles du clavier (et on peut dézoomer avec la mollette de la souris)

    Merci.

  16. #16
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    OK, je pense que je vois le problème, je n'avais pas assez réfléchi et suis parti inutilement des formules de cinématique.

    On va faire un peu différemment (et en fait plus simplement):

    Reformulons le problème :

    On cherche à déplacer un point sur une sphère de rayon r (=1)
    On travaille dans un repère sphérique er,etheta,ephi
    On a r=er
    Le vecteur direction unitaire de déplacement est d=cos(a).etheta+sin(a).ephi

    Les vecteurs er et d forment donc un plan dans lequel notre point se déplace. Le point après déplacement est donc représenté par le vecteur :

    rf=r(cos(b).er + sin(b).d)

    Donc si on se fixe un pas de déplacement "s" (s=r.sin(b)), on peut écrire simplement:

    rf=sqrt(r*r-s*s).er + s.d

    Finalement, la seule formule que tu dois utiliser se résume à :

    rf=sqrt(r*r-s*s).er + s.cos(a).etheta + s.sin(a).ephi

    'a' permet de régler la direction
    's' le pas de déplacement

    J'espère que ça va marcher ...

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'ai peur de paraître infiniment débile à poser mes questions mais je comprend pas ce que je dois faire avec ma variable "rf".

    Comment modifier l'emplacement de mon point avec seulement une variable ?

    rf=sqrt(r*r-s*s).er + s.cos(a).etheta + s.sin(a).ephi
    Et pourquoi utiliser "r" alors que "er" vaut la même chose ?

    Merci et désolé.

    Faut savoir que je me suis longtemps pencher sur ce problème, j'ai cherché avant pourtant...

  18. #18
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    rf, c'est simplement r après déplacement (=le nouveau r)

    Donc, tu te fixes une valeur de s (assez petite devant le rayon de la sphère)
    Tu joues sur a pour changer la direction.

    Tu mets à jour ton vecteur r en faisant :

    r <- sqrt(r*r-s*s).er + s.cos(a).etheta + s.sin(a).ephi

    Puisqu'avec les flèches tu peux faire varier 2 paramètres tu fais varier a et s.

    C'est clair ?

  19. #19
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Est-ce que le problème est de déplacer un mobile sur une surface sphérique, c'est à dire comme un bateau sur l'océan, en règlant son cap et sa vitesse ?


    Si c'est le cas, on utilisera les fonctions suivantes :
    • détermination d'un azimuth (cap) d'un point B par rapport à A,
    • détermination de la position de B situé à une distance d de A et dans l'azimuth Alpha (distance = longueur d'un arc sur le grand cercle et non distance 3D).
    Les formules se basent sur le principe de trigonométrie sphérique, qui indique que si on prend un triangle quelconque, 3 points sur la surface de la sphére définissant 6 propriétés (3 angles et 3 cotés), la connaissance de 3 des 6 propriétés permet de déduire les 6 autres.

    Pour les formules, voir par exemple :
    http://pages.intnet.mu/ingepru/f-world.htm
    http://williams.best.vwh.net/avform.htm

  20. #20
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 957
    Points : 4 386
    Points
    4 386
    Par défaut
    Citation Envoyé par Mr21_ Voir le message
    Bonjour

    Voilà mon problème est algorithmique je pense, je veux faire un programme en C, et j'ai besoin de résoudre ce truc.

    J'aimerai pouvoir bouger un point sur une sphère (je reprend le titre du topic), je connais les coordonnées sphériques via wikipédia (j'ai réussi à intégrer ça dans un mini programme opengl).

    Mon problème c'est que je n'aime pas le fait de devoir modifier les angles Theta et Phi pour se déplacer autour de la sphère.
    J'aimerai juste pouvoir faire bouger un point avec les contrôles suivant:

    Gauche et Droite: modifier la direction du point
    Haut et Bas: modifier si on va de l'avant ou vers l'arrière par rapport à la direction choisi avec gauche et droite.

    Merci de votre attention, et de votre aide j'espère.
    Dans les UI, ce qu'on l'utilise souvent pour lier des déplacements H/V à une rotation de sphère, ce sont les quaternions… cela donne un mouvement assez naturel, par exemple si vous dessinez une sphère sur laquelle l'utilisateur peut cliquer pour la faire tourner, le "feeling" qui en résultera entre le mouvement de la souris et le mouvement de rotation de l'objet ou de la scène permettra un bon contrôle par l'utilisateur : il n'aura pas la désagréable sensation de sauts inopinés que donnent les techniques basées sur les coordonnées sphériques.

    http://fr.wikipedia.org/wiki/Quatern...s_l&#39;espace

Discussions similaires

  1. Déplacer un point sur une courbe
    Par Xen956 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 09/06/2012, 11h15
  2. [TChart] Déplacer un point sur une courbe
    Par paradise dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/11/2011, 12h12
  3. Perspective régulière et coordonnée d'un point sur une sphère
    Par 66-Machin-99 dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 21/05/2010, 16h50
  4. [TPW] Déplacer un point sur une trajectoire
    Par dmimnet dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 13/04/2008, 18h58
  5. Déplacer un point sur une courbe
    Par Wassim123 dans le forum MATLAB
    Réponses: 3
    Dernier message: 19/09/2007, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo