Marcel Délèze                                                                                              Déc. 2002

Gnomon

§ 1 Initialisations

ϵ=0.001;fenetre={{-8,8},{-8,8}};h=(π/12.); δmax=23.4573 °;demiDiametreSoleil=((16./60))°;

SetOptions[Plot,AspectRatio->Automatic,Axes->True,AxesOrigin->{0,0},PlotRange->fenetre, ImageSize->{540,540},Frame->True,DisplayFunction->Identity];

SetOptions[ParametricPlot,AspectRatio->Automatic,Axes->True,AxesOrigin->{0,0},PlotRange->fenetre, ImageSize->{540,540},Frame->True,DisplayFunction->Identity];

SetOptions[Graphics,AspectRatio->Automatic,Axes->True,AxesOrigin->{0,0},PlotRange->fenetre, ImageSize->{540,540},Frame->True,DisplayFunction->Identity];

Clear[t,λ,δ]

§ 2 Temps du soleil vrai local
	Modélisation

t = heure solaire locale vraie (à minuit t = 0; à midi t = π);
λ = latitude du lieu (hémisphère nord 0 < λ < (π/2); hémisphère sud -(π/2) < λ < 0);
δ = déclinaison du soleil = angle entre l'équateur terrestre et l'écliptique
	(du 22 juin au 22 décembre 0 < δ < (Subscript[δ, max]); du 22 décembre au 22 juin -(Subscript[δ, max]) < δ < 0);

Matrice de rotation autour de l'axe Oz (axe de rotation de la terre)

Clear[m];
m[t_]:={{Cos[t],-Sin[t],0},{Sin[t],Cos[t],0},{0,0,1}}

m[t]//MatrixForm

Vecteur vertical du lieu à la latitude λ = gnomon de longueur 1 = direction du zénith

v0={0,Cos[λ],Sin[λ]};
Clear[v];v[t_]:=m[t].v0

v[t]

Vecteur horizontal du lieu montrant le nord

n0={0,-Sin[λ],Cos[λ]};
Clear[n]; n[t_]:=m[t].n0

n[t]

Vecteur horizontal du lieu montrant l'est

Clear[e];e[t_]:=Simplify[m[t].Cross[n0,v0]]

e[t]

Le repère local {e, n, v} est orthonormé et direct

Simplify[Cross[n[t],v[t]]]

Simplify[Det[{e[t],n[t],v[t]}]]

Vecteur s qui pointe vers le soleil

s={0,-Cos[δ],Sin[δ]}

L'heure soleil vrai t est l'angle entre le vecteur soleil s et le demi-plan de l'anti-méridien du lieu. Dans un graphique, pour représenter la position du soleil , on se réfèrera à l'instant t = π (midi).

Notre modèle est approché
	 - durant une journée, nous supposons que la déclinaison est constante;
	 - durant l'année, nous supposons que la déclinaison varie selon une loi sinusoïdale;
	 - les rayons du soleil sont parallèles.

Vecteur ombre du gnomon 
	g(t) = projection de v(t) sur le plan {e(t), n(t)} parallélement à s
	vs(t) = projection de v(t) sur l'axe s parallèlement au plan {e(t), n(t)}

Les heures du lever et du coucher du soleil sont donnés par la condition
	le soleil est visible ⟺ vs(t) ≻ 0

Distance zénithale du soleil

Il s'agit de l'angle que forme le vecteur pointant vers le soleil avec le vecteur pointant vers le zénith (à la verticale du lieu).

zs[t_,δ_,λ_]:=Evaluate[s.v[t]]

zs[t,δ,λ]

zs[π,δ,λ]

Simplify[zs[π,δ,λ],Trig->True]

§ 2.1 Horaire à l'équateur

λ=0;

r=Simplify[Solve[v[t]==re*e[t]+rn*n[t]+rs*s,{re,rn,rs}],Trig->True]

coef={re,rn,rs}/.r[[1]]

Clear[g,vs,lever,coucher,δInf]

g[t_,δ_,λ_]:=Evaluate[{coef[[1]],coef[[2]]}/;Abs[λ]<ϵ]

vs[t_,δ_,λ_]:=Evaluate[coef[[3]]/;Abs[λ]<ϵ]

lever[δ_,λ_]:=(π/2)/;Abs[λ]<ϵ

δInf[δ_,λ_]:=-δmax/;Abs[λ]<ϵ

§ 2.2 Horaire au pôle nord

λ=(π/2);

r=Simplify[Solve[v[t]==re*e[t]+rn*n[t]+rs*s,{re,rn,rs}],Trig->True]

coef={re,rn,rs}/.r[[1]]

g[t_,δ_,λ_]:=Evaluate[{coef[[1]],coef[[2]]}/;Abs[λ-(π/2.)]<ϵ]

vs[t_,δ_,λ_]:=Evaluate[coef[[3]]/;Abs[λ-(π/2.)]<ϵ]

lever[δ_,λ_]:=If[δ>0,0,2 π]/;Abs[λ-(π/2.)]<ϵ

δInf[δ_,λ_]:=ϵ/;Abs[λ-(π/2.)]<ϵ

§ 2.3 Horaire, cas général

Clear[λ]

r=Simplify[Solve[v[t]==re*e[t]+rn*n[t]+rs*s,{re,rn,rs}],Trig->True]

coef={re,rn,rs}/.r[[1]]

g[t_,δ_,λ_]:=Evaluate[{coef[[1]],coef[[2]]}]

?g

vs[t_,δ_,λ_]:=Evaluate[FullSimplify[coef[[3]]]]

?vs

Heures du lever et du coucher :

-Cos[t] Cos[δ] Cos[λ]+Sin[δ] Sin[λ] = 0
⟺ Cos[t]=((Sin[δ] Sin[λ])/(Cos[δ] Cos[λ]))=Tan[δ] Tan[λ] 
⟹ (Subscript[t, lever])=ArcCos[Tan[δ] Tan[λ]], (Subscript[t, coucher])=2 π-ArcCos[Tan[δ] Tan[λ]]

lever[δ_,λ_]:=Which[-1≤Tan[δ] Tan[λ]≤1,ArcCos[Tan[δ] Tan[λ]],-Cos[π]Cos[δ]Cos[λ]+Sin[δ]Sin[λ]>0,0,True,2 π]

?lever

coucher[δ_,λ_]:=2 π - lever[δ,λ]

§ 3 Temps du soleil vrai local
	Courbes remarquables

§ 3.1 Courbes journalières

declinaison[mois_]:=-δmax*Cos[mois*(π/6)]

Convention
	mois = 0 ⟷ 22 décembre ⟷ mois = 12 ⟷ solstice d'hiver
	mois = 3 ⟷ 21 mars ⟷ équinoxe de printemps
	mois = 6 ⟷ 22 juin ⟷ solstice d'été
	mois = 9 ⟷ 23 septembre ⟷ équinoxe d'automne

Table[declinaison[mois]*(180/π),{mois,0,12}]

ecrisHeure[t_]:=Module[{ta},Which[t<0,ta=0,t>24,ta=24*60,True,ta=Round[60*t]];StringJoin[
			If[Quotient[ta,60]≥10,ToString[Quotient[ta,60]],
					StringJoin[" ",ToString[Quotient[ta,60]]]],
				" h ",
			If[Mod[ta,60]≥10,ToString[Mod[ta,60]],
					StringJoin[" ",ToString[Mod[ta,60]]]],
				 " min"]]

date[t_]:=ToString[{{12,22},{12,23},{12,24},{12,25},{12,26},{12,27},{12,28},{12,29},{12,30},{12,31},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11},{1,12},{1,13},{1,14},{1,15},{1,16},{1,17},{1,18},{1,19},{1,20},{1,21},{1,22},{1,23},{1,24},{1,25},{1,26},{1,27},{1,28},{1,29},{1,30},{1,31},{2,1},{2,2},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11},{2,12},{2,13},{2,14},{2,15},{2,16},{2,17},{2,18},{2,19},{2,20},{2,21},{2,22},{2,23},{2,24},{2,25},{2,26},{2,27},{2,28},{3,1},{3,2},{3,3},{3,4},{3,5},{3,6},{3,7},{3,8},{3,9},{3,10},{3,11},{3,12},{3,13},{3,14},{3,15},{3,16},{3,17},{3,18},{3,19},{3,20},{3,21},{3,22},{3,23},{3,24},{3,25},{3,26},{3,27},{3,28},{3,29},{3,30},{3,31},{4,1},{4,2},{4,3},{4,4},{4,5},{4,6},{4,7},{4,8},{4,9},{4,10},{4,11},{4,12},{4,13},{4,14},{4,15},{4,16},{4,17},{4,18},{4,19},{4,20},{4,21},{4,22},{4,23},{4,24},{4,25},{4,26},{4,27},{4,28},{4,29},{4,30},{5,1},{5,2},{5,3},{5,4},{5,5},{5,6},{5,7},{5,8},{5,9},{5,10},{5,11},{5,12},{5,13},{5,14},{5,15},{5,16},{5,17},{5,18},{5,19},{5,20},{5,21},{5,22},{5,23},{5,24},{5,25},{5,26},{5,27},{5,28},{5,29},{5,30},{5,31},{6,1},{6,2},{6,3},{6,4},{6,5},{6,6},{6,7},{6,8},{6,9},{6,10},{6,11},{6,12},{6,13},{6,14},{6,15},{6,16},{6,17},{6,18},{6,19},{6,20},{6,21},{6,22},{6,23},{6,24},{6,25},{6,26},{6,27},{6,28},{6,29},{6,30},{7,1},{7,2},{7,3},{7,4},{7,5},{7,6},{7,7},{7,8},{7,9},{7,10},{7,11},{7,12},{7,13},{7,14},{7,15},{7,16},{7,17},{7,18},{7,19},{7,20},{7,21},{7,22},{7,23},{7,24},{7,25},{7,26},{7,27},{7,28},{7,29},{7,30},{7,31},{8,1},{8,2},{8,3},{8,4},{8,5},{8,6},{8,7},{8,8},{8,9},{8,10},{8,11},{8,12},{8,13},{8,14},{8,15},{8,16},{8,17},{8,18},{8,19},{8,20},{8,21},{8,22},{8,23},{8,24},{8,25},{8,26},{8,27},{8,28},{8,29},{8,30},{8,31},{9,1},{9,2},{9,3},{9,4},{9,5},{9,6},{9,7},{9,8},{9,9},{9,10},{9,11},{9,12},{9,13},{9,14},{9,15},{9,16},{9,17},{9,18},{9,19},{9,20},{9,21},{9,22},{9,23},{9,24},{9,25},{9,26},{9,27},{9,28},{9,29},{9,30},{10,1},{10,2},{10,3},{10,4},{10,5},{10,6},{10,7},{10,8},{10,9},{10,10},{10,11},{10,12},{10,13},{10,14},{10,15},{10,16},{10,17},{10,18},{10,19},{10,20},{10,21},{10,22},{10,23},{10,24},{10,25},{10,26},{10,27},{10,28},{10,29},{10,30},{10,31},{11,1},{11,2},{11,3},{11,4},{11,5},{11,6},{11,7},{11,8},{11,9},{11,10},{11,11},{11,12},{11,13},{11,14},{11,15},{11,16},{11,17},{11,18},{11,19},{11,20},{11,21},{11,22},{11,23},{11,24},{11,25},{11,26},{11,27},{11,28},{11,29},{11,30},{12,1},{12,2},{12,3},{12,4},{12,5},{12,6},{12,7},{12,8},{12,9},{12,10},{12,11},{12,12},{12,13},{12,14},{12,15},{12,16},{12,17},{12,18},{12,19},{12,20},{12,21}}[[Mod[Round[(365/12)t],365]+1]]]

presenceSoleil[λ_]:=TableForm[Table[If[coucher[declinaison[mois],λ]-lever[declinaison[mois],λ]≥0,{date[mois], ecrisHeure[((lever[declinaison[mois],λ])/h)],ecrisHeure[((coucher[declinaison[mois],λ])/h)]},{date[mois],"-","-"}],{mois,0,12}],TableHeadings->{None,{"{Mois, jour}","Lever","Coucher"}},TableSpacing->{Automatic,8}]

courbeJournaliere[δ_,λ_]:=ParametricPlot[g[t,δ,λ],{t,lever[δ,λ]+10ϵ,coucher[δ,λ]-10ϵ}]

Clear[familleCourbes];
familleCourbes[λ_]:=Module[{decl,visibleQ},
		decl=Table[declinaison[mois],{mois,0,6}];
		visibleQ[δ_]:=N[coucher[δ,λ]-lever[δ,λ]]>2 ϵ;
		decl=Select[decl,visibleQ];
		Table[courbeJournaliere[decl[[k]],λ],{k,1,Length[decl]}]]

§ 3.2 Lignes horaires

A l'heure du lever et du coucher du soleil, l'ombre du gnomon a une longueur infinie et le point
g[t, δ, λ] correspondant est situé à l'horizon. Il y a deux sortes de lignes horaires : les segments et les demi-droites (voir § 4.1).

Chez nous, à 5h, le soleil ne se lève que pendant une partie de l'année. Pour chaque valeur de t,
pour les δ ≥ -δmax, il existe une borne inférieure pour δ

Cos[t] < Tan[δ] Tan[λ]
Tan[δ] > ((Cos[t] )/(Tan[λ]))
	δ > ArcTan[((Cos[t])/(Tan[λ]))]

δInf[t_,λ_]:=ArcTan[((Cos[t])/(Tan[λ]))]+ϵ

(* Définiton de lignesHoraires : voir § 4.1 *)

Clear[textesHoraires];
textesHoraires[λ_]:=Graphics[{Table[If[δInf[i*h,λ]<-δmax,Text[ToString[i],g[i*h,-δmax,λ],{0,-1}],Text[ToString[i],g[i*h,δmax,λ],{0,1}]],{i,Ceiling[((lever[δmax,λ]+ϵ)/h)],Floor[((coucher[δmax,λ]-ϵ)/h)]}],{Thickness[0.005],Point[{0,0}],Point[{0,-Cot[λ]}]}}]/;Abs[λ]>ϵ

textesHoraires[λ_]:=Graphics[{Table[If[δInf[i*h,λ]<-δmax,Text[ToString[i],g[i*h,-δmax,λ],{0,-1}],Text[ToString[i],g[i*h,δmax,λ],{0,1}]],{i,Ceiling[((lever[δmax,λ]+ϵ)/h)],Floor[((coucher[δmax,λ]-ϵ)/h)]}]}]

§ 4 Temps du soleil vrai local
	Réduction aux coordonnées cartésiennes

eq1=u==FullSimplify[g[t,δ,λ][[1]]]

eq2=v==FullSimplify[g[t,δ,λ][[2]]]

§ 4.1 Lignes horaires

Le calcul permet de prouver que les lignes horaires sont des droites (ou des parties de droites).
De plus, toutes ces droites (c'est-à-dire les prolongements des lignes horaires) passent par un même point qui est {0, -cot(λ)}.

Pour éliminer le paramètre δ, tirons tan(δ) de la première équation puis substituons dans la deuxième :

subst=Solve[eq1,Tan[δ]]

Simplify[eq2/.{Sin[δ]->((Tan[δ])/(Sqrt[1+((Tan[δ])^2)])),Cos[δ]->(1/(Sqrt[1+((Tan[δ])^2)]))}/.subst[[1]],Trig->True]

En un lieu donné (λ = constant) et pour une heure donnée (t = constant), v est une fonction affine de u. Donc la ligne horaire est une droite.
L'ordonnée à l'origine est indépendante de t et vaut -Cot[λ]

Clear[lignesHoraires];lignesHoraires[λ_]:=Graphics[{Thickness[0.003],Table[Line[{g[i*h,δmax,λ],g[i*h,Max[δInf[i*h,λ],-δmax],λ]}],{i,Ceiling[((lever[δmax,λ]+ϵ)/h)],Floor[((coucher[δmax,λ]-ϵ)/h)]}]}]

§ 4.2 Courbes journalières

Premier cas : si δ = 0, la ligne horaire est la droite horizontale v = Tan[λ]

g[t,0,λ]

A l'équinoxe, il s'agit d'une droite qui passe par le point {0, tan(λ)}

Deuxième cas : si δ ≠ 0 et (λ+δ-(π/2)) (λ-δ-(π/2)) ≠0, alors il s'agit d'une conique à centre

Pour éliminer le paramètre t, tirons cos(t) de la deuxième équation et remplaçons dans le carré de la première:

subst=Solve[eq2,Cos[t]]

Les substitutions {Cot[t]->((Cos[t])/(Sqrt[1-((Cos[t])^2)])),Csc[t]->(1/(Sqrt[1-((Cos[t])^2)]))} et  {Cot[t]->((Cos[t])/(-(Sqrt[1-((Cos[t])^2)]))),Csc[t]->(1/(-(Sqrt[1-((Cos[t])^2)])))} conduisent à la même équation (sans nécessité de distinguer des cas):

eq1Carre=Simplify[Apply[Equal,((Apply[List,eq1])^2)]/.{Cot[t]->((Cos[t])/(Sqrt[1-((Cos[t])^2)])),Csc[t]->(1/(Sqrt[1-((Cos[t])^2)]))}/.subst[[1]],Trig->True]

Expand[(1+(v^2)) Cos[2 δ]+(-1+(v^2)) Cos[2 λ]-2 v Sin[2 λ]]

Pour déterminer le centre de la conique (s'il existe), effectuons un changement de variable selon le principe suivant :

Dans        p (v^2)- 2 q v+r           substituons          v=v1+(q/p) .
On obtient                                     -((q^2)/p)+r+p (v1^2)
Dans notre exemple,   p= Cos[2 δ]+Cos[2 λ],    q=Sin[2 λ] ,      r=Cos[2 δ]-Cos[2 λ]

centre={0,TrigFactor[((Sin[2 λ])/(Cos[2 δ]+Cos[2 λ]))]}

Lorsque (λ+δ-(π/2)) (λ-δ-(π/2)) ≠0, il s'agit d'une conique à centre.

Clear[v1];v=v1+centre[[2]];

Simplify[eq1Carre, Trig->True]

Comme voulu, il n'y a plus de terme linéaire en (Subscript[v, 1]).
Poursuivons la réduction de la conique en la mettant sous la forme (u^2) = p ((Subscript[v, 1])^2) + q

q=TrigFactor[FullSimplify[eq1Carre[[2]]/.{v1->0}]]

p=TrigFactor[FullSimplify[((eq1Carre[[2]]-q)/(v1^2))]]

Cas 2 a)   Lorsque δ ≠ 0 et (λ+δ-(π/2)) (λ-δ-(π/2))>0, il s'agit d'une hyperbole

Montrons que, lorsque p > 0 et q < 0, alors la conique est une hyperbole.

b=(Sqrt[-q])

a=(Sqrt[TrigFactor[FullSimplify[((-q)/p)]]])

Vérifions que le résultat obtenu soit correct:

Clear[v]; v1=v-centre[[2]];

(b^2)((1/(a^2)) (v1^2)-1)

Simplify[(b^2)((1/(a^2)) (v1^2)-1) -eq1Carre[[2]],Trig->True]

Cas 2 b)   Lorsque δ ≠ 0 et (λ+δ-(π/2)) (λ-δ-(π/2))<0, il s'agit d'une ellipse

Montrons que, lorsque p < 0 et q > 0, alors la conique est une ellipse.

b=(Sqrt[q])

a=(Sqrt[TrigFactor[FullSimplify[(q/(-p))]]])

Vérifions que le résultat obtenu soit correct:

(b^2)(-(1/(a^2)) (v1^2)+1)

Simplify[(b^2)(-(1/(a^2)) (v1^2)+1) -eq1Carre[[2]],Trig->True]

Dans le cas particulier où λ = (π/2), les courbes journalières sont des cercles de rayon Cot[δ].

Troisième cas : si δ ≠ 0 et (λ+δ-(π/2)) (λ-δ-(π/2)) = 0, alors la conique est une parabole

Clear[v]

eq1=(u^2)==Limit[eq1Carre[[2]],δ->(π/2)-λ]

eq2=(u^2)==Limit[eq1Carre[[2]],δ->-(π/2)+λ]

Solve[eq1,v]

§ 5 Temps du soleil vrai local
	Représentations graphiques

Clear[cadran];
cadran[λ_]:=Show[lignesHoraires[(π/2)],familleCourbes[(π/2)],AxesLabel->{"?","?"},FrameLabel->{"Latitude 90 °",None,None,None},DisplayFunction->$DisplayFunction]/;Abs[λ-(π/2.)]<ϵ

cadran[λ_]:=Show[lignesHoraires[λ],textesHoraires[λ],familleCourbes[λ],AxesLabel->{"E","N"},FrameLabel->{StringJoin["Latitude ",ToString[N[λ (180/π),4]]," °"],None,None,None},DisplayFunction->$DisplayFunction]

Temps du soleil vrai local à l'équateur

cadran[0]

presenceSoleil[0]

Temps du soleil vrai local sur le tropique du Cancer

cadran[δmax]

presenceSoleil[δmax]

Temps du soleil vrai local à Bulle

cadran[46.6°]

presenceSoleil[46.6°]

Temps du soleil vrai local sur le cercle polaire

cadran[90°-δmax]

presenceSoleil[90°-δmax]

Temps du soleil vrai local à la latitude 80° Nord

cadran[80°]

presenceSoleil[80°]

Temps du soleil vrai local au pôle Nord

cadran[90°]

presenceSoleil[90°]

§ 6 Temps du soleil vrai du fuseau horaire
	Correction de longitude

L'heure dont nous parlons ici s'appelle l'heure du soleil vrai au méridien de référence que nous noterons (Subscript[t, ref]).

L'heure de l'Europe centrale, qui est notre heure légale d'hiver, se réfère au temps à la longitude de 15°. Bulle est à la longitude de 7°. Il faut donc effectuer une correction de longitude de 8°. Lorsqu'il est midi ((Subscript[t, ref])=12 h), cela signifie que le soleil passe au méridien de longitude 15°, c'est-à-dire à Prague ou sur L'Etna.

L'heure d'été se réfère à la longitude de 30°. Lorsqu'il est midi ((Subscript[t, ref])=12 h), cela signifie que le soleil passe au méridien de longitude 30° (Saint-Pertersbourg, Kiev, Alexandrie). Pour Bulle, la correction de longitude est de 23°.

(Subscript[Δ, long])=(Subscript[long, ref]) - (Subscript[long, loc])

On appelle "correction horaire" la quantité

Δt=t - (Subscript[t, ref]) = (Subscript[long, loc])- (Subscript[long, ref]) = -(Subscript[Δ, long])

Chez nous, Δt = - 32 min en hiver et Δt = - 1 h 32 min en été. Dans les programmes ci-joint, nous utilisons les deux formules

t = (Subscript[t, ref])-(Subscript[Δ, long])
(Subscript[t, ref])=t + (Subscript[Δ, long])

lignesHoraires[λ_,Δlong_]:=Graphics[{Thickness[0.003],Table[Line[{g[i*h-Δlong,δmax,λ],g[i*h-Δlong,Max[δInf[i*h-Δlong,λ],-δmax],λ]}],{i,Ceiling[((lever[δmax,λ]+ϵ+Δlong)/h)],Floor[((coucher[δmax,λ]-ϵ+Δlong)/h)]}]}]

textesHoraires[λ_,Δlong_]:=Graphics[{Table[If[δInf[i*h-Δlong,λ]<-δmax,Text[ToString[i],g[i*h-Δlong,-δmax,λ],{0,-1}],Text[ToString[i],g[i*h-Δlong,δmax,λ],{0,1}]],{i,Ceiling[((lever[δmax,λ]+ϵ+Δlong)/h)],Floor[((coucher[δmax,λ]-ϵ+Δlong)/h)]}],{Thickness[0.005],Point[{0,0}],Point[{0,-Cot[λ]}]}}]/;Abs[λ]>ϵ

cadran[λ_,Δlong_]:=Show[lignesHoraires[λ,Δlong],textesHoraires[λ,Δlong],familleCourbes[λ],AxesLabel->{"E","N"},FrameLabel->{StringJoin["Latitude ",ToString[N[λ (180/π),4]]," °. Correction de longitude ",ToString[N[Δlong (180/π),4]]," °"],None,None,None},DisplayFunction->$DisplayFunction]

presenceSoleil[λ_,Δlong_]:=TableForm[Table[If[coucher[declinaison[mois],λ]-lever[declinaison[mois],λ]≥0,{date[mois],ecrisHeure[((lever[declinaison[mois],λ]+Δlong)/h)],ecrisHeure[((coucher[declinaison[mois],λ]+Δlong)/h)]},{date[mois],"-","-"}],{mois,0,12}],TableHeadings->{None,{"{Mois, jour}","Lever","Coucher"}},TableSpacing->{Automatic,8}]

Bulle, heure du soleil vrai à la longitude de 15°

cadran[46.6°,8°]

presenceSoleil[46.6°,8.°]

Bulle, heure du soleil vrai à la longitude de 30°

cadran[46.6°,23.°]

presenceSoleil[46.6°,23.°]

§ 7 Temps du soleil moyen

Dans sa course autour du soleil, la terre ne tourne pas à une vitesse angulaire constante.

La trajectoire de la terre est une ellipse. Lorsque la terre est plus proche du soleil, sa vitesse est plus grande que lorsqu'elle en est plus éloignée. Plus précisément, la relation est donnée par la loi des aires de Kepler.

Les jours ont une durée variable. Pour définir les unités de temps,  on effectue une division uniforme de l'année. Le temps solaire moyen est le temps obtenu par un soleil fictif qui tournerait à vitesse angulaire constante.

L'écart entre le temps moyen et l'heure solaire vraie s'appelle "équation du temps". Au lieu de référence, on a, selon les conventions anglo-saxonnes

eqTemps=(Subscript[t, ref])-(Subscript[t, moyen])

(les français utilisent les signes opposés). Les valeurs de l'équations du temps varient de -14 min le 12 février à + 16 min le 3 novembre.

(Subscript[t, moyen]) =(Subscript[t, ref]) - eqTemps = t + (Subscript[Δ, long]) - eqTemps
t = (Subscript[t, ref])-(Subscript[Δ, long]) = (Subscript[t, moyen]) - (Subscript[Δ, long]) + eqTemps

Clear[eqTemps];eqTemps[t_]=Module[{tabelle,ω},tabelle=Transpose[{Range[0,12-(1/2),(1/2)],{1+(28/60),-(5+(44/60)),-(11+(16/60)),-(14+(7/60)),-(13+(44/60)),-(10+(54/60)),-(6+(41/60)),-(2+(13/60)),1+(40/60),3+(34/60),3+(23/60),1+(18/60),-(1+(49/60)),-(4+(56/60)),-(6+(22/60)),-(5+(43/60)),-(2+(53/60)),1+(56/60),7+(13/60),12+(6/60),15+(28/60),16+(20/60),13+(53/60),8+(35/60)}}];ω=((2 π)/12);(π/(12*60))Fit[tabelle,{1,Cos[ω t],Sin[ω t],Cos[2 ω t],Sin[2 ω t],Cos[3 ω t],Sin[3 ω t]},t]];

Plot[((eqTemps[mois] 60)/h),{mois,0,12},PlotRange->{{0,12},{-20,20}},AspectRatio->0.8,AxesLabel->{"Mois","Minutes"},DisplayFunction->$DisplayFunction]

Dans le ciel, le soleil effectue en un an une boucle fermée. Pour l'équation du temps, cela donne le graphique suivant dans lequel la ligne fine est parcourue de gauche à droite et la ligne plus épaisse de droite à gauche.

Show[Plot[{((60 eqTemps[x])/h),((60 eqTemps[12-x])/h)},{x,0,6},PlotRange->{{0,6},{-20,20}},AspectRatio->0.8`,PlotStyle->{Thickness[0.001`],Thickness[0.003`]}],DisplayFunction->$DisplayFunction]

courbesHoraires[λ_,Δlong_]:={Table[ParametricPlot[g[i*h-Δlong+eqTemps[mois],declinaison[mois],λ],{mois,0,6},PlotDivision->30.,PlotStyle->Thickness[0.001]],{i,9,16}],Table[ParametricPlot[g[i*h-Δlong+eqTemps[mois],declinaison[mois],λ],{mois,6,12},PlotDivision->30.,PlotStyle->Thickness[0.003]],{i,9,16}]}

L'équation de temps, insérée dans l'horaire et traduite en termes de position, a pour effet de remplacer chaque droite horaire par une courbe fermée appelée analemme (voir fig. suivante).

Convention:
	les courbes horaires fines correspondent à la première partie de l'année
		(du 22 décembre au 22 juin),
	les courbes horaires épaisses correspondent à la deuxième partie de l'année
		(du 22 juin au 22 décembre),
	la ligne horaire du temps solaire vrai de référence est traitillée.

lignesHoraires[λ_,Δlong_]:=Graphics[{Dashing[{0.01,0.01}],Table[Line[{g[i*h-Δlong,δmax,λ],g[i*h-Δlong,Max[δInf[i*h-Δlong,λ],-δmax],λ]}],{i,Ceiling[((lever[δmax,λ]+ϵ+Δlong)/h)],Floor[((coucher[δmax,λ]-ϵ+Δlong)/h)]}]}]

cadranTmoyen[λ_,Δlong_]:=Show[courbesHoraires[λ,Δlong],lignesHoraires[λ,Δlong],textesHoraires[λ,Δlong],familleCourbes[λ],AxesLabel->{"E","N"},FrameLabel->{StringJoin["Latitude ",ToString[N[λ (180/π),4]]," °. Correction de longitude ",ToString[N[Δlong (180/π),4]]," °"],None,None,None},DisplayFunction->$DisplayFunction]

presenceSoleilTmoyen[λ_,Δlong_]:=TableForm[Table[If[coucher[declinaison[mois],λ]-lever[declinaison[mois],λ]≥0,{date[mois], ecrisHeure[(1/h)(lever[declinaison[mois],λ]+Δlong-eqTemps[mois]-demiDiametreSoleil)],ecrisHeure[(1/h)(coucher[declinaison[mois],λ]+Δlong-eqTemps[mois]+demiDiametreSoleil)]},{date[mois],"-","-"}],{mois,0,12}],TableHeadings->{None,{"{Mois, jour}","Lever","Coucher"}},TableSpacing->{Automatic,8}]

courbesHoraires[λ_,Δlong_]:={Table[ParametricPlot[g[i*h-Δlong+eqTemps[mois],declinaison[mois],λ],{mois,0,6},PlotStyle->Thickness[0.001]],{i,10,16}],Table[ParametricPlot[g[i*h-Δlong+eqTemps[mois],declinaison[mois],λ],{mois,6,12},PlotStyle->Thickness[0.003]],{i,10,16}]}

Bulle, heure d'hiver (temps du soleil moyen à la longitude de 15°)

cadranTmoyen[46.6°,8.°]

presenceSoleilTmoyen[46.6°,8.°]

Bulle, heure d'été (temps du soleil moyen à la longitude de 30°)

cadranTmoyen[46.6°,23.°]

presenceSoleilTmoyen[46.6°,23.°]

Temps du soleil moyen à Zürich

presenceSoleilTmoyen[47.35°,6.5°]

presenceSoleilTmoyen[47.35°,21.5°]