\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}