Lever et coucher du soleil...

Voir le sujet précédent Voir le sujet suivant Aller en bas

Lever et coucher du soleil...

Message par Olivier le Dim 22 Fév - 12:28

Voilà le code, j'explique dedans, en rouge les variables.


IF ($fh == "") {$fh = date("H") - gmdate("H") ;}$fh est le décalage entre l'heure locale et l'heure TU automatique si non renseigné.
IF ($La == "") { $La = 48.833;}
IF ($Lo == "") { $Lo = -2.333;}
Latitude et longitude, si non renseignées = PARIS
IF ($ville == "") { $ville = "Paris";}
IF ($mois == "") {$mois = date("m") ;}
IF ($jour == "") {$jour = date("d") ;}
Idem pour la date, par défaut = aujourd'hui.
// Fuseau horaire et coordonnées géographiques
$k = 0.0172024;
$jm = 308.67;
$jl = 21.55;
$e = 0.0167;
$ob = 0.4091;
$PI= 3.1415926536;
//Hauteur du soleil au lever et au coucher
$dr = $PI/ 180; Conversion Degrés Radians
$hr = $PI/ 12;
$ht = (-40 / 60);corection de la réfraction
$ht = $ht * $dr;
$La = $La * $dr;
$Lo = $Lo * $dr;Coordonnées en radians
//Date
IF ($mois < 3) {
$mois = $mois + 12;
}Pour ne pas être géné en cas d'année bissextile
//Heure TU du milieu de la journée
$h = 12 + ($Lo / $hr);
//Nombre de jours écoulés depuis le 1 Mars O h TU
$J = floor(30.61 * ($mois + 1)) + $jour + ($h / 24) - 123;
//Anomalie et longitude moyenne
$M = $k * ($J - $jm);
$L = $k * ($J - $jl);
//Longitude vraie
$S =$L + 2 * $e * Sin($M) + 1.25 * $e * $e * Sin(2 * $M);
//Coordonnées rectangulaires du soleil dans le repère équatorial
$X = Cos($S);
$Y = Cos($ob) * Sin($S);
$Z = Sin($ob) * Sin($S);
//Equation du temps et déclinaison
$R = $L;
$rx = Cos($R) * $X + Sin($R) * $Y;
$ry = -Sin($R) * $X + Cos($R) * $Y;
$X = $rx;
$Y = $ry;
$ET = atan($Y / $X); Equation du temps
$DC = atan($Z / Sqrt(1 - $Z * $Z));Déclinaison du soleil
//Angle horaire au lever et au coucher
$cs = (Sin($ht) - Sin($La) * Sin($DC)) / Cos($La) / Cos($DC);
IF ($cs > 1) { $CalculSol = "Ne se lève pas";}
IF ($cs < -1) { $CalculSol = "Ne se couche pas";}
IF ($cs == 0) {
$ah = $PI / 2;
En fonction de la latitude (> 66°) le soleil peut ne pas se lever ou se coucher, ce test pour eviter l'erreur.
}ELSE{
$ah = atan(Sqrt(1 - $cs * $cs) / $cs);
situation normale
}
IF ($cs < 0) { $ah = $ah + $PI;}
//Lever du soleil
$Pm = $h + $fh + ($ET - $ah) / $hr;
Au dessus la formule qui explique tout:
heure du milieu de journée
+ décalage avec TU
+ equation du temps
- la moitié de la durée d'ensoleillement du jour.

IF ($Pm < 0) { $Pm = $Pm + 24;}
IF ($Pm > 24) { $Pm = $Pm - 24;}
$hs = floor($Pm);
$Pm = floor(60 * ($Pm - $hs));
IF (strlen($hs)<2) {$hs = "0".$hs;}
IF (strlen($Pm)<2) {$Pm = "0".$Pm;}
IF ($CalculSol ==""){
$lev = $hs. ":" .$Pm;
}ELSE{
$lev = "---";}
//Coucher du soleil
$Pm = $h + $fh + ($ET + $ah) /$hr;
Pareil...:
heure du milieu de journée
+ décalage avec TU
+ equation du temps
+ la moitié de la durée d'ensoleillement du jour.

IF ($Pm > 24) { $Pm = $Pm - 24;}
IF ($Pm < 0) { $Pm = $Pm + 24;}
$hs = floor($Pm);
$Pm = floor(60 * ($Pm - $hs));
IF (strlen($hs)<2) {$hs = "0".$hs;}
IF (strlen($Pm)<2) {$Pm = "0".$Pm;}
Ca comme en haut pour sortir en heure et minutes
IF ($CalculSol ==""){
$couch = $hs. ":" .$Pm;
}ELSE{
$couch = "---";}
Affichage
ECHO "Horaires du Soleil à ".$ville."
";
ECHO "Lever = " .$lev ;
ECHO "
";
ECHO "Coucher = ". $couch;
?>

Le reste est expliqué derrière les // demander là si vs avez une autre question...

Olivier
Admin
Admin

Nombre de messages : 1124
Date d'inscription : 16/02/2006

Voir le profil de l'utilisateur http://olravet.fr

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum