CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Simulation de collision [C++ ou autres]

Best_Baguette
Best_Baguette
Niveau 3
09 avril 2016 à 19:20:51

Salut à tous,

Je galère depuis une semaine à essayer de pondre une simulation de collision, ayant pour objets des balles.

J'utilise la librairie SFML pour l'affichage, mais mon souci se porte sur l'algorithmie du problème. En fait, j'essaie de créer quelque chose d'assez réaliste pour pouvoir devenir un jeu de billard (par exemple).

J'ai déjà bien avancé, mais j'ai l'impression de ne plus progresser maintenant; en fait mon souci, c'est que lorsque les balles sont collées (début du billard par exemple, genre plus de 6 collées), je n'arrive pas à obtenir un résultat réaliste. Donc je me suis dit, à la limite je les écarte légèrement :hap:, mais ça fait un peu bricole.

Bon, en gros je viens ici pour des conseils, de personnes qui ont déjà codé ce genre de choses (pas forcément en C++ d'ailleurs). Pour info j'utilise l'intégration d'euler pour le mouvement, et j'ai aussi un programme clone qui utilise verlet (mais est moins avancé, quelques soucis).

Merci d'avoir lu le pavé, et si vous voulez jeter un oeil voici le github : https://github.com/StripedBanana/BouncingBallEuler

Ketchup_returns
Ketchup_returns
Niveau 10
09 avril 2016 à 19:36:26

Il me semblait qu'il y avait des formules mathématiques pour calculer la force transmise d'une sphère à une autre lors d'une collision en fonction de l'angle de la collision. Je saurais pas te les ressortir par contre, ça remonte au lycée, c'est trop loin. :noel:

LGV
LGV
Niveau 28
09 avril 2016 à 19:40:19

Verlet, c'est bon pour les tensions quand t'as un critere de relaxation, e.g. en deux passes integration PUIS relaxation (typiquement, pour simuler des tissus, cordes, systemes connectes point a point, etc.)

Les simus pour du billard sont assez avancees ; quelles forces as-tu pris en compte pour ecrire tes bilans energetiques ? Il y a surement une omission a ce niveau la (spin, amortissement, friction du tapis, tension des bandes, etc.)

Best_Baguette
Best_Baguette
Niveau 3
09 avril 2016 à 19:48:22

Ouais ça je pense l'avoir géré. Pour des collisions de deux, trois boules c'est ok (par exemple deux en contact, une qui vient frapper celle de gauche: celle du milieu et de gauche restent immobiles et celle à l’extrême droite part). C'est quand il y en a plus que c'est cassay... :hap:

Best_Baguette
Best_Baguette
Niveau 3
09 avril 2016 à 19:56:41

LGV: Oui, j'utilise donc euler pour ce programme. Je n'ai pas incorporé la friction, ni de spin. J'ai implémenté un coefficient de restitution, quand les chocs ne sont pas élastiques (avec les bandes par exemple).

Je suppose que tu connais euler; lorsque je détecte une collision entre deux balles, je :

  • remonte d'abord dans le temps de l'intervalle de temps dt, lorsqu'elles ne se touchaient pas
  • calcule l'instant exact de la collision grâce à une fonction dédiée (testée et approuvée)
  • fait avancer le temps de cet instant précédemment calculé: les balles se touchent uniquement et ne se "marchent pas dessus"
  • à ce moment là je gère la collision, je me suis inspiré de la méthode SAT: j'échange les composantes normales (à la droite de collision) des vitesses deux boules.
  • une fois les vitesses actualisées, j'avance le temps de dt - l'instant de collision, pour revenir à l'instant t.

Voilà mon algo en gros, tu peux le retrouver dans le main.

Je pensais d'abord faire fonctionner la simu dans un exemple de billard d'abord en fait, et ensuite ajouter les notions de frictions et de spin, est-ce que ça pose un problème?

Message édité le 09 avril 2016 à 19:57:58 par Best_Baguette
Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware