Programme informatique de construction

des cadrans solaires bifilaires et à polos

par

Jean Pakhomoff

gnomoniste à Marseille

1ère partie (1/4)

 

 

30 OPEN "bfpnop.wps" FOR OUTPUT AS#1

50 REM CETTE ETUDE PERSONNELLE DES CADRANS BIFILAIRES (ET A POLOS) EST

DEDIEE A MES DEUX FILLES SONIA ET NATHALIE.

60 REM JEAN PAKHOMOFF FEVRIER 1995

65 REM 24 JUIN 1997. instruction OPEN en Novembre 2000.

90 KEY OFF:DEFDBL A-Z:CLS:PI=4#*ATN(1#)

100 INPUT "Cadran à heures solaires: appuyez sur s; à heures civiles sur c. s ou

c ?",JEANPAKHOMOFF$

110 IF JEANPAKHOMOFF$="s" THEN GOTO 430

120 PRINT "Correction arbitraire selon le pays: par exemple en France + 1 heure

l'hiver"

130 PRINT

140 PRINT "et + 2 heures l'été; cette correction peut être éventuellement < 0"

150 PRINT

160 INPUT "?",XCA

170 PRINT "Longitude du fuseau , longitude du lieu ; - pour l'est, + pour l'oues

t"

180 PRINT

190 PRINT "a,b en degrés décimaux"

200 INPUT LO,L

210 PRINT

220 PRINT #1,"Correction arbitraire = ";XCA;"h.";" Longitude du fuseau = ";LO;"°

"

230 PRINT

240 PRINT #1,"Longitude du lieu = ";L;"°"

250 LMM=12#+XCA-(LO-L)/15#

260 PRINT "A midi local il est ";LMM;" h. civile"

270 PRINT #1," A midi local il est ";LMM;" h.civile":PRINT #1,

280 PRINT

290 U=FIX(LMM):UU=U+.25#:UUU=U+.5#:UUUU=U+.75#

300 IF LMM>UUUU THEN 340

310 IF LMM>UUU THEN 350

320 IF LMM>UU THEN 360

330 LLH=U: GOTO 370

340 LLH=UUUU: GOTO 370

350 LLH=UUU: GOTO 370

360 LLH=UU

370 RRRM=(LMM-LLH)*15#

380 PRINT "Angle horaire de départ du matin =";RRRM;"° <==> ";LLH;"h. civiles."

390 PRINT #1,"Angle horaire de départ du matin =";RRRM;"° <==> ";LLH;"h. civiles

.":PRINT #1,

400 RRRS=3.75#-RRRM

410 PRINT "Angle horaire de départ de l'aprés-midi =";RRRS;" <==> ";LLH+.25#;" h

. civiles."

420 PRINT #1,"Angle horaire de départ de l'aprés-midi =";RRRS;" <==> ";LLH+.25#;

" h. civiles."

430 INPUT "Mois et année de construction du cadran (mois de 1 à 12): mo,an ?",MO

,AN:ANN=AN:AN=AN-1900#+MO/12#:EPS=(23#*3600#+27#*60#+8.26#)/3600#:EPS=EPS*PI/180

#:PRINT

440 EP=EPS-(.46845#*AN/3600#)*PI/180#:LEC=0:REM En ce qui concerne les variation

s d'epsilon voir le programme nonasp

450 FOR L%=1 TO 4

460 DEC(L%)=SIN(EP)*SIN(LEC):DEC(L%)=ATN(DEC(L%)/SQR(1#-DEC(L%)^2#)):REM sinÙ=si

n¯*sinLo où Lo est la longitude écliptique.

470 LEC=LEC+PI/6#:REM pi/6=30° On a dec(1)=0; dec(2)=11...; dec(3)=20...; dec(4

)=23.439...

480 NEXT L%

490 PRINT #1,"Cadran construit en ";MO;"/";ANN

500 PRINT #1,"A cette époque epsilon est trés proche de la valeur ";EP*180#/PI

510 PRINT #1,"Les déclinaisons d'entrée dans les signes du zodiaque sont alors é

gales à":

520 DEC(2)=FIX(DEC(2)*18000000#/PI)/100000#:DEC(3)=FIX(DEC(3)*18000000#/PI)/1000

00#:DEC(4)=FIX(DEC(4)*18000000#/PI)/100000#:REM dec(1)=0

530 B(1)=DEC(1):B(2)=-DEC(2):B(3)=-DEC(3):B(4)=-DEC(4)

540 PRINT #1,DEC(1);" BELIER-BALANCE ";DEC(2);" TAUREAU-VIERGE":PRINT #1

550 PRINT #1,DEC(3);" GEMEAUX-LION ";DEC(4);" CANCER":PRINT #1

560 PRINT #1,B(2);" POISSONS-SCORPION ";B(3);" VERSEAU-SAGITTAIRE":PRINT #1

570 PRINT #1,B(4);" CAPRICORNE":PRINT #1

580 PRINT"Déclinaisons d'entrée dans les signes du zodiaque":PRINT

590 PRINT"à retenir pour la date de construction du cadran":PRINT

600 PRINT DEC(1);" ";DEC(2);" ";DEC(3);" ";DEC(4):PRINT

610 PRINT B(1);" ";B(2);" ";B(3);" ";B(4):PRINT

620 GOTO 2200

630 REM HORAZBIF ce programme donne l'angle horaire correspondant à un azimut

choisi et à une déclinaison choisie. Pratique pour avoir le point de l'arc diurn

e d'été sur une direction choisie ou l'angle horaire du soleil

640 REM lorsqu'il passe dans le plan d'un cadran vertical. On part de la formul

e de l'azimut tan(a)=sin(t)/(cos(t)*sin(f)-tan(d)*cos(f)). De là en posant sin(f

)*tan(a)=P

650 REM et tan(a)*tan(d)*cos(f)=Q on tire cos(t)*P-sin(t)-Q=0. On prend ensuite

la formule de l'arc moitié en posant tan(t/2)=m; rappelons qu'on a alors

660 REM cos(t)=(1-m^2)/(1+m^2); sin(t)=2*m/(1+m^2) et tan(t)=2*m/(1-m^2).

670 REM On fait ensuite t=2*atn(m)

680 IF F>PI/2#-.000000001# THEN 720:REM cas du pôle où tous les azimuts sont pos

sibles. On pourrait sans aucun calcul écrire que l'angle horaire égale l'azimut

puisque f=pi/2===>tgH=sin(pi/2)*tgt=tga===>a=t.

690 IF F<.0000000001# THEN IF ABS(AAA-PI/2#)<.0000000001# THEN Z3=90:SHC=90:GOTO

1040:REM équateur avec D=0 où D est la déclinaison

700 IF F<.0000000001# THEN IF AAA=PI/2#+D THEN R1=1#:R2=-1#:GOTO 790:REM cas de

l'équateur où p=0 et q=-1 ou q=1 si aaa=PI/2+D ou aaa=PI/2-D (donc D avec son s

igne). Apparemment l'ordinateur ne peut pas résoudre sqr(1-1)=0.

710 REM En fait la condition de la ligne précédente est inutile car à l'équateu

r a+D ne peut être égal à pi/2 sauf si D=0 (condition traitée à la ligne précéde

nte).

720 P=SIN(F)*TAN(AAA):Q=TAN(AAA)*TAN(D)*COS(F):IF FIX(ABS(D)*1000000#)=FIX(F*100

0000#) THEN GOTO 820

730 R1=(1#+SQR(1#+P^2#-Q^2#))/-(P+Q):R2=(1#-SQR(1#+P^2#-Q^2#))/-(P+Q)

740 IF F<PI/2#-.000000000001# THEN GOTO 780

750 RR1=2#*ATN(R1):RR2=2#*ATN(R1)+PI:IF RR1>0 THEN SHC=RR1:GOTO 1030

760 SHC=RR2:GOTO 1030

770 REM Les 2 lignes précédentes sont le cas du pôle où R1,2=(1+(-)sqr(1+tga^2))

/-tga. R1*R2=-1 <==>tgR1=-1/tgR2 <==>R2=R1+pi/2. Donc 2 racines pour les arcs mo

itiés: R1 et R1+pi/2 ce qui donne les arcs 2*R1 et 2*R1+pi. On prendra la racine

>0.

780 IF F>.00000000001# THEN GOTO 920

790 RR1=2#*ATN(R1):RR2=PI-2#*ATN(R1):IF RR1<PI/2#+.0000000001# THEN SHC=RR1:GOTO

1030

800 SHC=RR2:GOTO 1030

810 REM Les 2 lignes précédentes sont le cas de l'équateur où R1,2=(1+(-)sqr(1-t

gD^2*tga^2))/-tgD*tga. R1*R2=1 <==>tg(pi/2-R1)=1/tgR1. Donc 2 racines: 2R1 et PI

-2R1. On prend la racine < à pi/2 car à l'équateur l'angle horaire maximum est p

i/2 (asd = 6h).

820 IF ABS(P)<.0000000001# THEN SHC=0:GOTO 1030:REM Si P=0 <===> Þ=0 et si Ù=0 =

==>l'azimut est constamment égal à 90°:shc=2*(-90)=-180 +180=0

830 IF D<-.000000000001# THEN 860

840 SHC=2#*ATN(-1#/P):GOTO 1030

850 REM Si D=Þ ==>P=sinD*tga et Q=tga*tgD*cosD=tga*sinD=P. Donc R1,2=(1+(-)sqr(1

+p^2-p^2))/-(p+p) ==>R1=(1+1)/-2*p =-1/p et R2=0. C'est le cas des zones intertr

opicales où le soleil passe au zénith à midi 2 fois dans l'année.

860 AAA=PI-AAA:P=SIN(F)*TAN(AAA)

870 SHC=2#*ATN(-1#/P):SHC=PI-SHC:AAA=PI-AAA:GOTO 1030

880 REM Si D=-f on a Q=-P et P+Q=0 (car P=sin(-D)*tga=-sinD*tga et q=tga*tgD*cos

(-D)=tga*sinD===>Q=-P). Donc on ne peut plus calculer les racines R1 et R2. On v

a alors calculer l'heure symétrique sur le même cercle horaire en rajoutant Ò à

l'azimut a.

890 REM On se retrouve dans le cas de la latitude f avec l'azimut 2PI-(PI+a)=PI

-a de l'autre côté de la méridienne (du matin on passe au soir ou inversement) c

eci avec la déclinaison D=-D et D devient >0 et égal à f.

900 REM C'est le cas de la ligne 860. On sait alors calculer shc qui diffèrera d

e PI avec le shc cherché. On rajoutera PI à shc et on retranchera cet angle de 2

PI pour avoir l'angle horaire à partir de la méridienne<==> shc=2PI-(PI+shc)=PI-

shc.

910 REM On redonne alors à a sa valeur en le retranchant à PI: PI-(PI-a)=a et on

donne aussi à D sa valeur d'origine en faisant D=-D puis on renvoie à la ligne

1030.

920 R1=2#*ATN(R1):R2=2#*ATN(R2):REM valeurs en radians.

930 IF R1<0 THEN R1=R1+PI

940 IF R2<0 THEN R2=R2+PI:REM valeurs en radians

950 Z1=ATN(SIN(R1)/(COS(R1)*SIN(F)-TAN(D)*COS(F)))

960 IF Z1<0 THEN Z1=Z1+PI

970 Z2=ATN(SIN(R2)/(COS(R2)*SIN(F)-TAN(D)*COS(F)))

980 IF Z2<0 THEN Z2=Z2+PI

990 R1=R1*180#/PI:R2=R2*180#/PI

1000 AZI1=AAA-Z1:AZI2=AAA-Z2

1005 IF ABS(AZI1)<ABS(AZI2) THEN SHC=R1:GOTO 1040

1010 SHC=R2

1020 GOTO 1040

1030 Z3=ATN(SIN(SHC)/(COS(SHC)*SIN(F)-TAN(D)*COS(F))):SHC=SHC*180#/PI:Z3=Z3*180#

/PI:IF Z3<0 THEN Z3=Z3+180

1040 IF HH$="w"THEN GOTO 1070

1050 IF NO=1 THEN PRINT #1,"Le soleil passe dans le plan du cadran à ";12#+SHC/1

5#;" h.solaire du soir.":RETURN

1060 PRINT #1," Le soleil passe dans le plan du cadran à ";12#-SHC/15#;" heure s

olaire du matin.":RETURN

1070 IF NO=1 THEN PRINT #1,"Le soleil passe dans le plan du cadran à ";12#-SHC/1

5#;" h.solaire du matin.":RETURN

1080 PRINT #1," Le soleil passe dans le plan du cadran à ";12#+SHC/15#;" heure s

olaire du soir.":RETURN

1090 REM configuration affichage des verticaux.

1100 ZZ$="###.### ###.### ###.### ###.### ####.### ####.### ###.###":RETU

RN

1110 PRINT #1,TAB(2);" A hor";TAB(11);"H tab Þ";TAB(20);" AZ ";TAB(29);" Ht

";TAB(38);" X cm. ";TAB(46);" Y(A) cm. ";TAB(58);" HV tab f' "

1120 RETURN

1121 REM configuration affichage des horizontaux.

1122 ZZZ$="###.### ####.### ###.### ###.### ####.### ####.### ####.### ##

#.###":RETURN

1125 PRINT #1,TAB(2);" A hor";TAB(12);"H tab Þ";TAB(21);" AZ ";TAB(30);" Ht ";

TAB(40);" X cm. ";TAB(49);" Y(A) cm. ";TAB(59);" Y(O) cm. ";TAB(69);" HVtabf' "

:RETURN

1130 IF D=0 THEN ASDD=PI/2#:RETURN:REM calcul de l'arc semi-diurne à l'altitude

0 et sans tenir compte de la réfraction: ce problème est traité dans ASDALT puis

CADSALT ou CADSO24D.

1140 IF D>0 THEN IF D>=PI/2#-F THEN PRINT"Pas de coucher pour cette D":ASDD=PI:R

RETURN

1150 IF D<0 THEN IF ABS(D)>=PI/2#-F THEN PDL$="Pas de lever pour cette déclinais

on":PRINT PDL$:PRINT:PRINT #1,PDL$:RETURN

1160 IF F=0 THEN ASDD=PI/2#:GOTO 1200

1170 IF F<PI/2#-.00000000000001# THEN GOTO 1190

1180 ASDD=PI:GOTO 1200:REM j'avais écrit asdd=2pi dans une précédente versionLIS

T

1190 ASD=-TAN(D)*TAN(F):ASDD=ATN(SQR(1#-ASD^2#)/ASD):IF ASD<0 THEN ASDD=ASDD+PI

1200 PRINT #1,"ASD =";ASDD*180#/PI;" Durée du jour =";ASDD*24#/PI;" h.":PRINT #1

,"Lever à ";12#-12#*ASDD/PI;" et coucher à ";ASDD*12#/PI+12#;" heures solaires":

:RETURN:REM 24=(180/15) X 2

1210 REM Calcul de la déclinaison magnifique du matin et du soir.

1220 IF F<PI/2#-.00000000000001# THEN 1250

1230 PRINT #1,"Au pôle le soleil passe dans le plan du cadran à ";12#-AWM*12#/PI

;" h. solaire du matin et à ";12#+AWS*12#/PI;" h. solaire du soir.":RETURN

1240 REM Au pôle awm ou aws sont des azimuts égaux aux angles horaires.

1250 DM=-COS(F)*COS(AWM):DMM=ATN(DM/SQR(1#-(DM)^2#)):REM toujours<pi/2 donc on n

e prévoit pas de correction par pi-dmm (sinus).

1260 IF ABS(DMM)<EP THEN 1290

1280 PRINT"Ce cadran n'a pas de déclinaison magnifique":PRINT #1,"Ce cadran n'a

pas de déclinaison magnifique.":RETURN

1290 REM Calcul de l'heure du lever dans le plan du cadran.

1300 IF ABS(DMM)<.0000000001# THEN HLPCC=PI/2#:GOTO 1340

1310 IF F<.0000000001# THEN HLPCC=PI/2#:GOTO 1340

1320 HLPC=-TAN(DMM)*TAN(F):HLPCC=ATN(SQR(1#-HLPC^2#)/HLPC):IF HLPC<0 THEN HLPCC=

HLPCC+PI

1330 REM Déclinaison magnifique du soir.

1340 DS=-COS(F)*COS(AWS):DMS=ATN(DS/SQR(1#-DS^2#))

1350 REM Calcul de l'heure de coucher dans le plan du cadran.

1360 IF ABS(DMS)<.0000000001# THEN HCPCC=PI/2#:GOTO 1390

1370 IF F<.0000000001# THEN HCPCC=PI/2#:GOTO 1390

1380 HCPC=-TAN(DMS)*TAN(F):HCPCC=ATN(SQR(1#-HCPC^2#)/HCPC):IF HCPC<0 THEN HCPCC=

HCPCC+PI

1390 PRINT #1,"Déclinaison magnifique du matin =";DMM*180#/PI

1400 PRINT #1,"Heure de lever dans le plan du cadran =";12#-HLPCC*12#/PI;" h. so

laire"

1410 PRINT #1,"Déclinaison magnifique du soir =";DMS*180#/PI

1420 PRINT #1,"Heure de coucher dans le plan du cadran =";12#+HCPCC*12#/PI;" h.

solaire":REM 12=180/15

1430 RETURN

1440 REM Calcul des azimuts de lever et coucher: cos(a)=-sinD/cosf

1450 IF D>=PI/2#-F THEN PDC$="Pas de coucher pour cette déclinaison":PRINT #1,PD

C$:RETURN:REM les non levers sont traités en ligne 1150

1460 ALE=-SIN(D)/COS(F):IF ALE=0 THEN ALLE=PI/2#:GOTO 1480

1470 ALLE=ATN(SQR(1#-ALE^2#)/ALE):IF ALE<0 THEN ALLE=ALLE+PI

1480 PRINT #1,"Azimut du lever =";360#-FIX(ALLE*180000#/PI)/1000#;"°"

1490 PRINT #1,"Azimut du coucher =";FIX(ALLE*180000#/PI)/1000#

1500 RETURN

 

SUITE DU PROGRAMME

RETOUR A MES TRAVAUX

RETOUR AU MENU