|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Futur Membre du Club
![]() Inscription : décembre 2008 Messages : 46 ![]() |
Bonjour,
je développe en C un moteur de jeu entièrement de zéro, je souhaite n'utiliser aucune librairie existante. Du coup j'en arrive à la physique, j'utilise la méthode Runge-Kutta d'ordre 4 (RK4) et elle me donne de très bon résultat pour beaucoup d'utilisations. Mais j'ai bien envie de faire une démo spatiale, et j'aimerai bien pouvoir intégrer la gravitation newtonienne à mon RK4 plutôt que de faire de la simple et fausse rotation car ça me permettrait par exemple de gérer des collisions entre objets en orbite. Le problème : la simulation d'orbite ne fonctionne pas très bien, pour le moment je teste avec un satellite seul, il tourne bien autour de ma planète mais son orbite s'agrandit peu à peu et il fini par partir dans l'espace. Bien entendu j'utilise des types 'double' dans mon code pour éviter des erreurs d'arrondi. Je ne sais pas vraiment si je dois mettre mon code ici puisque c'est tout langages confondus. L'intégrateur RK est tout ce qu'il y a des plus classique, voilà ce qu'il donne en pseudo-code : Code :
Code :
Je suppose être dans le vrai si je dis que c'est un problème d'arrondi au niveau des calculs ? Comme faire pour éviter ça sans perdre en performance, y a-t-il des moyens de simplifier les calculs ? Voilà, si quelqu'un aurait une idée ou un lien magique à propos de ce genre de chose, je n'ai rien trouvé sur google à propos du newtonien avec RK4.. Merci |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mars 2011 Messages : 531 ![]() |
Salut,
Je ne pense pas que ça vienne de la précision des float/double. Pour avoir un ordre de grandeur, un double possède 52 chiffre significatif en base 2, ça fait à peut près 16 chiffres significatifs en base 10. Ca fait que sur un système planétaire de dimension environ 1 000 000km (3 fois distance terre/lune), tu as une précision supérieur au micro mètre .Je pense plus à un problème de formule, de dt trop grand, ou de l'ordre dans lequel tu calcul accélération, vitesse, position. Il y a une ordre à respecter pour que ça marche bien mais je ne me souviens jamais lequel
__________________
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com