Calcul des heures d'éclairement maximales d'un cadran plan quelconque


RESUME: Lorsqu'on réalise un cadran solaire on peut être amené à se demander quelles seront les heures limites d'éclairement du cadran afin de ne pas tracer des lignes horaires superflues ou de ne pas en oublier. Un petit programme qui permet de calculer ces heures est présenté ici. Elles correspondent au cas idéal où l'horizon est parfaitement dégagé et où il n'y a aucun obstacle autour de la surface du cadran (avancée de toit par exemple). La réfraction de l'atmosphère n'est également pas pris en compte.

I/ Les paramètres

Pour effectuer les calculs, le programme doit connaître les paramètres suivants:

II/ Le discriminant

Pour traiter le problème dans sa globalité on est amené à considérer le résultat d'un calcul que nous conviendrons d'appeler discriminant. Il indique si la différence de longitude du cadran horizontal équivalent (CHE) est importante. Dans ce cas et lorsqu'on est situé, ainsi que le CHE, entre les cercles polaires, le cadran est éclairé pendant deux périodes distinctes de la journée. Sous les latitudes de la France c'est le cas classique du cadran vertical septentrional.

III/ Les résultats

Ils sont exprimés en heures vraies et ils sont valables pour tous les cas de figure en particulier pour les lieux situés dans les zones polaires. Dans ce cas la valeur de l'heure minimale peut être supérieure à la valeur de l'heure maximale et ceci de façon tout à fait normale. Il faut alors comprendre que le cadran commence à être éclairé en fin de journée et qu'il le reste jusqu'au début de la journée suivante.

IV/ Le programme

L'écriture proposée ici est faite en Qbasic de Microsoft mais elle est facilement adaptable à tout autre langage.
DECLARE FUNCTION acos! (x!)
DECLARE FUNCTION acou! (la!, lo!)
DECLARE FUNCTION alev! (la!, lo!)
DECLARE FUNCTION angl! (x!, y!)
DECLARE FUNCTION asin! (y!)

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


Télécharger le fichier source

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