Phases de la lune.
Page 1 sur 1
Phases de la lune.
On me demande souvent mon script de phases de la lune.
très léger et souvent suffisant, une facilitation, un trucage même qui laisse à penser que la lune est un astre dont la course est cylindrique....
Beaucoup plus précis, mais plus lourd...
Une adaptation d'un script en Perl d'un certain Hamilton:
Si elles vous plaisent je peux vous passer mes vues, avec ces scripts
très léger et souvent suffisant, une facilitation, un trucage même qui laisse à penser que la lune est un astre dont la course est cylindrique....
- Code:
<?php
$mps=2551442.8; // 29jrs 12 heures 44 minutes 2.8 secondes = revolution moyenne.
$position=time()-mktime(13, 57, 0, 1, 3, 2007); // secondes passées depuis la référence (1/3/2007 a 13h57)
$position=($position-$mps*intval($position/$mps))/$mps;
$position = $position +.5;
if ($position>1){$position--;}
$position=round(29.530587*$position,0);
echo "<img src='moon$position.gif' alt = ''>";
?>
Beaucoup plus précis, mais plus lourd...
Une adaptation d'un script en Perl d'un certain Hamilton:
- Code:
<?
/*
Adaptation en php du script Astro-MoonPhase de Brett Hamilton.
*/
class Moon
{
function phase($Year, $Month, $Day, $Hour, $Minutes, $Seconds)
{
$DateSec = mktime($Hour, $Minutes, $Seconds, $Month, $Day, $Year, 0);
ini_set(precision, "20"); //Defini la precision des calculs
$Epoch = 2444238.5; // 0 janvier 1980
# Soleil
$Elonge = 278.833540; # ecliptic longitude of the Sun at epoch 1980.0
$Elongp = 282.596403; # ecliptic longitude of the Sun at perigee
$Eccent = 0.016718; # eccentricity of Earth's orbit
$Sunsmax = 1.495985e8; # semi-major axis of Earth's orbit, km
$Sunangsiz = 0.533128; # sun's angular size, degrees, at semi-major axis distance
# Lune, epoch 1980.0.
$Mmlong = 64.975464; # moon's mean longitude at the epoch
$Mmlongp = 349.383063; # mean longitude of the perigee at the epoch
$Mlnode = 151.950429; # mean longitude of the node at the epoch
$Minc = 5.145396; # inclination of the Moon's orbit
$Mecc = 0.054900; # eccentricity of the Moon's orbit
$Mangsiz = 0.5181; # moon's angular size at distance a from Earth
$Msmax = 384401.0; # semi-major axis of Moon's orbit in km
$Mparallax = 0.9507; # parallax at distance a from Earth
$Synmonth = 29.53058868; # synodic month (new Moon to new Moon)
$pdate = Moon::jtime($DateSec);
$pphase; # illuminated fraction
$mage; # age of moon in days
$dist; # distance in kilometres
$angdia; # angular diameter in degrees
$sudist; # distance to Sun
$suangdia; # sun's angular diameter
# Calcul position soleil.
$Day = $pdate - $Epoch;
$N = Moon::fixangle((360 / 365.2422) * $Day); # ano moyenne soleil
$M = Moon::fixangle($N + $Elonge - $Elongp);
$Ec = Moon::kepler($M, $Eccent); # equation de Kepler
$Ec = sqrt((1 + $Eccent) / (1 - $Eccent)) * tan($Ec / 2);
$Ec = 2 * Moon::todeg(atan($Ec)); # anomalie vraie
$Lambdasun = Moon::fixangle($Ec + $Elongp); # ecliptique geocentrique du soleil
$F = ((1 + $Eccent * cos(Moon::torad($Ec))) / (1 - $Eccent * $Eccent));
$SunDist = $Sunsmax / $F; # distance au soleil en km
$SunAng = $F * $Sunangsiz; # diametre du soleil en degrés
# Calcul position lune.
# longitude moyenne.
$ml = Moon::fixangle(13.1763966 * $Day + $Mmlong);
# Anomalie moyenne
$MM = Moon::fixangle($ml - 0.1114041 * $Day - $Mmlongp);
# Noeud ascendant
$MN = Moon::fixangle($Mlnode - 0.0529539 * $Day);
$Ev = 1.2739 * sin(Moon::torad(2 * ($ml - $Lambdasun) - $MM));
# Equation annuelle.
$Ae = 0.1858 * sin(Moon::torad($M));
# terme de correction
$A3 = 0.37 * sin(Moon::torad($M));
# Anomalie corrigée
$MmP = $MM + $Ev - $Ae - $A3;
# Correction de l'equation du centre.
$mEc = 6.2886 * sin(Moon::torad($MmP));
# terme de correction
$A4 = 0.214 * sin(Moon::torad(2 * $MmP));
# Longitude corrigée.
$lP = $ml + $Ev + $mEc - $Ae + $A4;
# Variation.
$V = 0.6583 * sin(Moon::torad(2 * ($lP - $Lambdasun)));
# Longitude vraie.
$lPP = $lP + $V;
# Longitude corrigée des noeuds.
$NP = $MN - 0.16 * sin(Moon::torad($M));
$y = sin(Moon::torad($lPP - $NP)) * cos(Moon::torad($Minc));
$x = cos(Moon::torad($lPP - $NP));
# Longitude de l'ecliptique.
$Lambdamoon = Moon::todeg(atan2($y, $x));
$Lambdamoon += $NP;
# Latitude de l'ecliptique.
$BetaM = Moon::todeg(asin(sin(Moon::torad($lPP - $NP)) * sin(Moon::torad($Minc))));
# Calcul des phases de lune.
# Age de la lune en degrés
$MoonAge = $lPP - $Lambdasun;
# Phase.
$MoonPhase = (1 - cos(Moon::torad($MoonAge))) / 2;
# Calcul distance lune <-> centre terre
$MoonDist = ($Msmax * (1 - $Mecc * $Mecc)) /
(1 + $Mecc * cos(Moon::torad($MmP + $mEc)));
# Calcul diametre lune en degres
$MoonDFrac = $MoonDist / $Msmax;
$MoonAng = $Mangsiz / $MoonDFrac;
# Calcul parallaxe.
$MoonPar = $Mparallax / $MoonDFrac;
$pphase = $MoonPhase; # illuminated fraction
$mage = $Synmonth * (Moon::fixangle($MoonAge) / 360.0); # age of moon in days
$dist = $MoonDist; # distance in kilometres
$angdia = $MoonAng; # angular diameter in degrees
$sudist = $SunDist; # distance to Sun
$suangdia = $SunAng; # sun's angular diameter
$mpfrac = Moon::fixangle($MoonAge) / 360.0;
return array( $pphase, $mage, $dist, $angdia, $sudist, $suangdia, $mpfrac, $mpfrac );
}
function fixangle($x) { return ($x - 360.0 * (floor($x / 360.0))); } # fix angle
function torad($x) { return ($x * (M_PI / 180.0)); } # deg->rad
function todeg($x) { return ($x * (180.0 / M_PI)); } # rad->deg
function jtime($t)
{
$julian = ($t / 86400) + 2440587.5; # (seconds /(seconds per day)) + julian date of epoch 2440587.5 / 86400 = 28,24753472222 Days
return ($julian);
}
function kepler($m, $ecc)
{
$EPSILON = 1e-6;
$m = Moon::torad($m);
$e = $m;
while (abs($delta) > $EPSILON)
{
$delta = $e - $ecc * sin($e) - $m;
$e -= $delta / (1 - $ecc * cos($e));
}
return ($e);
}
}
//Exemple d'utilisation :
if ($mois == "") {$mois = date("n");}
if ($jour == "") {$jour =date("d");}
if ($an == "") {$an =date("Y");}
if ($hr == "") {$hr =date("H");}
if ($mn == "") {$mn =date("i");}
if ($se == "") {$se =date("s");}
list($MoonPhase, $MoonAge, $MoonDist, $MoonAng, $SunDist, $SunAng, $mpfrac) = Moon::phase($an, $mois, $jour, $hr, $mn, $se);
echo "Pour le: ". $jour ." " . $mois." ".$an. " à " . $hr .":" . $mn.":".$se."<br>";
echo "La Lune est éclairée à ".number_format($MoonPhase*100, 2, ',', '')."%"."<br>";
echo "Son age est de ".number_format($MoonAge, 8, ',', '')." jours"."<br>";
echo "Et elle se situe à une distance de ".number_format($MoonDist, 0, ',', '')." km par rapport à la Terre."."<br>";
$position=round($MoonAge,0);
// là ca marchera si vous avez les vues
echo "<img src=\"/lune/moon$position.gif\" width=\"50\" height=\"50\" alt = \"\">";
?>
Si elles vous plaisent je peux vous passer mes vues, avec ces scripts
Sujets similaires
» Positions et phases de la lune.
» jardi lune dans hemisphere sud
» Portabilisation de jardi lune et divergence avec calendrier
» un logiciel simple pour faire tourner ma lune !
» jardi lune dans hemisphere sud
» Portabilisation de jardi lune et divergence avec calendrier
» un logiciel simple pour faire tourner ma lune !
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|