Remarque: Ce programme est valable en tout point du globe sans aucune modification.
REM Coordonnées géographiques
lo = -2.1: la = 49.1
lo = lo * dr: dp = (90 - la) * dr
REM Heure légale recouverte par la courbe en 8, fuseau horaire
hc = 14: fh = 1
ag = lo - (hc - fh) * hr + pi
REM Déclinaison et inclinaison du cadran, hauteur du centre de rotation
d = 0: i = 0: g = 100
d = d * dr: i = i * dr
REM Heures de fonctionnement ************************
REM Vecteur normal au plan du cadran
x = 0: y = 0: z = -g
REM Passage au repère local
r = -i: GOSUB 1200: r = d: GOSUB 1300
REM Passage au repère équatorial
r = -dp: GOSUB 1200: r = ag: GOSUB 1300
REM Calcul de la portion utile
IF x = 0 THEN
a = pi
ELSE
a = ATN(y / x)
IF x < 0 THEN
IF y = 0 THEN a = pi ELSE a = a + SGN(y) * pi
END IF
a = 2 * a
END IF
REM Calcul de l'heure limite du centre de rotation
h1 = hc + 12
IF h1 >= 24 THEN h1 = h1 - 24
REM Calcul de l'heure limite projetée à l'infini
h2 = -a / hr + h1
IF h2 < 0 THEN h2 = h2 + 24
IF h2 >= 24 THEN h2 = h2 - 24
REM affichage des résultats
IF y = 0 THEN
IF x > 0 THEN
PRINT "Le cadran ne fonctionne pratiquement pas"
ELSE
PRINT "le cadran fonctionne presque tout le jour"
END IF
ELSE
IF y > 0 THEN
PRINT USING "Le cadran fonctionne entre ##.# h et ##.# +/- 0,5 h"; h2; h1
ELSE
PRINT USING "Le cadran fonctionne entre ##.# +/- 0,5 h et ##.# h"; h1; h2
END IF
END IF
PRINT "Quand la table du cadran est éclairée ..."
PRINT
REM Tracé du pied du style **************************
REM Heure UT de midi moyen local
h = 12 + lo / hr
FOR mi = 1 TO 12
IF mi < 3 THEN mo = mi + 12 ELSE mo = mi
FOR jo = 1 TO 21 STEP 10
REM Nombre de jours écoulés depuis le 1 Mars O h TU
j = INT(30.61 * (mo + 1)) + jo + h / 24 - 123
REM Anomalie et longitude moyenne
m = k * (j - jm): l = k * (j - jl)
REM Longitude vrai
s = l + 2 * e * SIN(m) + 1.25 * e * e * SIN(2 * m)
REM Coordonnées rectangulaires du soleil dans le repère équatorial
x = COS(s): y = COS(ob) * SIN(s): z = SIN(ob) * SIN(s)
REM Equation du temps et déclinaison puis inversion
r = l: GOSUB 1300: y = -y: z = -z
REM Passage au repère local
r = -ag: GOSUB 1300: r = dp: GOSUB 1200
REM Passage au repère cadran
r = -d: GOSUB 1300: r = i: GOSUB 1200
REM Position du pied du style
PRINT USING "Le ## du mois ##:"; jo; mi;
PRINT TAB(29); "X ="; -g * x / z, "Y ="; -g * y / z
NEXT: NEXT
PRINT
REM Tracé de la ligne horaire ***********************
FOR hl = 4 TO 20
REM Vecteur "centre de projection-point horaire" dans le repère équatorial
a = lo - (hl - fh) * hr
x = COS(a) - COS(ag): y = SIN(a) - SIN(ag): z = 0
REM Passage au repère local
r = dp: GOSUB 1200
REM Passage au repère cadran
r = -d: GOSUB 1300: r = i: GOSUB 1200
REM Position du point horaire
PRINT USING "A l'heure ##:"; hl;
PRINT TAB(29); "X ="; -g * x / z, "Y ="; -g * y / z
NEXT
END
1200 REM Rotation de l'angle r autour de l'axe y
rx = COS(r) * x - SIN(r) * z: rz = SIN(r) * x + COS(r) * z
x = rx: z = rz: RETURN
1300 REM Rotation de l'angle r autour de l'axe z
rx = COS(r) * x + SIN(r) * y: ry = -SIN(r) * x + COS(r) * y
x = rx: y = ry: RETURN
Date de création: 18 Novembre 97