Retour

doc-mp-geo.tex

Télécharger le fichier Fichier PDF
\documentclass[12pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage[pdftex,a4paper,margin=1.5cm,nohead]{geometry}
\usepackage{graphicx}
\graphicspath{{figuresdoc/}}
 
\usepackage[colorlinks=true]{hyperref}
 
\usepackage{calc,url,subfigure,amsmath}
\usepackage{mflogo,manfnt,pifont,textcomp}
\input{christ5}
\usepackage[charter]{mathdesign}
 
 
\pagestyle{empty}
 
\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{topaths}
\newsavebox{\dangerbox}
\newlength{\marge}\setlength{\marge}{7.5mm}
 
\newenvironment{Danger}{%
  \begin{lrbox}{\dangerbox}
    \begin{minipage}{\linewidth-\marge}
}
{%
\end{minipage}%
  \end{lrbox}
\tikzstyle{mybox} = [draw=blue!20, fill=red!20, very thick,
    rectangle, rounded corners, inner sep=10pt]
\par
\begin{tikzpicture}
\node [mybox] (box) {%
    \begin{minipage}[t!]{\linewidth-\marge}
        \usebox{\dangerbox}
    \end{minipage}
    };
\end{tikzpicture}
\par
}
 
\definecolor{LightRed}{rgb}{1,0.8,0.8}
 
\title{\texttt{mp-geo}}
\author{C. Poulain}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
\texttt{mp-geo} est un paquet \MP\ permettant de représenter la
Terre. Il est possible de la voir sous n'importe quel angle. La
majorité des éléments présents réellement sont présents sur les
représentations construites. Certaines projections planes sont
également présentes.
\end{abstract}
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{pagepresentation-1.png}
  \caption{Vue de l'Asie ($\theta=90$\degres; $\phi=20$\degres).}
  \label{Asie}
\end{figure}
\tableofcontents
\newpage
\begin{center}
\begin{Danger}
    Avant toutes choses, ce package nécessite de modifier les limites de \MP. {\em A priori}\footnotemark, seule la variable \verb+main_memory_size+ est à changer.\footnotemark
\end{Danger}
\end{center}
\footnotetext[1]{{\em A priori} car en cours d'élaboration, j'ai du
  également modifier \verb!buffer\_size! et \verb!path\_size!. J'ai
  même réussi à obtenir une erreur \texttt{independent variables : 33
    182 318} qui indique que l'on dépasse les limites internes de
  \MP.}
\footnotetext[2]{Sous un environnement Debian Etch et Lenny, la démarche est la suivante :
    \begin{itemize}
    \item Sous \texttt{root}, éditer le fichier \texttt{95NonPath.cnf} se
      trouvant dans le répertoire \verb!/etc/texmf/texmf.d/!;
    \item rechercher la variable \verb!main\_memory\_size! et la mettre
      à \nombre{40000000};
    \item enfin toujours sous \texttt{root}, on effectue un
      rafraîchissement : \texttt{update-texmf} puis
      \texttt{fmtutil-sys --refresh}.
    \end{itemize}
    On doit être à l'aise avec cette valeur. ;-)
}
En effet, \texttt{mp-geo} est un package gourmand en
ressources. \`A titre d'exemple, la création de l'image \ref{Asie} a duré environ 26 secondes\footnote{Les réponses données
  par la commande \texttt{time} sous Linux sont\\
  \verb!real    0m26.795s!\\
  \verb!user    0m26.590s!\\
  \verb!sys     0m0.116s!\\Tous les temps mesurés dans cette
  documentation l'ont été sur cette machine.}
sur un AMD64-2800+ équipé de 512 Mo de RAM.
\section{Introduction}
Ce package est encore {\em en développement}. Par comparaison avec le
package PStricks \verb!pst-geo!, \verb!mp-geo! comporte, dans l'état
actuel, beaucoup moins de points de tracés\footnote{Les données
  proviennent de la page \url{ftp://ftp.blm.gov/pub/gis/wdbprg.zip}
  dont l'utilisation n'est pas simple. En effet, les programmes
  disponibles dans cette archive ne fonctionnent que sous DOS ! Eh
  oui, vous avez bien lu. Cependant, heureux utilisateur de Linux,
  \verb!dosbox! est venu à mon secours pour obtenir toutes ces
  précieuses données.}
(surtout pour les lacs et rivières), certaines projections ne sont pas
présentes, la présence des villes n'est pas implantée (seule la
présence des capitales est disponible),\ldots
\par Cependant, il peut apporter des satisfactions à l'utilisateur de
\MP\ qui, à ma connaissance, ne dispose pas d'un tel package.
\\Mais, à terme, il est vrai qu'il faudrait réussir (et avoir le temps
surtout) à implémenter certaines particularités de \verb!pst-geo!. Et en
parlant de ce package, je tiens à remercier Manuel {\sc Luque} pour l'aide
et les encouragements qu'il a pu m'apporter durant l'élaboration de
\texttt{mp-geo}.
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{grandslacs-1.png}
  \caption{Les grands lacs d'Amérique du Nord ($\theta=-105$\degres;
    $\phi=45$\degres)}
\end{figure}
\section{Fonctionnement}
\subsection{Généralités et options}
Ce package est {\em indépendant}, bien qu'il reprenne bon nombre d'éléments
de \verb!geometriesyr16.mp!\footnote{Un autre de mes packages \MP\
  personnels, dédié, quant à lui, à la géométrie.} et plus
particulièrement du package dédié à la géométrie spatiale
\verb!donymodule.mp!. L'observateur est alors représenté par deux
angles (en degrés) :
\begin{itemize}
\item un angle $\theta$ qui représente la longitude de l'observateur;
\item un angle $\phi$ qui représente la latitude de l'observateur.
\end{itemize}
\par Les données initiales étaient dans un seul fichier. Elles ont été
fragmentées en fichiers individuels \verb!.dat! afin de pouvoir
les retrouver facilement et d'y avoir un accès plus facile. On dispose
ainsi d'un fichier par pays ainsi que d'un fichier par continent (cela donne
une meilleure visibilité au code source du package).
\\On dispose d'un seul fichier pour toutes les îles\footnote{Ceci pose
  un problème d'accès direct à des pays comme Cuba ou l'Australie. Un
  autre souci à régler\ldots}. Enfin les lacs sont regroupés dans un
seul fichier ainsi que pour les fleuves et rivières et les
volcans\footnote{Ce sont les 813 volcans qui ont eu une éruption ces
  10\,000 dernières années.}.
\\\`A noter que les lacs, les fleuves, les capitales et les volcans
sont {\em optionnels}; leur affichage est fait par défaut sauf pour
les capitales et volcans; mais l'utilisateur peut en décider
autrement en changeant les paramètres \verb!lacs!, \verb!fleuves!,
\verb!capitales! et \verb!volcans! à \verb!false!. Ceci peut être non
négligeable lors de la mesure du temps de compilation. Par exemple, le temps de
compilation de la figure \ding{172} a été de 37~s alors que pour la
figure \ding{173}, la compilation a duré 27~s.
\begin{figure}[ht]
  \centering
  \subfigure[Figure
  \ding{172}]{\includegraphics[scale=0.4]{payscomplets-1.png}}\hfill\subfigure[Figure \ding{173}]{\includegraphics[scale=0.4]{paysnus-1.png}}
\end{figure}
Une autre option est celle de colorer uniformément ou pas les
pays. Par défaut, cette option \verb!noncolore! est positionnée à
\verb!false!\footnote{Le théorème des quatre couleurs n'est pas
  implanté.}. Si l'on modifie sa valeur, on obtient une image telle
que la figure \ref{unicolore}.
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{mondenoncolore-1.png}
  \caption{Coloration uniforme ($\theta=105$\degres; $\phi=30$\degres).}
  \label{unicolore}
\end{figure}
\par Enfin, on dispose de l'option \verb!maillage! (positionnée par défaut à
\verb!false!) qui permet l'affichage des méridiens et parallèles
(Figure \ref{meridien}). En latitude, le pas est de 10\degres\ alors
qu'en longitude, il est de 5\degres.
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{oceaniemeridien-1.png}
  \caption{Méridiens et parallèles ($\theta=120$\degres; $\phi=-20$\degres).}
  \label{meridien}
\end{figure}
\par Les données ont conservé leur présentation d'origine : elles
sont sous la forme de points repérés en coordonnées sphériques par la
latitude et la longitude; l'unité choisie étant la minute pour
davantage de précision.\\Tous les fichiers sont regroupés dans un
sous-répertoire \verb!data!. Par défaut, \verb!arborescence! (qui est
un type \verb!string! de \MP) est réglé sur ce dossier\footnote{Pour
  un changement, ne pas oublier le \verb!/! au bout du chemin :\\
\verb!
arborescence:="../data/";
!
}.
\subsection{Méthodes pour la représentation spatiale}
Pour la représentation, le principe général est le suivant :
\begin{itemize}
  \item on lit les fichiers un à un;
  \item pour chaque point lu, on teste s'il s'agit d'un point visible
    ou pas. S'il est visible, on l'affiche sinon on passe au suivant.
\end{itemize}
Le nombre de points étant assez conséquent, il faut impérativement le
réduire. Pour cela, en fonction de la position de l'observateur, on
détermine les latitudes minimale et maximale que l'observateur peut
voir.
\begin{figure}[ht]
  \centering
  \includegraphics{latminmax-1.pdf}
  \caption{Détermination des latitudes minimales et maximales de vision.}
\end{figure}
\par On a alors un premier test : {\em si la l'attitude du point lu est
  comprise entre les valeurs \ding{172} et \ding{173} alors on
  continue; sinon on passe au suivant.}
\\Le deuxième test est, quant à lui, sur la visibilité (ou
l'invisibilité) du point. Pour ce faire, on teste le produit scalaire
des vecteurs $\vecteur{HP}$ et $\vecteur{HA}$ ($A$ étant la position
de l'observateur). {\em S'il est positif alors le point est vu, s'il est
négatif alors le point est invisible.}
\begin{figure}[ht]
  \centering
  \includegraphics{vuoupasvu-1.pdf}
  \caption{Vu ou pas vu ?}
\end{figure}
\par La suite fût plus laborieuse : le remplissage des différents pays. Une
première idée :
\begin{itemize}
\item tester chaque point des frontières;
\item si le point est vu, on le garde sinon on passe au suivant.
\end{itemize}
Je peux vous dire que certains pays deviennent alors très anguleux !
\par La deuxième idée, qui est celle retenue, n'est pas très
orthodoxe, je dois bien le dire ! Mais elle fonctionne :)
\begin{itemize}
\item tester chaque point des frontières;
\item si le point est vu, on le garde sinon on le remplace par {\em un
  point dont les coordonnées cartésiennes sont les doubles de celle du
  point étudié.}
\end{itemize}
Pourquoi ? Afin de faire sortir tous les points invisibles du cercle
de vision. Ainsi, après le remplissage, on {\em clippe} le tout dans
le cercle de vision. Et le tour est joué !
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{exemplemanuel-1.pdf}
  \caption{Méthode pour remplir correctement les pays.}
\end{figure}
\subsection{Dernières remarques}
\begin{center}
\begin{Danger}
  Cette section n'est valable que pour la représentation spatiale.
\end{Danger}
\end{center}
On peut régler la distance au centre de la sphère et la
distance à l'écran en modifiant les valeurs de la macro
\verb!Initialisation!. Cependant, je crois que les valeurs par défaut
(respectivement égales à 5 et 750) sont correctes pour obtenir des
images satisfaisantes. Ce n'est qu'une opinion personnelle :) Une
explication un peu plus persuasive : \MP\ n'est pas le meilleur
lorsqu'il s'agit de faire des calculs; en changeant ces valeurs, le
résultat peut alors devenir très déroutant\ldots
\\On peut également régler le rayon de la sphère terrestre en
changeant le paramètre \verb!rayon! qui doit rester inférieur à la
distance au centre de la sphère.
\par Voici pour finir une dernière image et son code source :
\begin{verbatim}
input mp-geo;
 
fleuves:=false;
lacs:=false;
capitales:=false;
Mappemonde(0,-90);
 
end
\end{verbatim}
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{polesud-1.png}
  \caption{L'immensité du pôle sud ($\theta=0$; $\phi=90$\degres).}
\end{figure}
Ooops ! une petite dernière\ldots\footnote{Ne cherchez pas après les
  fonctionnalités pour la transparence, elles ne sont pas implémentées
  dans le package; elles ne sont valables que dans des cas
  particuliers\ldots}
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{mp-geotrans-1.png}
  \caption{Un peu de transparence.}
\end{figure}
\section{Projections planes}
Ces projections permettent de représenter la Terre sur une surface
plane. Quelques projections sont mises en places afin d'avoir la
possibilité de produire des cartes.
\par En plus des options \verb!lacs!, \verb!fleuves!, \verb!capitales!,
\verb!noncolore! et \verb!maillage!, on dispose de l'option 
\verb!projection!\footnote{Qui est un type \verb!string! de \MP} qui
peut prendre les valeurs \verb!mercator!, \verb!coniqueh!,
\verb!coniqueb!, \verb!cylindrique!, \verb!simple!\footnote{Si un point de la sphère terrestre est représentée
  par ses coordonnées géographiques $(\phi;\lambda)$ en degrés alors les
  formules de projection sont 
\[\left\{\begin{array}{l}
x=\lambda-\lambda_0\\
y=\phi-\phi_0\\
\end{array}
\right.\]$(\phi_0;\lambda_0)$ sont les coordonnées géographiques du centre
de la future projection.} et \verb!bonne! (la valeur par défaut
étant \verb!non!). La syntaxe utilisée sera donc
\begin{verbatim}
projection:="mercator"
\end{verbatim}
Cependant, cette option est automatiquement modifiée par l'appel de la
macro traçant la projection plane. Il ne faudra pas oublier de la
repositionner à \verb!non! si l'on veut faire plusieurs figures
différentes au sein d'un même fichier \MP, par exemple une mappemonde
et une projection plane.
\subsection{Projection Mercator}
Plutôt qu'un long discours, voici
le code\footnote{On a repris la syntaxe de \verb!geometriesyr16!;
  \verb!figure! créant un cadre enfermant la figure obtenue.}
permettant d'appeller une représentation plane selon la projection
Mercator\footnote{Si un point de la sphère terrestre est représentée
  par ses coordonnées géographiques $(\phi;\lambda)$ en degrés alors les
  formules de projection sont 
\[\left\{\begin{array}{l}
x=\lambda-\lambda_0\\
\\
y=\ln\left(\tan\left(45+\dfrac\phi2\right)\right)-\ln\left(\tan\left(45+\dfrac{\phi_0}2\right)\right)\\
\end{array}
\right.\]$(\phi_0;\lambda_0)$ sont les coordonnées géographiques du centre
de la future projection.}
 centrée sur le point de coordonnées
(3\degres;48\degres)\footnote{On reconnaît les coordonnées sphériques
  de notre belle capitale Paris.} avec un zoom égal à 30 (le temps de
compilation est de 27 secondes\footnote{Il faudrait implémenter une
  option permettant de choisir tel ou tel continent\ldots}).
\begin{verbatim}
input mp-geo;
 
figure(-10u,-10u,10u,10u);
Mercator(3,48,30);
fin;
 
end
\end{verbatim}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.4]{mercator-1.png}
  \caption{Carte de France selon une projection Mercator.}
\end{figure}
Une possibilité est offerte d'afficher certaines villes {\em
  françaises}\footnote{En espérant pouvoir le faire pour un maximum de
  pays et que ce soit disponible également pour la représentation
  spatiale.} en ajoutant
\begin{verbatim}
Lecturevillesp("France");
\end{verbatim}
\subsection{Projection cylindrique}
Avec le code
\begin{verbatim}
input mp-geo;
 
maillage:=true;
 
figure(-10u,-10u,10u,10u);
Cylindrique(3,48,15);
Lecturevillesp("France");
fin;
 
end
\end{verbatim}
on obtient la carte en projection cylindrique\footnote{Pour un point
  de la sphère terrestre de coordonnées $(\phi;\lambda)$, les formules
  de projection sont
  \[\left\{\begin{array}{l}
      x=\lambda-\lambda_0\\
      \\
      y=\sin\phi-\sin\phi_0\\
    \end{array}
  \right.
  \]$(\phi_0;\lambda_0)$ sont les coordonnées géographiques du centre
de la future projection.}.
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{cylindrique-1.png}
  \caption{Carte de France selon la projection cylindrique.}
\end{figure}
\subsection{Projection conique}
Une projection conique est disponible : il s'agit de la {\em
  projection conique équidistante tangente}\footnote{D'après
  \url{http://thierry.hatt.gps.free.fr/projections/images-proj/coniq-equid-lambert.htm}. Pour un point de la sphère terrestre de coordonnées $(\phi;\lambda)$, les formules de projection sont
  \[\left\{\begin{array}{l}
      x=\dfrac{\cos\phi\sin(\lambda\sin(45))}{\sin{45}\cos(\phi-45)}\\
      \\
      y=\dfrac{\cos\phi\cos(\lambda\sin(45))}{\sin{45}\cos(\phi-45)}\\
    \end{array}
  \right.
  \]
}; le parallèle de contact étant soit le 45\degres\ Nord soit le
45\degres\ Sud. On choisit l'hémisphère à représenter par le code
source
\begin{verbatim}
input mp-geo;
 
figure(-20u,-20u,20u,20u);
ConiqueH;
fin;
 
end
\end{verbatim}
pour obtenir
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{coniqueHN-1.png}
  \caption{Projection conique - Hémisphère nord.}
\end{figure}
ou alors 
\begin{verbatim}
input mp-geo;
 
figure(-20u,-20u,20u,20u);
ConiqueB;
fin;
 
end
\end{verbatim}
pour voir l'hémisphère sud.
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{coniqueBS-1.png}
  \caption{Projection conique - Hémisphère sud.}
\end{figure}
\par\`A noter que cette fois-ci, le maillage n'est pas
facultatif\footnote{On pourrait peut-être ajouter des graduations}.
\subsection{Projection de Bonne}
Cette projection\footnote{Pour un point de la sphère terrestre de
  coordonnées $(\phi;\lambda)$, les formules de projection sont
  \[\left\{\begin{array}{l}
      x=\rho\sin E\\
      \\
      y=\textrm{cotan}\phi_0-\rho\cos E\\
    \end{array}
  \right.
  \]
  avec $\rho=\textrm{cotan}\phi_0+\phi_0-\phi$ et
  $E=(\lambda-\lambda_0)*cos(\phi)/\rho$$(\phi_0;\lambda_0)$ sont
  les coordonnées du centre de la future projection. Attention, dans
  ces formules, tous les angles doivent être en radians} est
particulière, elle est en forme de \og coeur\fg. Ce qui donne
\begin{figure}[ht]
  \centering
  \includegraphics[scale=0.4]{bonne-1.png}
  \caption{Projection de Bonne}
\end{figure}
avec le code source (pour 28 secondes de compilation)
\begin{verbatim}
input mp-geo;
 
maillage:=true;
capitales:=false;
 
figure(-10u,-15u,10u,10u);
Bonne(0,40,1);
fin;
 
end
\end{verbatim}
dans lequel \verb!0,40! représentent $(\lambda_0;\phi_0)$, 1 étant le
facteur de zoom.
\newpage
\section{Historique}
\begin{description}
\item[14/03/2008] Version \texttt{0.58} : Ajout de fleuves et lacs
  supplémentaires.
\item[14/03/2008] Version \texttt{0.56} : Ajout des volcans :).
\item[18/02/2008] Version \texttt{0.55} : Ajout des projections de Bonne.
\item[18/02/2008] Version \texttt{0.54} : Modification mineure dans la
  lecture des fichiers de données.
\item[15/02/2008] Version \texttt{0.53} : Ajout d'une troisième
  projection : la projection {\em simple}.
\item[15/02/2008] Version \texttt{0.52} : Ajout d'une troisième
  projection : la projection {\em cylindrique}.
\item[14/02/2008] Version \texttt{0.51} : Ajout d'une deuxième
  projection : une projection {\em conique}.
\item[14/02/2008] Version \texttt{0.5} : Ajout d'une première
  projection : la projection {\em Mercator}.
\item[12/02/2008] Version \texttt{0.46} : Possibilité d'affichage d'un
  point particulier sur la surface de la Terre (avec son méridien et
  son parallèle tracés).
\item[12/02/2008] Version \texttt{0.45} : Choix possible de
  l'affichage ou non des méridiens et parallèles.
\item[11/02/2008] Version \texttt{0.4} : Rendu indépendant de
  \verb!geometriesyr16.mp!.
\item[08/02/2008] Version \texttt{0.35} : Amélioration de la méthode
  de tracé.
\item[08/02/2008] Version \texttt{0.32} : Choix possible du chemin de
  lecture des fichiers \verb!.dat!.
\item[08/02/2008] Version \texttt{0.31} : Choix possible de la couleur
  de remplissage dans le cas d'un remplissage uniforme.
\item[07/02/2008] Version \texttt{0.3} : Choix possibles d'un
  affichage ou non des capitales, fleuves et lacs. Choix possible d'un
  remplissage uniforme ou coloré.
\item[07/02/2008] Version \texttt{0.2} : Création d'un unique fichier
  de données par continent.
\item[07/02/2008] Version \texttt{0.11} : Ajout du positionnement des
  capitales.
\item[06/02/2008] Version \texttt{0.1}.
\end{description}
\newpage
\listoffigures
\end{document}