ON ERROR GOTO trap
molt = 391.387
pi = 3.141592654#
P1 = pi / 180
INPUT
"lat"; lat
fi = lat * P1
INPUT
"declinazione"; de
d = de * P1
INPUT
"ortostilo"; gn
SCREEN 12
FOR AO1 = -90 TO 90
STEP 15 / 2
FOR delta = -23.44
TO 23.44 STEP .05
del = delta * P1
AO = AO1 * P1
nume = SIN(AO)
deno = (SIN(fi) *
COS(AO) - COS(fi) * TAN(del))
GOSUB ATN2
'az = ATN(SIN(AO) /
(SIN(fi) * COS(AO) - COS(fi) * TAN(del)))
senh = SIN(fi) *
SIN(del) + COS(fi) * COS(del) * COS(AO)
h = ATN(senh /
SQR(-senh * senh + 1))
x = gn * TAN(az - d)
y = -gn * TAN(h) /
COS(az - d)
PSET (320 + x *
molt, -y * molt + 240), 14
NEXT
NEXT
REM solstizio
d'inverno
FOR AO1 = -90 TO 90
STEP 15 / 8
delta = -23.44
del = delta * P1
AO = AO1 * P1
nume = SIN(AO)
deno = (SIN(fi) *
COS(AO) - COS(fi) * TAN(del))
GOSUB ATN2
'az = ATN(SIN(AO) /
(SIN(fi) * COS(AO) - COS(fi) * TAN(del)))
senh = SIN(fi) *
SIN(del) + COS(fi) * COS(del) * COS(AO)
h = ATN(senh /
SQR(-senh * senh + 1))
x = gn * TAN(az - d)
y = -gn * TAN(h) / COS(az
- d)
PSET (320 + x *
molt, -y * molt + 240), 12
NEXT
REM ora italica e/o
babilonica
'FOR ITA = 12 TO 24
FOR BAB = 1 TO 12
FOR delta = -23.44
TO 23.44 STEP .05
del = delta * P1
cosesse = -TAN(fi) *
TAN(del)
esse = pi / 2 -
ATN(cosesse / SQR(-cosesse * cosesse + 1))
'AO = (ITA * PI / 12
+ esse - 2 * PI)
AO = (BAB * pi / 12
- esse)
nume = SIN(AO)
deno = (SIN(fi) *
COS(AO) - COS(fi) * TAN(del))
GOSUB ATN2
'az = ATN(SIN(AO) /
(SIN(fi) * COS(AO) - COS(fi) * TAN(del)))
senh = SIN(fi) *
SIN(del) + COS(fi) * COS(del) * COS(AO)
h = ATN(senh /
SQR(-senh * senh + 1))
x = gn * TAN(az - d)
y = -gn * TAN(h) /
COS(az - d)
PSET (320 + x *
molt, -y * molt + 240), 14
NEXT
NEXT
REM orizzonte
LINE (0, 240)-(640,
240), 8: REM ASSE ASCISSE
LINE (320, 0)-(320,
480), 8: REM ASSE ORDINATE
END
SCREEN 0
trap:
RESUME NEXT
ATN2:
REM calcola
l'arcotangente tenendo conto del quadrante
yp = nume
xp = deno
rapu = (yp / xp)
IF rapu > 0 THEN
IF nume > 0 THEN
az = ATN(rapu)
ELSE
az = ATN(rapu) + pi
END IF
ELSE
IF yp > 0 THEN
az = ATN(rapu) + pi
ELSE
az = ATN(rapu) + 2 *
pi
END IF
END IF
IF yp = 0 THEN
IF xp > 0 THEN az
= 0
IF xp < 0 THEN az
= pi
END IF
RETURN