"; // calcul de la force appliquée aux petits corps for ($i=0; $i<$nb; $i++) { // distance au corps pertubateur //$d = sqrt(($x-$n_corps[$i][0])*($x-$n_corps[$i][0])+($y-$n_corps[$i][1])*($y-$n_corps[$i][1])+($z-$n_corps[$i][2])*($z-$n_corps[$i][2])); $dCXh = sqrt(($x-$n_corps[$i][0])*($x-$n_corps[$i][0])+($y-$n_corps[$i][1])*($y-$n_corps[$i][1])); //$dCXv = sqrt($dCXh*$dCXh +($z-$n_corps[$i][2])*($z-$n_corps[$i][2])); // angles(directions) horizontaux et verticaux par rapport au corps pertubateur X $aCXh= acos(($x-$n_corps[$i][0])/$dCXh); if (($y-$n_corps[$i][1])<0) $aCXh= 2*pi() - $aCXh; // à priori égale à 0 $aCXv = 0; //acos(($z-$n_corps[$i][2])/$dCXv); if (($z-$n_corps[$i][2])<0) $aCXh= 2*pi() - $aCXv; // modification des vecteurs vitesse liés à la trajectoire du petit corps $n_corps[$i][3] += -cos($aCXh)*cos($aCXv)*$k/($dCXh*$dCXh)*$kT; //-cos($aCXh)*cos($aCXv)*$k/($d*$d); $n_corps[$i][4] += -sin($aCXh)*cos($aCXv)*$k/($dCXh*$dCXh)*$kT; // -sin($aCXh)*cos($aCXv)*$k/($d*$d) //$n_corps[$i][5] += sin($aCXv)*$k/($d*$d); // modification de la position du petit corps $n_corps[$i][0] += $n_corps[$i][3]; $n_corps[$i][1] += $n_corps[$i][4]; //$n_corps[$i][2] += $n_corps[$i][5]; // option couteuse en temps à supprimer dès que possible if ($with_color) { $dCXh2 = sqrt(($x-$n_corps[$i][0])*($x-$n_corps[$i][0])+($y-$n_corps[$i][1])*($y-$n_corps[$i][1])); imagesetpixel($im, $n_corps[$i][0]/$UAPix*$zF, $n_corps[$i][1]/$UAPix*$zF, ($dCXh2>$dCXh?$red:$blue)); } else imagesetpixel($im, $n_corps[$i][0]/$UAPix*$zF, $n_corps[$i][1]/$UAPix*$zF, $gray); } // tableau de sauvegarde if ($t==($It-2)) $n_corps_svg = $n_corps; } // Affichage des petits corps en fin de course for ($i=0; $i<$nb; $i++) imagesetpixel($im, $n_corps[$i][0]/$UAPix*$zF, $n_corps[$i][1]/$UAPix*$zF, $white); imagesetpixel($im, $x/$UAPix*$zF, $y/$UAPix*$zF, $yellow); // Repartition des comètes : nombre par degrés echo "
"; for ($i=0; $i<$nb; $i++) { imagesetpixel($im, $n_corps[$i][0]/$UAPix*$zF, $n_corps[$i][1]/$UAPix*$zF, $white); // distances au corps pertubateur $dCXh2 = sqrt(($x-$n_corps[$i][0])*($x-$n_corps[$i][0])+($y-$n_corps[$i][1])*($y-$n_corps[$i][1])); $dCXh1 = sqrt(($x-$n_corps_svg[$i][0])*($x-$n_corps_svg[$i][0])+($y-$n_corps_svg[$i][1])*($y-$n_corps_svg[$i][1])); // angle horizontal du corps pertubateur par rapport à Px $aCXh = acos(($x-$n_corps[$i][0])/$dCXh2); if (($y-$n_corps[$i][1])<0) $aCXh= 2*pi() - $aCXh; // sortie des résultats echo ""; } echo "
".$dCXh1."".$aCXh."".($dCXh2-$dCXh1)."
"; imagestring($im, 2, 5, 255*$zF + 5, "Masse = ".$mX." M.Terre | Vitesse = ".$vX." m/s | Dir H = ".$aXh."° | Dir V = ".$aXv."°", $yellow); imagestring($im, 2, 5, 255*$zF + 22, "Nb Corps = ".$nb." | UA/Pix = ".$UAPix." | Nb It = ".$It." | Durée d'une It = ".$kTa." année(s)", $yellow); imagestring($im, 2, 5, 255*$zF +5 , "Masse = ".$mX." M.Terre Vitesse = ".$vX." m/s Dir H = ".$aXh."° Dir V = ".$aXv."°", $white); imagestring($im, 2, 5, 255*$zF + 22, "Nb Corps = ".$nb." UA/Pix = ".$UAPix." Nb It = ".$It." Durée d'une It = ".$kTa." année(s)", $white); // retrace la trajectoire Px // initialisation de la position de la "planète X" au départ $x=80*$UAPix; $y=127.5*$UAPix; $z=0; // Evolution de la position de la "planète X" - 1000 itérations for ($t=0; $t<$It; $t++) { //position Px (en UA) à partir des vecteurs vitesse calculés $x = $x + cos($aXh*pi()/180)*cos($aXv*pi()/180)*$v*$kT; $y = $y - sin($aXh*pi()/180)*cos($aXv*pi()/180)*$v*$kT; $z = $z + sin($aXv*pi()/180)*$v*$kT; imagesetpixel($im, $x/$UAPix*$zF, $y/$UAPix*$zF, $brown); } return $im; } function sun_PX() { include("cte.inc"); } function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } $mc = time(); $im_gravity = n_gravity(); imagepng($im_gravity, "gravity.png"); ?> Simulateur d'un corps traversant un champ de météorites
Masse Px (m Terre)
Vitesse Px (m.s^-1)
Dir. Horiz Px (°)
Dir. Vert. Px (°)
Nombre de petits corps
UA / (Zoom*pixel)
Incrément temps par iter. (années)
Nombre d'itérations
Facteur de Zoom (Zoom*255 pix)