begin process at 2012 05 27 19:19:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > SIMULATION DE LA GRAVITATION SELON NEWTON (OPENGL / DEVC++)

SIMULATION DE LA GRAVITATION SELON NEWTON (OPENGL / DEVC++)


 Information sur la source

Note :
10 / 10 - par 6 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Niveau :Débutant Date de création :11/12/2003 Vu / téléchargé :18 583 / 1 412

Auteur : Kirua

Ecrire un message privé
Site perso
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Cette simulation utilise la loi de la gravitation universelle de Newton qui permet de connaître l'intensité de la force qu'un corps effectue sur un autre, la formule est:

F = (G * m1 * m2) / d²

(avec F une valeur scalaire, les résultats sont après convertis en valeurs vectorielles pour pouvoir déterminer le mouvement total des corps)

G = 6.67259e-11

m1 = masse du premier corps
m2 = masse du second corps
d    = distance séparant les corps


La force qu'effectue un corps sur un autre est la même que cet autre corps effectue sur le premier. Je m'explique: le Soleil effectue une force gravitationnelle sur la Terre, qui est exactement la même que celle que la Terre effectue sur le Soleil. Cependant, selon la relation fondamentale de la dynamique F = ma (la Force = la masse * l'accélération), l'accélération subie par le Soleil sera rikiki pendant que la Terre se fait balancer au tour du Soleil à une vitesse phénoménale.

La simulation utilise essentiellement des valeurs vectorielles. Càd que je pose les forces que chaque corps subit à tout instant, j'en calcul la résultante (le tout est programmé en Orienté Objet) et puis en fonction de cette force et de la masse du corps je calcul l'accélération de ce corps (un vecteur, donc une accélération orientée) et j'en déduis un vecteur vitesse "ponctuel" (pas instantané par ce que je n'utilise pas les dérivées, mea culpa, pardon aux familles tout ça) selon la relation de la cinétique: v = t.a (la vitesse est égale au temps multiplié par l'accélération).


ce qui "prouve" que la simulation est environ correcte est que la trajectoire des corps est elliptique, comme l'avait prédit Newton.

Ceci dit: les nouvelles découvertes en physique (bon, nouvelles... ça doti avoir un peu plus de 20 ans qd même j'en sais trop rien) indiquent qu'il est impossible de simuler correctement la gravité. La théorie Newtonienne (de la physique classique) est une approche pas trop mauvaise, rien de plus.

Source

  • zip, il y a un exécutable dedans
  • les corps sont référencés dans corps.txt, le format est expliqué dedans.
zip, il y a un exécutable dedans
les corps sont référencés dans corps.txt, le format est expliqué dedans.

 Conclusion

Commentez autant que vous le désirez ;-)

PS à Funto: c'est une version corrigée avec l'utilisation des Display List, c'est pour ça que je me suis décidé à montrer ce code.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture PARTICLE ENGINE 2D OPENGL DEV-C++ - EFFETS DE FEU ETC [ MOTE...
Source avec Zip DÉFI CHIFFRES DES CHIFFRES ET DES LETTRES, IA RECHERCHE EN P...
Source avec Zip Source avec une capture CLASSE DE VECTEURS EN 2D / 3D PORTABLE, UTILISATION POUR SIM...
Source avec Zip Source avec une capture SNAKE 3D OPENGL DEV C++
Source avec Zip Source avec une capture TEMPS DEPUIS LE DÉMARRAGE DE WINDOWS

 Sources de la même categorie

Source avec Zip Source avec une capture AFFICHER DES COURBES DE BEZIER par shorzy
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip Source avec une capture CLASSE AVEC OPENGL - OBJETS 3D ET ANIMATIONS par rasta63
Source avec Zip Source avec une capture LETTRES 3D AVEC OPENGL ET QT par opossum_farceur
Source avec Zip CUBE 3D GLUT32 VC++ ET DEVC++ par bobby03

Commentaires et avis

Commentaire de Quarkvador le 11/12/2003 14:54:03

Salut tes sources sont vraiment excellente. J'avais déja vu ton snake en 3D et la je dis respect. Je suis plutot visual basic et j'ai décidé de passer en C++. Connetrais tu des bons tutorials disponibles sur le net qui prennent comme compilateur Devc++. Parce que les tutorials que je possède utilise d'autres compilateur. Du coup certaine fonction diffèrent.
Merci d'avance ! Respect

Commentaire de Kirua le 11/12/2003 15:17:35

Salut, merci pour ce message.

Pour le C++, un site unique, c'est impossible, je me souviens plus vraiment de où j'ai appris le C++ mais voici déjà une référence:

http://casteyde.christian.free.fr/cpp/cours/online/book1.html

toutefois, je le conseil pas pour commencer, tout le monde en parle comme d'un tuto, je le vois plus comme un rappel théorique pour des gens qui connaissent.
ceci dit, un travail de titan et rigoureux, à mettre en favoris.

ensuite, mais pas pour tout de suite, voici un article sur les Classes en C++, une fonctionnalité que je juge indispensable:
http://glouise.developpez.com/classes.htm
pour quand tu maîtriseras le C++


que tu aies déjà de l'expérience en programmation est une excellente chose, quelque soit le langage, c'est déjà un tas de réflexes acquis. Que tu veuilles passer du VB au C++ est encore mieux :-D sache toutefois que c'est passer de l'aisance de l'interface (boutons, champs de textes etc...) à la laideur de la console dos-like avant de maîtriser les API graphiques (wxWindows, QT...)

voyons, pour des tutos de débutants je vois pas trop... essaye tjs sur google ça devrait pulluler de hello world, normalement tous les hello world sont OK DevC++, puisqu'il n'y a rien de spécial, et à partir de là, brode.

une précision qd même: évite les hello world qui utilisent les fonctions C (printf() etc...) utilise directement les librairies standards du C++:
cout << "Hello World";
qui utilise la librairire:
#include <iostream>

un Hello World c++ devrait ressembler à ça:

#include <iostream>
using namespace std;

int main()
{

//affiche du texte dans la console, avec un retour à la ligne (endl)
cout << "Hello World" << endl;
//demande un caractère (c'est essentiellement pour faire patienter)
//de sorte que la console ne se ferme pas directement
char a;
cin >> a;
//fin du programme
return 0;
}


voilà, essaye de trovuer des tutos qui commencent par ça, et bonne chance !!

Commentaire de djl le 11/12/2003 23:11:54

woaaaa c'est impressionnant! et le code est clair et bien commenté;-)
tes classes sont tres bien faites et le tout est tres propes, ca rend bien a l'execution avec les orbitres et les vecteurs!

Commentaire de Saros le 12/12/2003 19:29:34

Franchement, chapeau... Juste un truc : les traces des objets (en bleu), étant dessinées sur l'écran directement, on obtient des artefacts et des pixels dans tous les sens en redimensionnant...
Et autre chose : j'ai un VSync en 800 par 600 (le fps bloqué à 60) en fenêtre, ce qui ne m'était jamais arrivé... Je ne sais pas si c'est OpenGl, je ne sais d'ailleurs pas non plus comment débloquer le VSync...
Sinon, c'est une source excellente... 10/10
Saros

Commentaire de Kirua le 12/12/2003 21:15:23

Merci Saros pr ce comment.
c'est vrai, mtnt tu m'y fais penser, j'ai oublié de mentionner les touches!!

alors voilà:

A/Q: (dé)zoomer
Flèches: bouger la caméra
P: pause/start l'animation
V: montre/cache les vecteurs
R: montre/cache le parcours (je suis plus trop sur pour R, mais c'est marqué dans le code source, main.cpp ;-))


le fait que les pixels soient dans "tous les sens", c'est normal, puisque je ne dis pas aux objets: déplacez-vous le long d'une élipse, je leur dit: les lois théoriques disent que mtnt, vous devez aller là, et ce aussi souvent que l'ordinateur le permet par seconde, cette méthode permet de "vérifier" une hypothèse ou de "découvrir" la trajectoire justement de ces corps en gravitation.

les orbites ne sont pas les mêmes à chaque révolution à cause de l'erreur commise à chaque frame: je ne calcul par la vitesse instantanée mais ce que j'ai appelé la vitesse ponctuelle, je ne pense pas que le mot soit correct, mais je désigne par là une vitesse moyenne sur un intervalle de temps très court (moi j'obtiens un calcul toutes les 15/16 ms, ce qui me fait environ 62/66 FPS)

Commentaire de Helkanen le 14/12/2003 10:12:58

magnifique...
je débute seulement, alors je sais pas si je pourrai analyser toute la source, mais je vais essaye"r parce que ça me semble parfait...

Commentaire de Kirua le 14/12/2003 12:28:48

j'ai allègrement commenté le code du point de vue des règles mathématiques / physiques, mais pas du tout il me semble le côté plus "grammatical" ou plutôt lexical, càd le programme en tant que tel. Ce code source te donne un exemple d'utilisation de classes, mais ne t'apprendra pas à en écrire toi-même, j'en suis dsl, c t pas le but non plus ;-) ceci dit, y a vrmnt bcp de commentaires! lol

Commentaire de cppdupdup34 le 15/12/2003 17:46:11

10/10 allé ca les vaut
j'avoue que j'ai pas regardé le source  mais pour ce qui est du programme ben c'est parfait
ce qui me parait etonnant c'est que la trajectoire finit par faire une elipsse (j'ai oublié mon cours je crois), je croyais que ca repassait pas au meme endroit mais en fait comme quoi c'est utile les simulations.
pour rendre plus reel ton prog tu pourrais nous rajouter d'autres etoiles
pour faire interagir plus de monde
(il me semble pas que les elements qui tournent autour du soleil agissent entre eux => autre suggestion)

Commentaire de Kirua le 15/12/2003 17:55:05

cppdupdup, je vois pas pq les planètes du sytème solaire n'interagiraient pas. Les 4 forces de l'univers valent pour tous les corps, la gravitation est une de celles-là. Je ne connais rien à la physique cantique, c'est peut-être pas pareil là dedans, j'en sais vrmnt rien, mais en physique classique, je vois pas pq ça n'irait pas. Regarde, la terre attire la lune, et le soleil attire les deux, seulement l'attraction de la terre sur la lune est plus grande que celle du soleil sur la lune, parce que la lune c'est un tout petit caillou.

en fait, tu dois juste rajouter des lignes dans le fichier corps.txt pour rajouter des corps à la simulation sans devoir recompiler. Tu modifies la liste, tu relances la simulation et c'est bon.

L'idéal serait de trouver une bone échelle et une table de valeurs pour simuler le système solaire, ce serait impeccable ^^ je vais qd même essayer de placer un satélite autour d'une planète en orbite autour d'un corps très massif (qu'on appellera le soleil, parce que c pratique ;-))

Commentaire de cppdupdup34 le 15/12/2003 18:41:31

exact ;-)
faudra que je reflechisse  avant d'ecrire la prochaine fois :-/

Commentaire de dominion le 19/12/2003 11:39:43

Et dire que c'était mon idée... Enfin franchement chapeau j'aurais pas pu faire aussi bien ;)
Par contre je viens de voir un bug : quand on déplacee la fenêtre les corps changent d'orbite.

Commentaire de Kirua le 19/12/2003 19:42:17

oui c'est exact, en fait, j'ai pas bloqué le timer lorsque la fenêtre est déplacée, et c'est pour ça que ça débloque totalement. c'est facile à changer, juste 2 lignes à ajouter, mais vous savez comment c'est ;-)

et oui, je dois l'idée à dominion, merci ;-)

Commentaire de Lightness1024! le 29/12/2003 14:53:08

pour les details à propos de la mécanique moderne et de la mecanique classique:

Newton n'avait pas pensé que l'information ne se propagait pas a vitesse infinie d'ou l'approximation qui en decoule.

en mécanique moderne on tient compte de la vitesse de propagation de l'interaction ca complique tout mais on se raproche plus du vrai.
la terre se déplacerait selon une onde (pas une ellipse du tout en réalité)
ce qui ferait qu'elle ne passe jamais par le meme point chanque année.
bien sur reste a voir si c'est important ou pas dans les calculs qu'on souhaite faire et dans un cas utiliser la mecanique classique et l'autre la moderne..

Commentaire de Kirua le 30/12/2003 01:06:20

thx pr les précisions, mais j'ai entendu qu'en mécanique classique, en vertu du principe d'incertitdue, on ne pouvait déterminer la valeur exacte de deux variables en même temps (vitesse et position par exemple). ça complique énormément O_o

Commentaire de Lightness1024! le 30/12/2003 15:56:06

je sais pas, mais je sais que rien n'est exactement continu.
en fait on devrait exprimer toute grandeur comme multiple d'une constante !!!
et oui meme le temps, meme le temps en granulaire !
(voir temps de Planck = 5.4*10^-44 seconde)
meme l'energie !
(voir les quantums)
et il paraitrait que meme la position dans l'espace serait discrete !!

moi ca me retourne l'esprit

Commentaire de Kirua le 31/12/2003 00:47:05

ça ferait cet effet pr moins que ça, mais c rassurant: j'aurai plein de trucs à apprendre une fois à l'unif :-D

Commentaire de Lightness1024! le 31/12/2003 01:04:37

oué c sur ya tjs des trucs a apprendre dans n'importe quel domaine que ce soit.
aujourd'hui les humanistes n'existent plus :)
(ceux qui prechaient le savoir total)

Commentaire de Kirua le 31/12/2003 01:30:34

je sais ce qu'est un humaniste mais je suis pas franchement d'accord avec la qualification que tu leur colle sur le front. ils ont repêché les savoirs de l'antiquité et ont promu l'enseignement, les études, l'humain, sa conscience, sa liberté et sa valeur. je trouve que c'est plutôt une bonne période (en plein dans l'empirisme), ce que tu dis colle plus aux scientistes, qui pensaient tout résoudre par la science.

et si tu regardes, le courant humaniste est encore assez marqué dans notre société, alors que celui des scientistes à disparu (maintenant c'est le principe de l'incertitude, être scientifique c'est "avancer avec une lampe de poche dans la pénombre de l'immensité" (je sais plus qui a dit ça, et en plus la citation n'est pas exacte, mais tu as l'idée :-P)).

enfin voilà, passons ^^ ;-)

Commentaire de Lightness1024! le 31/12/2003 01:38:25

lol, tu t'y connais mieux que moi je peux pas réfuter :))))
toute facon ya rien a réfuter je suis d'accord.

Commentaire de Kirua le 31/12/2003 01:44:28

bah j'ai eu un excellent prof cette année, prof de français qui a rattrapé les énormités du prof d'histoire (au passage s'il me lit: qu'il meurt) voilà c'est la phrase du jour :-D même en vacances je le déteste, quel c**.

dis, je vois que t'as 19 ans, tu fais quoi comme études? paske tu m'as l'air callé en physique, on peut pas vrmnt juger sur 2 interventions, puis comme je sais pas du quoi tu parles je peux pas apprécier l'exactitude. c pas que je doute de la véracité.

Commentaire de Lightness1024! le 31/12/2003 12:03:48

lol :) Descartes: je doute méthodique.

oué g bien 19 ans, je suis actuellement en math spé technologique.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales