JeuWeb - Crée ton jeu par navigateur
Modélisation du système solaire - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Modélisation du système solaire (/showthread.php?tid=5936)

Pages : 1 2 3 4


Modélisation du système solaire - qwarnant - 24-01-2012

Bonjour à tous,

Il y a quelques jours, j'ai reçu un livre de mon père (astrophysicien) qui s'intitule "Ordinateur et astronomie". Ce livre reprend les concepts d'astronomie et de physique, les ré-explique et conduit à réaliser les algorithmes informatiques pour modéliser toute une série de choses en astronomie.

J'ai donc commencé par la première partie du livre qui traite de la modélisation du système solaire. Après l'étude de toute la partie "physique", la programmation informatique en PHP/HTML/CSS n'était pas très compliquée.
Voici le résultat que j'ai obtenu, la position en temps réel des planètes sur leur orbite autour du soleil. Les images des planètes tournent également sur elles-mêmes, avec Vénus tournant dans le sens opposé des autres pour respecter la réalité. Mercure fait le tour du soleil en 88 jours, j'ai donc bien observé une différence de 3. ... ° entre sa position d'hier et aujourd'hui.
Je n'ai pas pu conserver la proportionnalité des distances soleil - planète, j'aurais dû positionner pluton (même si je sais que Pluton n'est plus répertoriée dans les planètes du système, mais comme planète naine) à plusieurs mètres de distance sur la page web ... J'ai donc opté pour une valeur du rayon fixe, que je multiplie par la position de la planète.

[Image: Sanstitre3yfb7.png]

L'image est dézoomée à 50%.

J'en viens à mon problème : je suis amené à traiter parfois des nombres très petits dans les calculs de positionnement, et environ un rafraîchissement sur 10, j'ai un maximum execution time qui intervient. J'ai déjà identifié la source du problème en consultant le stack, c'est mes méthodes d'arrondis et de processus itératifs qui plantent. Le processus itératif continue jusqu'au moment où la valeur approchée est égale à 7 décimales près.

Code PHP :
<?php 
public function calculateEccentricAnomaly($averageAnomaly, $eccentricity, $decimale = 7) {
$previous = 0;
$ea = $averageAnomaly;
while (
$ea != $previous) {
$previous = $ea;
$ea = self::roundness($averageAnomaly + $eccentricity * sin($ea), $decimale);
}
return
$ea;
}

public function
roundness($x, $n) {
$mult = pow(10, $n);
$x = round($x * $mult) / $mult;
return
$x;
}

Ma question est-donc la suivante : si vous auriez du faire de telles méthodes, les auriez vous faites avec un while, ou pensez-vous à un autre moyen ?

Merci d'avance


RE: Modélisation du système solaire - Ter Rowan - 24-01-2012

déjà tu peux calculer ton mult en dehors du while, puis l'envoyer directement dans roundness

ta boucle est de combien d'itérations ?


RE: Modélisation du système solaire - qwarnant - 24-01-2012

Bonjour,

Cela dépend de la planète (et de ses données propres), mais ça va de 2 à 7 itérations.

Cordialement


RE: Modélisation du système solaire - niahoo - 24-01-2012

au pire tu fais péter le max execution time et hop Smile


RE: Modélisation du système solaire - Ter Rowan - 24-01-2012

(24-01-2012, 12:29 PM)Quent a écrit : Bonjour,

Cela dépend de la planète (et de ses données propres), mais ça va de 2 à 7 itérations.

Cordialement

je suis quand même étonné que

7 * roundness() fasse péter le système.Tes opérations n'ont pas l'air super compliquer tout de même (je vois que l'histoire de la puissance à remonter d'un cran)

tu as d'autres boucles en amont de calculateEccentricAnomaly ?

j'essaierai ce soir à la maison

D'ailleurs si tu as des cas où ça plante (quelles valeurs pour $averageAnomaly, $eccentricity) et d'autres où ça marche ça m'intéresse


RE: Modélisation du système solaire - qwarnant - 24-01-2012

Re,

En simulant plus en détail, j'ai remarqué une chose étrange. Pour certaines fatal error, le stack affiché est le suivant :

[Image: maximum_rov2ak.png]

On voit que la méthode ayant généré la fatal error est la méthode roundness alors qu'à la base, j'avais obtenu ce type de stack :

[Image: Sanstitre7n606.png]

Problème d'affichage du stack dans le second cas ?

Au lieu d'énumérer toutes les valeurs et les méthodes que j'appelle dans le calcul des positions, j'ai déposé sur ma dropbox publique dans le dossier JeuWeb, l'archive contenant la classe lib/class.SolarSystem.php, vous pourrez donc observer plus facilement le déroulement des opérations de calcul.

Ma dropbox

Pour exécuter, il suffit d'aller sur l'index.php à la racine et de cliquer sur le lien "SolarSystem". Vous aurez l'affichage en temps réel des planètes dans le système. La page est rafraîchie toutes les 60s, via des balises meta dans le fichier HTML.

Merci beaucoup pour votre intérêt à tous !


RE: Modélisation du système solaire - christouphe - 24-01-2012

je n'ai aucun problème d'affichage avec le premier lien...


RE: Modélisation du système solaire - qwarnant - 24-01-2012

Bonjour,

Le problème se produit environ une fois sur dix, tu dois donc rafraîchir avec F5 plusieurs fois la page affichant le système solaire.

Cordialement


RE: Modélisation du système solaire - christouphe - 24-01-2012

vu... tu saturerai pas le serveur Apache des fois ??? même si les claculs unitaires sont simple, le cumul des F5 est fatal au navigo.


RE: Modélisation du système solaire - niahoo - 24-01-2012

Mais dans les cas où ça plante pas, on est très loin des 30 secondes, ou c'est assez variable et tu as des 25, des 28, etc ?