Retour

heliolabe-construction.tex

Télécharger le fichier Fichier PDF
\documentclass[svgnames,a4paper,10pt]{article}
\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage{bera}
\usepackage[french]{babel}
\usepackage[margin=2.5cm]{geometry}
\usepackage{shortvrb}
\usepackage[dvipsnames]{xcolor}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{pstricks-add}
\usepackage{multicol}
\usepackage{xint-meeus}
\pstheader{heliolabe.pro}
 
\input{sty-jfbu}
\input{pst-heliolabe}
 
\MakeShortVerb{\|}
\newcommand\ft[1]{\xintfloatexpr #1\relax}
\hypersetup{
 colorlinks=true
}
 
%% ========================================================================== %%
\begin{document}
% \xintverbosetrue
\parindent0pt
\setlength{\parskip}{1ex}
% pour les short verb |...|
\def\MicroFont
    {\ttfamily\color[named]{DarkCyan}\makestarlowast\makequotesstraight}
% pour les everbatim
\def\MacroFont {\ttfamily\color[named]{Olive}}
% Note 1 : everbatim fait \makestarlowast\makequotesstraight en interne
%          alors que pour les short verb il faut l'ajouter via \MicroFont
% Note 2 : everbatim fait un \small via \def\everbatimtop{\MacroFont\small}
 
{\Large Construction d'un \textbf{héliolabe}}\\
\rule{\linewidth}{1pt}\\
{\itshape L'équipe motivée -- \today}
\medskip
 
 
\textbf{Objectif}: Construire, avec \textbf{xint} et \textbf{PSTricks},
un \textbf{héliolabe} conforme à la description donnée dans le document:
\begin{center}
\url{http://clea-astro.eu/archives/cahiers-clairaut/CLEA_CahiersClairaut_018_07.pdf}
(\emph{Cahiers Clairaut n°18}).
\end{center}
 
Quelques définitions pour commencer...
\begin{everbatim}
\xintdeffloatfunc dms2d(d,m,s) := d+m/60+s/3600; %  Conversion degré, minute, seconde
                                                 %  en degrés décimaux
\xintdeffloatvar ip  := dms2d(23,26,13);%           Inclinaison de l'axe polaire
\xintdeffloatvar cpg := 6/tand(45+ip/2);%           Facteur d'agrandissement dans la
                                        %           projection stéréographique
\xintdeffloatfunc rcp(phi) := cpg*tand(45-phi/2);%  Rayon du cercle correspondant à la
                                                 %  latitude phi
\xintdeffloatvar oneDay := 360/365.25;%             Un jour en degrés
% Affichage des chiffres romains
\newcommand{\RNum}[1]{\uppercase\expandafter{\romannumeral #1\relax}}
\end{everbatim}
 
L'héliolabe construit dans ce document vaut pour les lieux de latitude +48°.
\begin{everbatim*}
\xintdeffloatvar phi0 := 48;%   Latitude de Stuttgart
\end{everbatim*}
 
\section{Le tympan}
 
Tracé des principaux cercles (tropiques, équateur et cercle polaire
arctique) et du cercle gradué à l'extérieur.
 
Après validation, le codage de cette partie du tympan est encapsulé dans
une macro |\tympanA|, cela évite d'avoir à reproduire toutes ces lignes
dans les figures suivantes.
 
\begin{everbatim*}
\begin{center}
\begin{pspicture}(-7.5,-7.5)(7.5,7.5)
  \psset{linecolor=DarkSlateGray}
  \pscircle(0,0){6}                        % Le tropique du capricorne
  \pscircle(0,0){\ftf4{rcp(0)}}            % L'équateur
  \pscircle(0,0){\ftf4{rcp(ip)}}           % Le tropique du cancer
  \pscircle(0,0){\ftf4{rcp(90-ip)}}        % Le cercle polaire arctique
  % Cercle gradué extérieur, pas : 15 minutes
  \multido{\rB=0+3.75}{96}{%
    \psline(\ftf4{6};\rB)(\ftf4{6+0.3};\rB)}
  \multido{\rB=0+15}{24}{%
    \psline[linewidth=1.25pt](\ftf4{6};\rB)(\ftf4{6+0.3};\rB)}
  \multido{\rB=-105+-15,\n=1+1}{12}{%
    \rput{!\rB\space 90 add}(\ftf4{6+0.65};\rB){\bfseries\RNum{\n}}}
  \multido{\rB=75+-15,\n=1+1}{12}{%
    \rput{!\rB\space 90 add}(\ftf4{6+0.65};\rB){\bfseries\RNum{\n}}}
  \pscircle(0,0){\ftf4{6+1}}
  \TympanCerclesLabels%
\end{pspicture}
\end{center}
\end{everbatim*}
\medskip
 
La macro |\TympanCerclesLabels| utilise du code \emph{PostScript} (fichier
|heliolabe.pro|) pour inscrire les noms des trois cercles médians.
 
Passons maintenant au tracé des parallèles de l'hémisphère local d'un
observateur situé à une latitude |phi0|. Ce sont des cercles puisque la
projection est \emph{stéréographique}. Il suffira donc de prendre deux
points diamétralement opposés sur le même méridien céleste, de les
projeter et, enfin, de considérer le milieu et la demi-distance qui les
sépare.
 
\begin{everbatim}
\xintdeffloatfunc XYZ(p,h,a) := cosd(p)sind(h)+sind(p)cosd(h)cosd(a),%
                              cosd(h)sind(a),%
                              sind(p)sind(h)-cosd(p)cosd(h)cosd(a);%
\xintdeffloatfunc aatan2d(x,y) := (x==y)?{45}{atan2d(x,y)};%
\xintdeffloatfunc toLonLat(x,y,z) := atan2d(y,x),asind(z);%
\xintdeffloatfunc LonLat(p,h,a) := toLonLat(XYZ(p,h,a));
\end{everbatim}
\medskip
 
|XYZ| calcule les coordonnées $x, y, z$ (sphère céleste) d'un point dont
la hauteur et l'azimut sont |h| et |a| dans la sphère locale de latitude
|p|. |LonLat| fournit la longitude et la latitude célestes en retour.
Ici, |aatan2d| est un détournement de |atan2d| pour éviter le cas
singulier |x=y=0|.
 
La macro suivante va calculer l'étendue des angles interceptés
par le \emph{tropique du capricorne}.
\begin{everbatim}
\def\Arc#1{
 \xintdeffloatvar P1,P2 := rcp(LonLat(phi0,#1,0)[1]),rcp(LonLat(phi0,#1,180)[1]);%
 \xintdeffloatvar C,R := (#1<phi0)?{0.5(P1-P2),0.5(P1+P2)}{0.5(P2+P1),0.5abs(P2-P1)};%
 % Pour trouver les angles interceptés : Al Kashi !
 \xintdeffloatvar A := (C+R>6)?{acosd((sqr(C)+sqr(R)-36)/(2R*C))-90}{90};%
 \xintdeffloatvar B := -180-A;%
}
\end{everbatim}
\medskip
 
Petits calculs pour la construction des arcs du vertical est-ouest.
\begin{everbatim*}
\xintdeffloatvar lo := atan2d(sind(170),-cosd(phi0)cosd(170));%
\xintdeffloatvar bo := asind(-sind(phi0)cosd(170));%
\xintdeffloatvar pox,poy := rcp(bo)sind(lo),rcp(bo)cosd(lo);%
\xintdeffloatvar yh,rh := cpg*tand(phi0),0.5(rcp(phi0)+rcp(-phi0));%
\xintdeffloatvar ao1,ao2 := atan2d(yh,rcp(0)),atan2d(yh+poy,pox);%
\ftf4{lo} \ftf4{bo} \ftf4{pox} \ftf4{poy}
\end{everbatim*}
 
 
\begin{everbatim*}
\begin{center}
\begin{pspicture}(-8,-8)(8,8)
  \tympanA%
  \psset{linecolor=LightSteelBlue}
  \psline(-6,0)(6,0)  %  Ligne Est - Ouest
  % Ligne méridienne
  \psline(0,-6)(0,\ftf4{rcp(phi0+10)})
  \psline(0,\ftf4{rcp(phi0-10)})(0,6)
  \psdot[dotsize=4pt](0,\ftf4{rcp(phi0)})% Zenith
  % Les deux arcs du vertical est-ouest
  \psarc(0,\ftf4{-yh}){\ftf4{rh}}{\ftf4{ao1}}{\ftf4{ao2}}
  \psarc(0,\ftf4{-yh}){\ftf4{rh}}{\ftf4{180-ao2}}{\ftf4{180-ao1}}
  % Cercles de hauteur
  \multido{\i=0+10}{9}{\Arc{\i}%
    \psarcn(0,\ftf4{C}){\ftf4{R}}{\ftf4{A}}{\ftf4{B}}
    \rput(0,\ftf4{C-R}){\footnotesize\i°}
  }
  \multido{\i=5+10}{7}{\Arc{\i}%
    \psarcn[linestyle=dashed](0,\ftf4{C}){\ftf4{R}}{\ftf4{A}}{\ftf4{B}}
  }
  \TympanEOLabels%
\end{pspicture}
\end{center}
\end{everbatim*}
\medskip
 
Le code ajouté ici dans la description de la figure est encapsulé dans la
macro |\tympanB|.
 
%% 23/06/2021 11:16:29
\section{L'écliptique}
 
C'est un cercle tangent aux cercles des tropiques qui sera mobile, en
rotation autour du centre du tympan. Nous allons, pour commencer, le
construire en position basse. Nous lui donnerons une certaine épaisseur
dans laquelle nous logerons les graduations journalières.
 
Calcul de l'ordonnée et du centre de l'écliptique.
\begin{everbatim}
\xintdeffloatvar ye,re := (rcp(ip)-rcp(-ip))/2,(rcp(ip)+rcp(-ip))/2;%
\end{everbatim}
\medskip
 
Le calcul des extrémités des graduations du cercle écliptique prend un
peu de temps. Elles sont calculées et sauvegardées dans un fichier
|2021extgrad.xint|. Pour les compilations suivantes, les données
sauvegardées seront rechargées, c'est plus rapide...
\begin{everbatim}
\LoadGraduations%
\end{everbatim}
\LoadGraduations%
\medskip 
 
\psset{unit=1cm}
\begin{everbatim*}
\begin{pspicture}(-7.5,-7.5)(7.5,7.5)%
  \psdot[linecolor=Tomato,dotsize=5pt](0,0)% Centre du tympan
  \tympanB% Pour contrôler le positionnement
  \tympanA% 
  \pscircle[linewidth=0.6cm,linecolor=LightGoldenrod](0,\ftf4{ye}){\ftf4{re-0.3}}%
  \pscircle[linewidth=0.5pt,linecolor=DimGray](0,\ftf4{ye}){\ftf4{re}}%
  \pscircle[linewidth=0.5pt,linecolor=DimGray](0,\ftf4{ye}){\ftf4{re-0.6}}%
  \pscircle[linewidth=0.5pt,linecolor=DimGray](0,\ftf4{ye}){\ftf4{re-0.3}}%
  \multido{\i=0+1}{365}{%
    \psline[linewidth=0.5pt,linecolor=DimGray](\ftf4{extA(\i)})(\ftf4{extB(\i)})%
  }%
  \InitialiseN%
  \multido{\iA=1+1}{12}{%
   \psline[linewidth=0.75pt,linecolor=DimGray](\ftf4{extA(N)})(\ftf4{extC(N)})%
   \multido{\iB=5+5}{5}{%
    \psline[linewidth=0.75pt,linecolor=DimGray](\ftf4{extA(N+\iB)})(\ftf4{extB(N+\iB)})%
   }
   \AvanceN{\iA}
  }
  \EcliptiqueMoisLabels%
\end{pspicture}
\end{everbatim*}
 
C'est à peu près au point, on peut faire tourner le cercle écliptique
après avoir encapsulé le code ajouté... Au passage on ajoute un peu de
transparence et une couche pour \emph{marquer les saisons}.
 
\begin{everbatim}
\def\saisons{%
  \psset{linecolor=red,arrows=->,linewidth=2pt}
  \psline(0,\ftf4{rcp(ip)-1})(0,\ftf4{rcp(ip)-0.5})%
  \uput*[-90](0,\ftf4{rcp(ip)-1}){\textcolor{red}{été}}%
  \psline(0,\ftf4{-6+1})(0,\ftf4{-6+0.5})%
  \uput*[90](0,\ftf4{-6+1}){\textcolor{red}{hiver}}%
  \psline(\ftf4{-rcp(0)+1},0)(\ftf4{-rcp(0)+0.5},0)%
  \uput*[0](\ftf4{-rcp(0)+1},0){\textcolor{red}{automne}}%
  \psline(\ftf4{rcp(0)-1},0)(\ftf4{rcp(0)-0.5},0)%
  \uput*[180](\ftf4{rcp(0)-1},0){\textcolor{red}{printemps}}%
}
\end{everbatim}
\medskip
 
\begin{everbatim*}
\begin{pspicture}(-7.5,-7.5)(7.5,7.5)%
  \psdot[linecolor=Tomato,dotsize=5pt](0,0)% Centre du tympan
  \tympanB\tympanA% 
  \psrotate(0,0){35}{\ecliptique\saisons}%
\end{pspicture}
\end{everbatim*}
 
\section{L'alidade}
 
Nous allons la construire en position verticale.
\begin{everbatim*}
\begin{pspicture}(-7.5,-7.5)(7.5,7.5)%
  \psdot[linecolor=Tomato,dotsize=5pt](0,0)%
  \tympanB%
  \tympanA% 
  \pscustom[fillcolor=MediumTurquoise,fillstyle=solid,opacity=0.35]{%
    \psline(0,1)(0,\ftf4{6+0.4})%
    \psarc(0,0){0.7}{90}{180}%
    \psline(-0.7,-1)(-0.7,\ftf4{-6+0.3})%
    \psarc(\ftf4{0.35sqrt(2)},\ftf4{-6+0.3+0.35sqrt(2)}){1.2935}{202.5}{247.5}
    \psline(0,\ftf4{-6-0.4})(0,-1)%
    \psarc(0,0){0.7}{270}{0}%
    \psline(0.7,0)(0.7,\ftf4{6-0.3})%
    \psarc(-\ftf4{0.35sqrt(2)},\ftf4{6-0.3-0.35sqrt(2)}){1.2935}{22.5}{67.5}
  }%
  \multido{\i=-20+5}{9}{%
    \psline[linecolor=black,linewidth=0.4pt](0,\ftf4{rcp(\i)})(0.15,\ftf4{rcp(\i)})%
    \rput[l](0.2,\ftf4{rcp(\i)}){\footnotesize\ftf0{abs(\i)}°}%
  }%
\end{pspicture}
\end{everbatim*}
\medskip
 
Extra ! On encapsule et on fait tourner tout cela pour le plaisir des yeux !
 
\begin{everbatim*}
\begin{pspicture}(-7.5,-7.5)(7.5,7.5)%
  \psdot[linecolor=Tomato,dotsize=5pt](0,0)% Centre du tympan
  \tympanB\tympanA%
  \psrotate(0,0){35}{\ecliptique}%
  \psrotate(0,0){-14}{\alidade}%
\end{pspicture}
\end{everbatim*}
 
Maintenant que tout est prêt, les macros, constantes et fonctions
\textbf{xint} ont été déplacées dans le fichier |pst-heliolabe.tex|; il
ne reste plus qu'à montrer des usages.
 
\end{document}