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

Algorithmes et structures de données Discussion :

Physique d'une voiture à partir de zéro (sans collisions)


Sujet :

Algorithmes et structures de données

  1. #1
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut Physique d'une voiture à partir de zéro (sans collisions)
    Bonjour à tous,

    Comment développer la physique d'une voiture à partir de zéro (sans collisions) sachant que c'est pour un city builder sur Unreal Engine 5, donc je suis censé pouvoir générer quelque chose comme 1000 véhicules.
    Ainsi la voiture devra adopter un comportement réaliste (coûteux) lorsque la caméra est proche et un comportement très simplifié mais pas trop irréaliste lorsque la caméra est éloignée.

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut
    "Physique sans collision", c'est pas un oxymore ? (Physique => lois de Newton => interactions ~= collisions)

    Effectivement, pour un city builder, il n'y a logiquement pas besoin que des voitures "interagissent" avec l'environnement. Elles seraient juste là pour l'animation.
    Donc que veux-tu dire par "physique". Tu penses juste aux animations ou tu penses aussi à autre chose ?

  3. #3
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut
    Citation Envoyé par AbsoluteLogic Voir le message
    "Physique sans collision", c'est pas un oxymore ? (Physique => lois de Newton => interactions ~= collisions)

    Effectivement, pour un city builder, il n'y a logiquement pas besoin que des voitures "interagissent" avec l'environnement. Elles seraient juste là pour l'animation.
    Donc que veux-tu dire par "physique". Tu penses juste aux animations ou tu penses aussi à autre chose ?

    Bonjour AbsoluteLogic,

    Disons que par "sans collision" j'entendais pas de collision avec d'autre véhicules ni avec l'environnement physique. Les voitures suivent une série de points et de tangentes le long le long de splines. Pas non plus de collision avec le sol car c'est un static mesh plat.

    Simplifions la voiture à 2 éléments : le corps (C) et les 2 roues motrices (R).

    Par physique j'entends, un mouvement réaliste de C par rapport à R par contrainte physique (quand je tourne le volant j'aimerais que ça ressemble visuellement à une voiture) . Mais aussi C n'aura pas le même comportement suivant la force centrifuge, la force de freinage, la hauteur du centre de gravité, le réglage des suspensions etc...
    L'idée c'est de désactiver le comportement autonome de C lorsque la caméra est suffisamment éloignée, par soucis de performance car dans un city builder énormément de véhicules son visibles en même temps.

    Je n'utilise pas l'Objet Vehicule dans Unreal Engine 5 car je sais que c'est une usine à gaz et que si je spawn 1000 véhicules mon FPS va chuter à 1 (même en désactivant un max de paramètres quand la caméra est éloignée (sorte de "LOD algorithmique").
    J'ai opté pour la flexibilité et la performance "idéale" en essayant de développer from scratch.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut
    D'accord, il s'agit de la physique entre les éléments de la voiture. Et ces éléments ne seraient donc que les 4 roues reliées par les suspensions au corps de la voiture (avec un effet ressort vertical).

    Mais tu veux représenter une physique "vraiment" réaliste, ou cariturée (exagérée) ? Parce que dans la vraie vie, j'aurais tendance à dire qu'on ne remarque pas l'effet des amortisseurs. D'ailleurs, si je ne dis pas de bêtises, c'était les vieux amortisseurs qui avaient tendance à osciller. Les nouveaux amortisseurs sont "actifs", et se contentent de réduire l'impact des fluctuation de la route sur le corps de la voiture. Mais bon, ça c'est pas mon domaine, donc je me trompe peut-être , et je suis peut-être hors-sujet par rapport à ton besoin.

    Bon, en tout cas, le problème de simulation de la voiture se sépare en deux parties :
    * son déplacement sur le plan horizontal (suivi de trajectoire). Cela est directement lié à l'orientation des roues avant selon l'axe vertical (tourner gauche/droite). Pour ça, il n'y a vraiment pas de physique, c'est juste de la géométrie (à moins que tu veuilles considérer les dérapages ). Mais tu peux nous dire si c'est inclus dans ta question, ou si t'es déjà au point sur ça.
    * 2ème point plus facultatif, les mouvements du corps de la voiture par rapport aux roues à cause des suspensions. Il s'agit donc de calculer les forces exercées sur les suspensions en fonction des vecteurs accélérations de la voiture, calculer la réaction des suspensions, et ce qui en résulte sur la position du corps de la voiture.

    Tu confirmes être intéressé par cette vision des choses ? Sinon tu peux préciser ?

  5. #5
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut
    Tu as tout bon sauf que je ne souhaite pas intégrer les dérapages.

    J'ai trouvé cet article de thèse qui est très complet mais ça va me prendre beaucoup de temps de l'implémenter en c++

    https://nccastaff.bournemouth.ac.uk/...hat/Thesis.pdf

    J'ai cherché sur Github un tru prémaché mais en vain.

    Tu me conseilles d'orienter où mes recherches ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut
    Citation Envoyé par guitz Voir le message
    J'ai trouvé cet article de thèse qui est très complet mais ça va me prendre beaucoup de temps de l'implémenter en c++
    https://nccastaff.bournemouth.ac.uk/...hat/Thesis.pdf
    Euuuh, tu développes un jeu de course ou un city builder ?!!!
    Au passage, je peux poser la question, c'est pour un projet perso, ou pour un "produit" ?

    Citation Envoyé par guitz Voir le message
    Tu me conseilles d'orienter où mes recherches ?
    Personnellement, je suis là pour appliquer mes connaissances et mon savoir faire, pas faire des recherches pour lesquelles tu serais surement au moins aussi bon que moi.
    Donc j'ai synthétisé les 2 points dans mon message précédent. Pour chacun d'eux, soit tu peux établir les formules toi-même, soit je peux t'aider à les faire, soit tu peux chercher sur internet. Mais si tu veux que je t'aide :
    * Pour le 1er point, en supposant que tu ne l'a pas déjà fait (parce que je considère que ce n'est pas de la "physique"), j'aurais besoin que tu me précises ce que t'as fait jusque là, notamment tes structures de données pour les trajectoires.
    * Pour le 2nd point, j'aimerais t'entendre dire "Je suis convaincu que voir les suspensions bouger améliorera l'expérience de jeu des joueurs" avant d'aller plus loin
    Mais je précise, ça ne me dérange pas d'aider si je peux me sentir utile, mais passer par moi sera sûrement moins efficace que trouver ce qu'il faut sur internet si la solution s'y trouve directement. Mais comme je l'ai dit, je te laisse faire les recherches selon comme tu le sens.

  7. #7
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut
    Citation Envoyé par AbsoluteLogic Voir le message
    Euuuh, tu développes un jeu de course ou un city builder ?!!!
    Au passage, je peux poser la question, c'est pour un projet perso, ou pour un "produit" ?
    C'est un city builder. La voiture de course a la même physique que la Fiat Punto de mamie Yvonne qui va faire ses courses à Carrefour un samedi matin ile me semble
    C'est juste qu'elles ont un paramétrage différent.

    Pour le reste je t'ai répondu "tu as tout bon sauf la gestion des dérapages", ça veut dire que je souhaite tout implémenter sauf les dérapage.

    Le seul truc que j'ai développé ce sont 2 tableaux de vecteurs par Segment du graphe (route) : Points[] et Tangents[].
    MySegment->Tangents[0] est la tangente du point MySegment->Points[0], MySegment->Tangents[1] est la tangente du point MySegment->Points[1] etc..

    je te remercie de ton aide, je vais commencer à approfondir cet article. D'ailleurs après relecture, c'est faisable de l'implémenter dans un délai raisonnable.
    Si j'ai une question je n'hésiterai pas à te la poser

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 754
    Par défaut


    Vu le niveau de détail souhaité, ne pourrais-tu pas juste modéliser la voiture comme un point (qui avance sur une courbe 1D, sa trajectoire — centrée sur sa bande, selon le chemin dans le graphe des routes —, pour sortir le joli mot, avec des coordonnées curvilignes), avec une accélération max et une décélération max, puis un contrôleur basique (P, PI ?) en fonction de la distance au véhicule de devant ? Si tu dois simuler beaucoup de véhicules, vu qu'il y aura plein d'autres calculs en même temps (je pense au comportement sur autoroute : s'insérer, dépasser), tu ne peux pas aller très loin dans le détail .

    Il existe déjà pas mal de solutions pour ce genre de problèmes, mais surtout du code de recherche. Un peu en vrac : https://github.com/movsim/traffic-simulation-de, https://github.com/movsim, extensions pour améliorer la simulation de trafic de SimCity 4 (la communauté est toujours super active !). Côté industriel : https://www.myptv.com/en/mobility-software/ptv-vissim, https://www.aimsun.com/.

    (Sinon, à peine 1000 véhicules ? Cities Skylines en gère 16 384 en mouvement, apparemment, mais en visant du matériel de 2015.)
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  9. #9
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut
    Merci pour ces pistes dourouc05, je vais étudier ça

  10. #10
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut
    Bonjour ,

    Ca a bien avancé et j'ai réussi à simplifier la physique de ma voiture avec uniquement les forces centrifuge et de traction. Si je suis aux commandes de celle-ci, le réalisme est acceptable pour un un city builder. En revanche je rencontre un problème quand la voiture suit un tableau de points.

    Nom : 2.jpg
Affichages : 349
Taille : 155,7 Ko

    Le chemin de la voiture sur mon graphe est constitué d'un tableau de vecteurs positions A[],
    J'aimerais que le volant tourne de façon réaliste en fonction de la position et la rotation de la voiture par rapport à chaque A[i] .
    Le vecteur unitaire u est toujours dans la même direction que l'avant de la voiture, P est situé entre les 2 roues avant.

    Le problème avec mon algo c'est que sur certaines portions , la voiture a tendance à Zigzaguer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    A chaque frame si VoitureEnDeplacement = true : 
     
    Si AngleDegrees(A[i] – P, u) >= 90 
    	On passe au point A[i] suivant, donc 
    	i = i+1
    Sinon,
     
            DeltaAngleVolant = AngleDegrees(RotateVectorAroundZAxis(u, AngleVolant), A[i] – P)/15
            AngleVolant =  AngleVolant + DeltaAngleVolant
    Une idée svp pour supprimer cet effet de zigzag ?

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut Anticiper une trajectoire circulaire
    Salut,

    Pour répondre au problème de savoir quel angle doit avoir le "volant" (donc les roues directrices par rapport à la voiture) pour suivre une trajectoire, on peut passer par le problème contraire : trouver la trajectoire que suivrait la voiture si ces roues directrices ont un certain angle.

    Trouver la trajectoire à partir de l'angle des roues :

    Pour simplifier le problème, on considère une roue directrice à l'avant et une roue droite à l'arrière (ie une moto).
    A angle fixé, il est naturel de dire qu'une voiture "tourne en rond". La question est de savoir quel est le rayon du cercle formé. Et d'ailleurs ce rayon n'est pas le même pour la roue avant (R) et la roue arrière (r), d'après le schéma ci-dessous.
    Nom : trajectoire voiture.png
Affichages : 533
Taille : 36,3 Ko
    Notations : longueurs en noir; points en violet; vecteurs (unitaires) en rouge.

    Pour déterminer le cercle de trajectoire, je me base sur le fait que les roues avant et arrières sont toujours tangentes aux cercles. Ça me permet de tracer deux droites qui se croisent au centre du cercle O.
    Les segments forment donc un triangle OPQ :
    • rectangle en Q
    • dont l'angle en O est alpha, qui correspond à l'angle des roues directrices
    • dont la longueur de PQ est L, la longueur entre les roues
    C'est bon ! On a tout ce qu'il faut pour déterminer R et r par trigonométrie :
    • R = L / sin(alpha)
    • r = L / tan(alpha)
    Voilà, donc tu as ce qu'il faut pour déterminer la trajectoire exacte de ta voiture selon sa longueur et l'orientation des roues directrices.

    Trouver l'angle des roues à partir de la trajectoire :

    Maintenant, on veut suivre une trajectoire donnée. Donc pour éviter les mouvement inutiles, on considère que les roues seront inclinées de la même manière jusqu'au prochain point. Donc alpha est fixé à une valeur inconnue, et le schéma est valide.
    Comme je l'ai indiqué sur le schéma, orienter les roues vers le prochain point n'est pas bon puisque ce point n'est pas sur la trajectoire naturelle.
    En revanche, on peut considérer que le point sera sur notre cercle mystère, donc à une distance R du point O.

    Mais où ce trouve ce point O ?
    • On sait qu'il est à la distance R à la fois de A[i] et de P. Donc il est sur la médiatrice du segment [A[i],P] d'après un théorème appris au collège
    • On sait également qu'il est sur la droite passant par Q et perpendiculaire à (PQ)
    Voilà ! O se trouve à l'intersection de ces deux droites (je te laisse faire les recherches si tu as besoin de voir comment calculer ça).
    Et revenons à ce qu'on veut : alpha. Et bien il s'agit simplement de l'angle POQ, sachant que tu connais ces trois points.

    Voilà, c'est un peu moins direct que ce que tu faisais, mais j'espère que ça vaut le coup

    PS : Ces calculs sont valides seulement si la trajectoire est circulaire, donc si les roues ne sont pas droites (sinon, tu risques d'avoir des divisions par zéro). Donc si ta voiture est presque alignée avec ton point cible, alors tu peux éviter ces calculs et juste faire alpha=0.

  12. #12
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 204
    Par défaut
    Je n'ai pas du tout réfléchi au truc, et ce n'est pas du tout mon domaine de prédilection, donc peut-être que je suis totalement hors-sujet.
    Je pense que les explications de AbsoluteLogic sont valables dans le cas d'une voiture à propulsion (les roues motrices sont à l'arrière), mais j'ai des doutes dans le cas de traction (roues motrices à l'avant).
    Et du coup, j'ai cherché un peu, et je suis tombé sur des pages perso impressionnantes.

    Le parallèle avec les 2 roues me gêne aussi un peu, parce que dans le cas des 2 roues, c'est l'inclinaison de la moto qui joue, au moins autant que le fait de tourner le guidon.

    Mais je répète, je n'y connais rien.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Je pense que les explications de AbsoluteLogic sont valables dans le cas d'une voiture à propulsion (les roues motrices sont à l'arrière), mais j'ai des doutes dans le cas de traction (roues motrices à l'avant).
    En considérant qu'il n'y a pas de dérapage, et donc que les roues sont toujours tangentes à la trajectoire, alors l'orientation des roues suffit à déterminer cette trajectoire. Si une voiture à propulsion n'avait pas la même trajectoire qu'une voiture à traction, je me demande ce que ça donnerait pour les 4x4 . En l’occurrence, la différence traction/propulsion/4x4 joue sur l'endroit où sont exercées les "forces" entre les roues et le sol, et donc détermine notamment la faculté à "perdre le contrôle" du véhicule. Mais comme je le disais au début, tant qu'on ne considère pas les dérapages, les forces et la trajectoire sont 2 problèmes différents.

    Citation Envoyé par tbc92 Voir le message
    Le parallèle avec les 2 roues me gêne aussi un peu, parce que dans le cas des 2 roues, c'est l'inclinaison de la moto qui joue, au moins autant que le fait de tourner le guidon.
    Pareil, c'est seulement la position des roues par rapport au sol qui détermine la trajectoire. L'inclinaison de la moto se fait seulement pour éviter d'être éjecté par la force centrifuge. Mais effectivement, j'ai oublié de faire la synthèse à la fin pour comparer 2 roues et 4 roues :
    Si on imagine que les roues du schéma sont les roues de droite d'une voiture, on peut essayer d'imaginer les roues de gauche en dessous. Elles suivent une trajectoire circulaire également de centre O. Mais de fait, on peut remarquer que les deux roues directrices ne seraient même pas parallèles ! On le voit d'ailleurs également sur le site perso que tu as donné.
    Donc à partir du moment où on fait déjà l'approximation que les roues directrices sont parallèles (ce qui est j'imagine le cas de Guitz), alors autant simplifier en considérant les points comme les milieux des axes des roues (ie "P est situé entre les 2 roues avant" comme l'a indiqué Guitz).

  14. #14
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut
    Citation Envoyé par AbsoluteLogic Voir le message
    Salut,

    Pour répondre au problème de savoir quel angle doit avoir le "volant" (donc les roues directrices par rapport à la voiture) pour suivre une trajectoire, on peut passer par le problème contraire : trouver la trajectoire que suivrait la voiture si ces roues directrices ont un certain angle.

    Trouver la trajectoire à partir de l'angle des roues :

    Pour simplifier le problème, on considère une roue directrice à l'avant et une roue droite à l'arrière (ie une moto).
    A angle fixé, il est naturel de dire qu'une voiture "tourne en rond". La question est de savoir quel est le rayon du cercle formé. Et d'ailleurs ce rayon n'est pas le même pour la roue avant (R) et la roue arrière (r), d'après le schéma ci-dessous.
    Nom : trajectoire voiture.png
Affichages : 533
Taille : 36,3 Ko
    Notations : longueurs en noir; points en violet; vecteurs (unitaires) en rouge.

    Pour déterminer le cercle de trajectoire, je me base sur le fait que les roues avant et arrières sont toujours tangentes aux cercles. Ça me permet de tracer deux droites qui se croisent au centre du cercle O.
    Les segments forment donc un triangle OPQ :
    • rectangle en Q
    • dont l'angle en O est alpha, qui correspond à l'angle des roues directrices
    • dont la longueur de PQ est L, la longueur entre les roues
    C'est bon ! On a tout ce qu'il faut pour déterminer R et r par trigonométrie :
    • R = L / sin(alpha)
    • r = L / tan(alpha)
    Voilà, donc tu as ce qu'il faut pour déterminer la trajectoire exacte de ta voiture selon sa longueur et l'orientation des roues directrices.

    Trouver l'angle des roues à partir de la trajectoire :

    Maintenant, on veut suivre une trajectoire donnée. Donc pour éviter les mouvement inutiles, on considère que les roues seront inclinées de la même manière jusqu'au prochain point. Donc alpha est fixé à une valeur inconnue, et le schéma est valide.
    Comme je l'ai indiqué sur le schéma, orienter les roues vers le prochain point n'est pas bon puisque ce point n'est pas sur la trajectoire naturelle.
    En revanche, on peut considérer que le point sera sur notre cercle mystère, donc à une distance R du point O.

    Mais où ce trouve ce point O ?
    • On sait qu'il est à la distance R à la fois de A[i] et de P. Donc il est sur la médiatrice du segment [A[i],P] d'après un théorème appris au collège
    • On sait également qu'il est sur la droite passant par Q et perpendiculaire à (PQ)
    Voilà ! O se trouve à l'intersection de ces deux droites (je te laisse faire les recherches si tu as besoin de voir comment calculer ça).
    Et revenons à ce qu'on veut : alpha. Et bien il s'agit simplement de l'angle POQ, sachant que tu connais ces trois points.

    Voilà, c'est un peu moins direct que ce que tu faisais, mais j'espère que ça vaut le coup

    PS : Ces calculs sont valides seulement si la trajectoire est circulaire, donc si les roues ne sont pas droites (sinon, tu risques d'avoir des divisions par zéro). Donc si ta voiture est presque alignée avec ton point cible, alors tu peux éviter ces calculs et juste faire alpha=0.
    Un grand merci AbsoluteLogic, je vais essayer ta solution

  15. #15
    Membre expérimenté Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 325
    Par défaut
    En aparté du sujet très intéressant :
    L'inclinaison de la moto se fait seulement pour éviter d'être éjecté par la force centrifuge.
    Pas tout à fait, tous les motards expliqueront qu'il faut, pour tourner, pousser le guidon du côté du virage, ce qui effectue un genre de contre-braquage à la roue avant et qui, en faisant basculer la moto à l’intérieur du virage, l'inscrit naturellement dans ce virage.

    En l’occurrence, la différence traction/propulsion/4x4 joue sur l'endroit où sont exercées les "forces" entre les roues et le sol, et donc détermine notamment la faculté à "perdre le contrôle" du véhicule
    Pas seulement, en plus des reports de masse qui offrent un effet sur ou sous-vireur, il faut considérer que les roues intérieures et extérieures ne font pas le même trajet dans le même temps, donc différence de vitesse d'où le différentiel.

    Ces 2 points sont effacés par le souhait (sage), de ne pas tenir compte des dérapages.

    Pour être simple, il vaut mieux tenir compte de la trajectoire du point central (entre les roues directrices), son angle pouvant être reporté sur le volant. (Là encore, c'est une approximation puisque presque tous les véhicules modernes ont remplacés la crémaillère de direction par un système 'piloté' qui permet de faire varier le coefficient par rapport à la vitesse et à l'angle).
    Belle journée à tous,

  16. #16
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut
    Bonjour à tous,

    Je vais devoir utiliser des osculating circles :



    Selon vous quel est le meilleur compromis optimisation/réalisme ?

    Dois-mettre à jour le OsculatingCircle de la voiture à chaque frame à partir de sa spline de trajectoire ? Ou est-ce suffisemment réaliste de précalculer 1 OsculatingCircle par checkpoint, et de faire une interpolation des position voiture /rotation des roues avant / rotation de la voiture entre ceux-là ?

  17. #17
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut
    Si je comprends bien, ce besoin vient du fait que tu souhaites indiquer, en plus du point par lequel tu veux que ton véhicule passe, la tangente par laquelle le véhicule arrive. C'est vrai que sans ça, même sur une route droite, rien n'obligerait la voiture à rester aligné avec la route.

    Pour l'interpolation, j'ai envie de dire qu'il faut tester. Mais le comportement des splines n'est pas forcément le plus stable. Les splines "cubiques" (les plus courantes) permettent de fixer les tangentes aux extrémités, mais pas la "courbure" (inverse du rayon de "l'osculating circle"). De fait, concaténer les splines pour relier une série de points amènera des discontinuités de courbure" au niveau des points de raccordement, qui font que je ne suis pas très confiant sur cette histoire d'interpolation.

    Bref, je te laisse tester si tu veux. Mais donc, si tu n'es pas satisfait, j'ai envie de te proposer les deux possibilités ci-dessous. A noter que le 1er point ci-dessous correspond à peu près à ton cas "calculer l'osculating circle chaque frame", mais en évitant de parler de courbure, et en évoquant les problèmes.

    Soit relier les points par des splines, mais dans ce cas, se baser sur les tangentes, pas sur la courbure :

    En effet, puisque justement les roues sont sensées être toujours tangentes à la trajectoire, alors il suffit d'orienter les roues selon la tangente du point auquel le véhicule se trouve. Donc l'orientation des roues n'est pas vraiment un problème. Le problème viendra surtout pour représenter la position du véhicule par rapport à la spline :
    * Soit il faut directement représenter la position de la voiture comme étant un point de la spline. Donc stocker uniquement un scalaire entre 0 et 1 représentant la progression du véhicule sur cette spline. Mais dans ce cas le contrôle de la vitesse du véhicule sera plus compliqué car la variation de ce scalaire n'est pas proportionnelle à la vitesse.
    * Soit on représente la voiture de manière classique (coordonnées (x, y) et rotation), mais dans ce cas, il faut trouver le point correspondant de la spline pour pouvoir calculer la tangente.

    Soit relier les points par segment droit + arc de cercle au lieu d'une spline :

    En effet, pour contrôler par quelle direction on arrive à un point, il faut se donner la flexibilité nécessaire. Pour les cas classiques, on peut décomposer chaque section par un segment (en vert) suivi d'un arc de cercle (en rouge) ou le contraire. On rencontre cependant un problème dans les cas "non intuitifs", direction d'arrivée pas selon la provenance. Cf schéma ci-dessous.
    Nom : trajectoires.png
Affichages : 275
Taille : 22,0 Ko
    * cas de gauche : aller tout droit, puis tourner au bon moment pour s'aligner
    * cas du milieu : tourner avec le bon rayon pour s'aligner, puis aller tout droit
    * cas de droite : cas "non intuitif". Il faut rajouter un point pour décomposer en deux sections.
    Si tu es intéressé par cette solution, tu peux essayer de trouver la formule pour calculer la décomposition segment/cercle. Dis-moi si tu es intéressé, mais que tu as besoin d'aide pour ça.

  18. #18
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut
    Merci encore pour tes réponses très complètes . Le dev continue, je vous montrerai une vidéo

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/05/2021, 17h27
  2. Physique d'une voiture dans les jeux 2d
    Par Djall0n dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 09/07/2018, 14h56
  3. Réponses: 55
    Dernier message: 03/07/2015, 16h47
  4. Réponses: 1
    Dernier message: 09/08/2014, 17h57
  5. Réponses: 12
    Dernier message: 04/12/2013, 21h22

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