\subsection{Le module \emph{luadraw\_spherical}} Ce module permet de dessiner un certain nombre d'objets sur une sphère (comme par exemple des cercles, des triangles sphériques, \ldots) sans avoir à gérer à la main les parties visibles ou non visibles. Le dessin se fait en trois temps: \begin{enumerate} \item On définit les caractéristiques de la sphère (centre, rayon, couleur,...) \item On définit les objets à ajouter dans la scène, grâce à des méthodes dédiées. \item On affiche le tout avec la méthode \cmd{g:Dspherical()}. \end{enumerate} Bien sûr, toutes les méthodes de dessin 2D et 3D restent utilisables. \textbf{Utilisation} : ce module ajoute de nouvelles méthodes graphiques à la classe \emph{ld.graph3d}, il ne renvoie rien, les fonctions introduites par ce module vont dans l'espace de noms \emph{luadraw}. \subsubsection{Fonctions globales du module} \begin{itemize} \item \cmd{ld.sM(x, y, z)} : renvoie un point de la sphère, c'est le point $I$ de la sphère tel que la demi-droite $[O,I)$ ($O$ étant le centre de la sphère) passe par le point $A$ de coordonnées cartésiennes $(x,y,z)$. C'est le projeté du point $M(x,y,z)$ sur la sphère partant du centre. \item \cmd{ld.sM(theta, phi)} : où \argu{theta} et \argu{phi} sont des angles en degrés, renvoie un point de la sphère donc les coordonnées sphériques sont \emph{(R,theta,phi)} où $R$ est le rayon de la sphère. \item \cmd{ld.toSphere(A)} : renvoie le projeté du point \argu{A} sur la sphère partant du centre. \item \cmd{ld.interSphericalC(P1, P2)} : renvoie sous forme d'une séquence, les points d'intersection (s'ils existent) entre deux cercles appartenant à la sphère (pas nécessairement des grands cercles). Les deux arguments \argu{P1} et \argu{P2} sont deux plans, et c'est leur intersection avec la sphère qui forme les deux cercles dont on cherche l'intersection. \item \cmd{ld.interGreatC(C1,C2)} : renvoie sous forme d'une séquence, les deux points d'intersection des deux grands cercles \argu{C1} et \argu{C2} appartenant à la sphère. Un grand cercle de la sphère est une liste de deux points de la sphère \textbf{non alignés avec le centre}. \item \cmd{ld.projstereo\_Scircle(P, N, h)} : renvoie sous forme de chemin la projection stéréographique d'un cercle tracé sur la sphère. L'argument \argu{P} est un plan et c'est son intersection avec la sphère qui forme le cercle qui va être projeté. L'argument \argu{N} désigne un point de la sphère qui sera le pôle de la projection. L'argument \argu{h} est un réel qui définit le plan de la projection, ce plan est perpendiculaire à l'axe $(CN)$, où $C$ est le centre de la sphère, et passe par le point $I=C+h \frac{\vec{CN}}{CN}$, avec $h=0$ c'est le plan équatorial, avec $h=-R$, où $R$ est le rayon de la sphère, c'est le plan tangent à la sphère au pôle opposé). \item \cmd{ld.projstereo\_Sfacet(L, N, h \fac{, close})} : renvoie sous forme de chemin la projection stéréographique d'une facette sphérique (tracée sur la sphère). L'argument \argu{L} est une liste de points de la sphère qui forme les sommets de la facette, deux sommets consécutifs sont reliés par un arc de grand cercle (l'écart angulaire entre deux sommets consécutifs ne doit pas dépasser $180$ degrés). L'argument \argu{N} désigne un point de la sphère qui sera le pôle de la projection. The argument \argu{h} is a real number that defines the projection plane. This plane is perpendicular to the axis $(CN)$, where $C$ is the center of the sphere, and passes through the point $I=C+h \frac{\vec{CN}}{CN}$. With $h=0$, this is the equatorial plane; with $h=-R$, where $R$ is the radius of the sphere, this is the plane tangent to the sphere at the opposite pole. The optional argument \argu{close} indicates whether the list \argu{L} should be closed (\true by default). \end{itemize} \subsubsection{Définition de la sphère} La sphère est définie avec la méthode \cmd{g:Define\_sphere( options )}, où \argu{options} est une table permettant d'ajuster chaque paramètre. Ceux-ci sont les suivants (avec leur valeur par défaut): \begin{itemize} \item \opt{center=\val{pt3d.Origin}}, \item \opt{radius=\val{3}}, \item \opt{color=\val{"orange"}}, \item \opt{opacity=\val{1}}, \item \opt{mode=\val{ld.mBorder}}, mode d'affichage de la sphère (valeurs possibles; \val{ld.mWireframe} ou \val{ld.mGrid} ou \val{ld.mBorder}), \item \opt{edgecolor=\val{"lightgray"}}, \item \opt{edgestyle=\val{"solid"}}, \item \opt{hiddenstyle=\val{ld.Hiddenlinestyle}}, \item \opt{hiddencolor=\val{"gray"}}, \item \opt{edgewidth=\val{4}}, \item \opt{show=\true}, pour montrer ou non la sphère, \item \opt{insidelabelcolor=\val{"darkgray"}} : définit la couleur des labels dont le point d'ancrage est intérieur à la sphère. \item \opt{arrowBstyle=\val{"->"}} : type de flèche en fin de ligne \item \opt{arrowAstyle=\val{"<-"}} : type de flèche en début de ligne \item \opt{arrowABstyle=\val{"<->"}} : très peu utilisée car la plupart du temps les lignes tracées sur la sphère doivent être découpées. \item \opt{hiddendelayed=\false}: avec la valeur \false les lignes cachées sont dessinées à la fin de l'instruction \cmd{g:Dspherical()}, avec la valeur \true elles sont dessinées à la toute fin du graphique en cours ce qui peut être utile si vous avez ajouté après la sphère des éléments qui cachent une partie de celle-ci (cependant on peut modifier ce comportement localement avec l'option \opt{hidden=\true/\false}). \end{itemize} La méthode \cmd{g:Clear\_spherical()} permet de supprimer les objets qui ont été ajoutés à la scène, et remet les valeurs par défaut. \subsubsection{Ajouter un cercle : g:DScircle} \def\writeoptions{L'argument \argu{options} est une table dont les champs qui définissent les options, qui sont (avec leur valeur par défaut)}% La méthode \cmd{g:DScircle(P, options)} permet d'ajouter un cercle sur la sphère, l'argument \argu{P} est une table de la forme $\{A,n\}$ qui représente un plan (passant par $A$ et normal à $n$, deux points 3D). Le cercle est alors défini comme l'intersection de ce plan avec la sphère. \writeoptions : \begin{itemize} \item \opt{style=