REM Constantes / Initialisations
pi = 3.141593
dr = pi / 180
hr = pi / 12
ob = 23.439 * dr: REM Obliquité de l'écliptique
a1 = 5: REM Pas d'heures intermédiaires
REM Saisie des paramètres
INPUT "Latitude :"; la: la = la * dr
INPUT "Déclinaison :"; d: d = d * dr
INPUT "Inclinaison :"; i: i = i * dr
REM Latitude du cadran horizontal équivalent (CHE)
lae = asin(SIN(la) * COS(i) - COS(la) * COS(d) * SIN(i))
REM Différence de longitude du CHE (positive si le CHE est à l'ouest)
loe = angl(COS(la) * COS(i) + SIN(la) * COS(d) * SIN(i), SIN(d) * SIN(i))
REM Discriminant
dc = COS(d) * (SIN(la) * SIN(i) + COS(la) * COS(d) * COS(i))
IF ABS(COS(la) * SIN(d)) >= SIN(ob) THEN
REM Sur la sphère céleste les intersections des grands cercles
REM de l'horizon et du cadran (I et I') sont hors des tropiques
REM Donc on se situe entre les cercles polaires, le CHE aussi
IF loe > 0 THEN
REM Le CHE est à l'ouest
REM Le cadran n'est pas éclairé le matin
amn = alev(lae, loe): amx = acou(la, 0)
ELSE
REM Le CHE est à l'est
REM Le cadran n'est pas éclairé le soir
amn = alev(la, 0): amx = acou(lae, loe)
END IF
ELSE
REM Les points I et I' sont entre les tropiques
IF la * lae < 0 THEN
REM Le CHE est situé dans l'autre hémisphère
IF COS(la) <= SIN(ob) THEN
REM On se situe dans la zone polaire
REM Les heures extrêmes sont données par I et I'
amn = angl(SIN(d), -COS(d) / SIN(la))
amx = angl(-SIN(d), COS(d) / SIN(la))
ELSE
REM On se situe entre les cercles polaires
IF COS(lae) > SIN(ob) AND dc < 0 THEN
REM Le CHE est situé entre les cercles polaires
REM et la différence de longitude est importante
REM Le cadran n'est pas éclairé une partie de la journée
IF ABS(la) > ABS(lae) THEN
REM Le cadran est éclairé au début et à la fin
REM des jours les plus longs
amn = alev(la, 0): amx = acou(la, 0)
a1 = angl(SIN(la) * TAN(d), -1): a2 = angl(-SIN(la) * TAN(d), 1)
ELSE
REM Le cadran est éclairé au début et à la fin
REM des jours les plus courts
amn = angl(SIN(la) * TAN(d), -1): amx = angl(-SIN(la) * TAN(d), 1)
a1 = acou(lae, loe): a2 = alev(lae, loe)
END IF
ELSE
REM Les heures extrêmes sont données par I et I'
amn = angl(SIN(la) * TAN(d), -1): amx = angl(-SIN(la) * TAN(d), 1)
END IF
END IF
ELSE
REM La position du CHE est dans le même hémisphère
IF COS(la) <= SIN(ob) AND COS(lae) <= SIN(ob) THEN
REM On se situe dans la zone polaire, le CHE aussi
amn = -pi: amx = pi
ELSE
IF COS(la) > SIN(ob) AND COS(lae) > SIN(ob) AND dc < 0 THEN
REM On se situe entre les cercles polaire, le CHE aussi
REM et la différence de longitude est importante
REM Le cadran n'est pas éclairé une partie de la journée
amn = alev(la, 0): amx = acou(la, 0)
a1 = acou(lae, loe): a2 = alev(lae, loe)
ELSE
IF ABS(la) < ABS(lae) THEN
REM La latitude la est plus faible que lae
REM C'est l'horizon qui limite l'éclairement
amn = alev(la, 0): amx = acou(la, 0)
ELSE
REM La latitude la est plus grande que lae
REM C'est le cadran qui limite son éclairement
amn = alev(lae, loe): amx = acou(lae, loe)
END IF
END IF
END IF
END IF
END IF
REM Affichage des résultats
PRINT "Heures extrêmes d'éclairement"
PRINT "h mini ="; amn / hr + 12, "h maxi ="; amx / hr + 12
IF a1 <> 5 THEN
PRINT "Heures extrêmes intermédiaires"
PRINT "h maxi ="; a1 / hr + 12, "h mini ="; a2 / hr + 12
END IF
FUNCTION acos (x)
REM Fonction Arc Cosinus
SHARED pi
IF x = 0 THEN
a = pi / 2
ELSE
a = ATN(SQR(1 - x * x) / x)
IF x < 0 THEN a = a + pi
END IF
acos = a
END FUNCTION
FUNCTION acou (la, lo)
REM Angle horaire local maximum au coucher du soleil
REM à la latitude la et différence de longitude lo
SHARED pi, ob
ac = acos(-ABS(TAN(la)) * TAN(ob)) + lo
IF ac > pi THEN ac = ac - 2 * pi
IF ac < -pi THEN ac = ac + 2 * pi
acou = ac
END FUNCTION
FUNCTION alev (la, lo)
REM Angle horaire local minimum au lever du soleil
REM à la latitude la et différence de longitude lo
SHARED pi, ob
al = -acos(-ABS(TAN(la)) * TAN(ob)) + lo
IF al > pi THEN al = al - 2 * pi
IF al < -pi THEN al = al + 2 * pi
alev = al
END FUNCTION
FUNCTION angl (x, y)
REM Angle d'un vecteur par rapport à l'axe des x
SHARED pi
IF x = 0 THEN
a = SGN(y) * pi / 2
ELSE
a = ATN(y / x)
IF x < 0 AND y >= 0 THEN a = a + pi
IF x < 0 AND y < 0 THEN a = a - pi
END IF
angl = a
END FUNCTION
FUNCTION asin (y)
REM Fonction Arc Sinus
SHARED pi
IF ABS(y) = 1 THEN asin = y * pi / 2 ELSE asin = ATN(y / SQR(1 - y * y))
END FUNCTION
Retour à la page d'accueil -o- Reveno al la akcepta retpagho
Date de création: 10 Juin 98
Date de la dernière mise à jour: 6 Mars 2002