From 25e2d07e6e4346cd52777d58bd2bf885c418e534 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 23 Jul 2008 21:59:09 +0000 Subject: pst-geo update (23jul08) git-svn-id: svn://tug.org/texlive/trunk@9729 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/generic/pst-geo/Asia3d.pdf | Bin 0 -> 1235392 bytes Master/texmf-dist/doc/generic/pst-geo/Asia3d.tex | 19 + Master/texmf-dist/doc/generic/pst-geo/China3d.pdf | Bin 0 -> 497952 bytes Master/texmf-dist/doc/generic/pst-geo/China3d.tex | 25 + Master/texmf-dist/doc/generic/pst-geo/Europe3d.pdf | Bin 0 -> 549379 bytes Master/texmf-dist/doc/generic/pst-geo/Europe3d.tex | 25 + .../doc/generic/pst-geo/SouthAmerica3d.pdf | Bin 0 -> 999587 bytes .../doc/generic/pst-geo/SouthAmerica3d.tex | 38 + Master/texmf-dist/doc/generic/pst-geo/data.tgz | Bin 1510037 -> 2623595 bytes .../doc/generic/pst-geo/pst-map3d-doc.pdf | Bin 0 -> 14664961 bytes Master/texmf-dist/dvips/pst-geo/pst-map3d.pro | 729 ++++++++++++++++++++ .../tex/generic/pst-geo/pst-map3d-doc.tex | 525 ++++++++++++++ .../texmf-dist/tex/generic/pst-geo/pst-map3d.tex | 765 ++++++++++++++++++--- Master/texmf-dist/tex/latex/pst-geo/pst-map3d.sty | 6 +- 14 files changed, 2053 insertions(+), 79 deletions(-) create mode 100644 Master/texmf-dist/doc/generic/pst-geo/Asia3d.pdf create mode 100644 Master/texmf-dist/doc/generic/pst-geo/Asia3d.tex create mode 100644 Master/texmf-dist/doc/generic/pst-geo/China3d.pdf create mode 100644 Master/texmf-dist/doc/generic/pst-geo/China3d.tex create mode 100644 Master/texmf-dist/doc/generic/pst-geo/Europe3d.pdf create mode 100644 Master/texmf-dist/doc/generic/pst-geo/Europe3d.tex create mode 100644 Master/texmf-dist/doc/generic/pst-geo/SouthAmerica3d.pdf create mode 100644 Master/texmf-dist/doc/generic/pst-geo/SouthAmerica3d.tex create mode 100644 Master/texmf-dist/doc/generic/pst-geo/pst-map3d-doc.pdf create mode 100644 Master/texmf-dist/dvips/pst-geo/pst-map3d.pro create mode 100644 Master/texmf-dist/tex/generic/pst-geo/pst-map3d-doc.tex diff --git a/Master/texmf-dist/doc/generic/pst-geo/Asia3d.pdf b/Master/texmf-dist/doc/generic/pst-geo/Asia3d.pdf new file mode 100644 index 00000000000..f0c054190fd Binary files /dev/null and b/Master/texmf-dist/doc/generic/pst-geo/Asia3d.pdf differ diff --git a/Master/texmf-dist/doc/generic/pst-geo/Asia3d.tex b/Master/texmf-dist/doc/generic/pst-geo/Asia3d.tex new file mode 100644 index 00000000000..3eae5789850 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-geo/Asia3d.tex @@ -0,0 +1,19 @@ +\documentclass[12pt,a4paper]{article} % +\usepackage{pst-map3d} +\topmargin=-0.75in +\begin{document} +\section*{Asia} +\begin{verbatim} +\begin{pspicture*}(-7,-6.5)(7,6.5)% + \psset{path=../data,linewidth=0.1pt} + \WorldMapThreeD[PHI=40,THETA=100,rivers=false] +\end{pspicture*} +\end{verbatim} + +\makebox[\textwidth]{\psframebox{% +\begin{pspicture*}(-7,-6.5)(7,6.5)% + \psset{path=../data,linewidth=0.1pt} + \WorldMapThreeD[PHI=40,THETA=100,rivers=false] +\end{pspicture*}}}% +\end{document} + diff --git a/Master/texmf-dist/doc/generic/pst-geo/China3d.pdf b/Master/texmf-dist/doc/generic/pst-geo/China3d.pdf new file mode 100644 index 00000000000..c5dffe21849 Binary files /dev/null and b/Master/texmf-dist/doc/generic/pst-geo/China3d.pdf differ diff --git a/Master/texmf-dist/doc/generic/pst-geo/China3d.tex b/Master/texmf-dist/doc/generic/pst-geo/China3d.tex new file mode 100644 index 00000000000..0dfe7061727 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-geo/China3d.tex @@ -0,0 +1,25 @@ +\documentclass[12pt,a4paper]{article} % +\usepackage{pstricks} +\usepackage{pst-map3d} +\topmargin=-0.75in +\pagestyle{empty} +\begin{document} +\section*{China} +\begin{verbatim} +\psset{unit=1,path=../data} +\begin{pspicture*}(-7,-6.5)(7,6.5)% +\psset{unit=2} + \WorldMapThreeD[PHI=35,THETA=100,rivers=false] +\end{pspicture*} +\end{verbatim} + +\begin{center} +\psset{path=../data} +\begin{pspicture*}(-7,-6.5)(7,6.5)% +\psset{unit=2} + \WorldMapThreeD[PHI=35,THETA=100,rivers=false] +\end{pspicture*} +\end{center} + +\end{document} + diff --git a/Master/texmf-dist/doc/generic/pst-geo/Europe3d.pdf b/Master/texmf-dist/doc/generic/pst-geo/Europe3d.pdf new file mode 100644 index 00000000000..38f6cf80f10 Binary files /dev/null and b/Master/texmf-dist/doc/generic/pst-geo/Europe3d.pdf differ diff --git a/Master/texmf-dist/doc/generic/pst-geo/Europe3d.tex b/Master/texmf-dist/doc/generic/pst-geo/Europe3d.tex new file mode 100644 index 00000000000..12e3a89b37e --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-geo/Europe3d.tex @@ -0,0 +1,25 @@ +\documentclass[12pt,a4paper]{article} % +\usepackage{pstricks} +\usepackage{pst-map3d} +\definecolor{ocean}{rgb}{0.5,0.8,0.8} +\topmargin=-0.75in +\begin{document} +\section*{Europe} +\begin{verbatim} +\psset{unit=2.75,path=../data} +\psframebox{% +\begin{pspicture*}(-1.5,-1.6)(3.25,4)% + \WorldMapThreeD[rivers=false] +\end{pspicture*} +} +\end{verbatim} + +\psset{unit=2.75,path=../data} +\psframebox{% +\begin{pspicture*}(-1.5,-1.6)(3.25,4)% + \WorldMapThreeD[rivers=false] +\end{pspicture*} +} +% +\end{document} + diff --git a/Master/texmf-dist/doc/generic/pst-geo/SouthAmerica3d.pdf b/Master/texmf-dist/doc/generic/pst-geo/SouthAmerica3d.pdf new file mode 100644 index 00000000000..6a36320b514 Binary files /dev/null and b/Master/texmf-dist/doc/generic/pst-geo/SouthAmerica3d.pdf differ diff --git a/Master/texmf-dist/doc/generic/pst-geo/SouthAmerica3d.tex b/Master/texmf-dist/doc/generic/pst-geo/SouthAmerica3d.tex new file mode 100644 index 00000000000..2b2280cba6e --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-geo/SouthAmerica3d.tex @@ -0,0 +1,38 @@ +\documentclass[12pt,a4paper]{article} % +\usepackage{pstricks} +\usepackage{pst-map3d} +\topmargin=-0.5in +\begin{document} +\section*{Southamerica} + +\begin{verbatim} +\psset{path=../data} +\psframebox{% +\begin{pspicture*}(-6.5,-6.5)(6.5,6.5) + \WorldMapThreeD[RotZ=-65,RotY=-65] +\end{pspicture*}} + + +\psframebox{% +\begin{pspicture*}(-6.5,-6.5)(6.5,6.5) + \psset{unit=2} + \WorldMapThreeD[RotZ=-65,RotY=-65] +\end{pspicture*}} +\end{verbatim} + +\psset{path=../data} +\psframebox{% +\begin{pspicture*}(-6.5,-6.5)(6.5,6.5) + \WorldMapThreeD[RotZ=-65,RotY=-65] +\end{pspicture*}} + + +\psframebox{% +\begin{pspicture*}(-6.5,-6.5)(6.5,6.5) + \psset{unit=2} + \WorldMapThreeD[RotZ=-65,RotY=-65] +\end{pspicture*}} + + +\end{document} + diff --git a/Master/texmf-dist/doc/generic/pst-geo/data.tgz b/Master/texmf-dist/doc/generic/pst-geo/data.tgz index 8190239c2d1..dc504e54495 100644 Binary files a/Master/texmf-dist/doc/generic/pst-geo/data.tgz and b/Master/texmf-dist/doc/generic/pst-geo/data.tgz differ diff --git a/Master/texmf-dist/doc/generic/pst-geo/pst-map3d-doc.pdf b/Master/texmf-dist/doc/generic/pst-geo/pst-map3d-doc.pdf new file mode 100644 index 00000000000..a16633b0c57 Binary files /dev/null and b/Master/texmf-dist/doc/generic/pst-geo/pst-map3d-doc.pdf differ diff --git a/Master/texmf-dist/dvips/pst-geo/pst-map3d.pro b/Master/texmf-dist/dvips/pst-geo/pst-map3d.pro new file mode 100644 index 00000000000..eb46bfac51e --- /dev/null +++ b/Master/texmf-dist/dvips/pst-geo/pst-map3d.pro @@ -0,0 +1,729 @@ +% premiere version 29 novembre 2003 +% entierement modifiee le 08/02/2008 +% allégée de 3D.pro +% version 1.0 du 5 mars 2008 +% manuel.luque27@gmail.com +/tx@map3DDict 100 dict def +tx@map3DDict begin +%% +/CalcCoor{ + /Y exch def /X exch def + /Xpoint Y cos X cos mul Rsphere mul def + /Ypoint Y cos X sin mul Rsphere mul def + /Zpoint Y sin Rsphere mul def + } def + + /CompteurRegions{% +/regions_visibles [] def +/compteur 0 def +{ + /region exch def + /nbr region length def % nombre de points + 0 1 nbr 1 sub { + /counter exch def % pour mémoriser le premier point vu + region counter get aload pop + CalcCoor + CalculsPointsAfterTransformations + Test + PS condition {% marque le point + /regions_visibles [regions_visibles aload pop compteur ] def + exit % termine + } if + } for + /compteur compteur 1 add def +} forall +/TableauRegionsVisibles [ +0 1 regions_visibles length 1 sub { + /NoRegion exch def + /No regions_visibles NoRegion get def + REGION No get + } for +] def +TableauRegionsVisibles +} def + +/CalculsPointsRegion{% + /region1 exch def + region1 0 get aload pop + CalcCoor + newpath + CalculsPointsAfterTransformations + CalcCoordinates + Test + PS condition { moveto }{ 2 mul exch 2 mul exch moveto} ifelse +% + 0 1 region1 length 1 sub { + /NoPoint exch def + region1 NoPoint get aload pop + CalcCoor + CalculsPointsAfterTransformations + CalcCoordinates + Test + PS condition { lineto }{ 2 mul exch 2 mul exch lineto} ifelse + } for +} def + +/MatriceTransformation{% + /Sin1 THETA sin def + /Sin2 PHI sin def + /Cos1 THETA cos def + /Cos2 PHI cos def + /Cos1Sin2 Cos1 Sin2 mul def + /Sin1Sin2 Sin1 Sin2 mul def + /Cos1Cos2 Cos1 Cos2 mul def + /Sin1Cos2 Sin1 Cos2 mul def + /XpointVue Dobs Cos1Cos2 mul def + /YpointVue Dobs Sin1Cos2 mul def + /ZpointVue Dobs Sin2 mul def + /M11 RotZ cos RotY cos mul def + /M12 RotZ cos RotY sin mul RotX sin mul + RotZ sin RotX cos mul sub def + /M13 RotZ cos RotY sin mul RotX cos mul + RotZ sin RotX sin mul add def + /M21 RotZ sin RotY cos mul def + /M22 RotZ sin RotY sin RotX sin mul mul + RotZ cos RotX cos mul add def + /M23 RotZ sin RotY sin mul RotX cos mul + RotZ cos RotX sin mul sub def + /M31 RotY sin neg def + /M32 RotX sin RotY cos mul def + /M33 RotX cos RotY cos mul def + } def +% RotZ -> RotX -> RotY +/MatriceTransformationZXY{% + /Sin1 THETA sin def + /Sin2 PHI sin def + /Cos1 THETA cos def + /Cos2 PHI cos def + /Cos1Sin2 Cos1 Sin2 mul def + /Sin1Sin2 Sin1 Sin2 mul def + /Cos1Cos2 Cos1 Cos2 mul def + /Sin1Cos2 Sin1 Cos2 mul def + /XpointVue Dobs Cos1Cos2 mul def + /YpointVue Dobs Sin1Cos2 mul def + /ZpointVue Dobs Sin2 mul def + /M11 RotZ cos RotY cos mul RotZ sin RotX sin mul RotY sin mul sub def + /M12 RotZ sin RotY cos mul RotZ cos RotX sin mul RotY sin mul add def + /M13 RotX cos RotY sin mul def + /M21 RotZ sin RotX cos mul neg def + /M22 RotZ cos RotX cos mul def + /M23 RotX sin neg def + /M31 RotZ cos neg RotY sin mul RotZ sin RotX sin mul RotY cos mul sub def + /M32 RotZ sin neg RotY sin mul RotZ cos RotX sin mul RotY cos mul add def + /M33 RotX cos RotY cos mul def + } def +% +/CalcCoordinates{% + formulesTroisD + Xi xunit Yi yunit + } + def +% pour la 3D conventionnelle +/formulesTroisD{% + /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def + /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2 mul add def + /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2 mul sub Dobs add def + /Xi DScreen xObservateur mul zObservateur div def + /Yi DScreen yObservateur mul zObservateur div def + } +def +% +/CalculsPointsAfterTransformations{% + /Xabscisse M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add def + /Yordonnee M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add def + /Zcote M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add def + } +def +% +/Test { % test de visibilité d'un point +% rayon vers point de vue + /RXvue XpointVue Xabscisse sub def + /RYvue YpointVue Yordonnee sub def + /RZvue ZpointVue Zcote sub def +% test de visibilité + /PS RXvue Xabscisse mul % produit scalaire + RYvue Yordonnee mul add + RZvue Zcote mul add + def +} def +% +/MaillageSphere { +gsave +maillagewidth +maillagecolor +0.25 setlinewidth +0 increment 360 increment sub {% + /theta exch def +-90 increment 90 increment sub {% + /phi exch def +% newpath + /Xpoint Rsphere theta cos mul phi cos mul def + /Ypoint Rsphere theta sin mul phi cos mul def + /Zpoint Rsphere phi sin mul def +CalculsPointsAfterTransformations + CalcCoordinates + moveto +% Centre de la facette + /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul def + /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul def + /Zpoint Rsphere phi increment 2 div add sin mul def +CalculsPointsAfterTransformations + /xCentreFacette Xabscisse def + /yCentreFacette Yordonnee def + /zCentreFacette Zcote def +% normale à la facette + /nXfacette xCentreFacette def + /nYfacette yCentreFacette def + /nZfacette zCentreFacette def +% rayon vers point de vue + /RXvue XpointVue xCentreFacette sub def + /RYvue YpointVue yCentreFacette sub def + /RZvue ZpointVue zCentreFacette sub def +% test de visibilité + /PSfacette RXvue nXfacette mul + RYvue nYfacette mul add + RZvue nZfacette mul add + def +PSfacette condition { +theta 1 theta increment add {% + /theta1 exch def + /Xpoint Rsphere theta1 cos mul phi cos mul def + /Ypoint Rsphere theta1 sin mul phi cos mul def + /Zpoint Rsphere phi sin mul def +CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +phi 1 phi increment add { + /phi1 exch def + /Xpoint Rsphere theta increment add cos mul phi1 cos mul def + /Ypoint Rsphere theta increment add sin mul phi1 cos mul def + /Zpoint Rsphere phi1 sin mul def +CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +theta increment add -1 theta {% + /theta1 exch def + /Xpoint Rsphere theta1 cos mul phi increment add cos mul def + /Ypoint Rsphere theta1 sin mul phi increment add cos mul def + /Zpoint Rsphere phi increment add sin mul def +CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +phi increment add -1 phi { + /phi1 exch def + /Xpoint Rsphere theta cos mul phi1 cos mul def + /Ypoint Rsphere theta sin mul phi1 cos mul def + /Zpoint Rsphere phi1 sin mul def +CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +} if +} for +} for +stroke +} def +% +/DrawCitys { +/CITY exch def +/Rayon exch def +/nbr CITY length def % nombre de villes +0 1 nbr 1 sub { + /compteur exch def + CITY compteur get aload pop + /X exch def /Y exch def + /Xpoint {% + Y cos X cos mul Rsphere mul + } def + /Ypoint {% + Y cos X sin mul Rsphere mul + } def + /Zpoint { Y sin Rsphere mul } def +CalculsPointsAfterTransformations + CalcCoordinates +Test +PS condition % + {1 0 0 setrgbcolor newpath Rayon 0 360 arc closepath fill}{pop pop} + ifelse +} for +} def + +/oceans_seas_hatched { +-90 circlesep 90 { + /latitude_parallel exch def + Parallel + circlecolor + circlewidth + stroke + } for + } def + +/meridien { +% liste des points vus +/TabPointsVusNeg[ +-180 1 0{ % for + /phi exch def + /Xpoint Rsphere longitude_meridien cos mul phi cos mul def + /Ypoint Rsphere longitude_meridien sin mul phi cos mul def + /Zpoint Rsphere phi sin mul def +CalculsPointsAfterTransformations + Test + PS condition { phi } if + } for +] def +% +/TabPointsVusPos[ +0 1 180{ % for + /phi exch def + /Xpoint Rsphere longitude_meridien cos mul phi cos mul def + /Ypoint Rsphere longitude_meridien sin mul phi cos mul def + /Zpoint Rsphere phi sin mul def +CalculsPointsAfterTransformations + Test + PS condition { phi } if + } for +] def +% plus grand et plus petit + +/phi_minNeg 0 def +/phi_maxNeg -180 def + +0 1 TabPointsVusNeg length 1 sub { % for + /iPoint exch def + /phi TabPointsVusNeg iPoint get def + phi phi_minNeg le {/phi_minNeg phi def} if + } for +0 1 TabPointsVusNeg length 1 sub { % for + /iPoint exch def + /phi TabPointsVusNeg iPoint get def + phi phi_maxNeg ge {/phi_maxNeg phi def} if + } for + +/phi_minPos 180 def +/phi_maxPos 0 def + +0 1 TabPointsVusPos length 1 sub { % for + /iPoint exch def + /phi TabPointsVusPos iPoint get def + phi phi_minPos le {/phi_minPos phi def} if + } for +0 1 TabPointsVusPos length 1 sub { % for + /iPoint exch def + /phi TabPointsVusPos iPoint get def + phi phi_maxPos ge {/phi_maxPos phi def} if + } for + + /Xpoint Rsphere longitude_meridien cos mul phi_minNeg cos mul def + /Ypoint Rsphere longitude_meridien sin mul phi_minNeg cos mul def + /Zpoint Rsphere phi_minNeg sin mul def + CalculsPointsAfterTransformations + CalcCoordinates + moveto + +phi_minNeg 1 phi_maxNeg{ + /phi exch def + /Xpoint Rsphere longitude_meridien cos mul phi cos mul def + /Ypoint Rsphere longitude_meridien sin mul phi cos mul def + /Zpoint Rsphere phi sin mul def +CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +meridiencolor +meridienwidth +stroke + + /Xpoint Rsphere longitude_meridien cos mul phi_minPos cos mul def + /Ypoint Rsphere longitude_meridien sin mul phi_minPos cos mul def + /Zpoint Rsphere phi_minPos sin mul def + CalculsPointsAfterTransformations + CalcCoordinates + moveto + +phi_minPos 1 phi_maxPos{ + /phi exch def + /Xpoint Rsphere longitude_meridien cos mul phi cos mul def + /Ypoint Rsphere longitude_meridien sin mul phi cos mul def + /Zpoint Rsphere phi sin mul def +CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +meridiencolor +meridienwidth +stroke +} +def + +%% macros de Jean-Paul Vignault +%% dans solides.pro +%% produit vectoriel de deux vecteurs 3d +/vectprod3d { %% x1 y1 z1 x2 y2 z2 +6 dict begin + /zp exch def + /yp exch def + /xp exch def + /z exch def + /y exch def + /x exch def + y zp mul z yp mul sub + z xp mul x zp mul sub + x yp mul y xp mul sub +end +} def + +% coordonnées sphériques -> coordonnées cartésiennes +/rtp2xyz { +6 dict begin + /phi exch def + /theta exch def + /r exch def + /x phi cos theta cos mul r mul def + /y phi cos theta sin mul r mul def + /z phi sin r mul def + x y z +end +} def + +%% norme d'un vecteur 3d +/norme3d { %% x y z +3 dict begin + /z exch def + /y exch def + /x exch def + x dup mul y dup mul add z dup mul add sqrt +end +} def + +%% duplique le vecteur 3d +/dupp3d { %% x y z + 3 copy +} def +/dupv3d {dupp3d} def + +%%%%% ### mulv3d ### +%% (scalaire)*(vecteur 3d) Attention : dans l autre sens ! +/mulv3d { %% x y z lambda +4 dict begin + /lambda exch def + /z exch def + /y exch def + /x exch def + x lambda mul + y lambda mul + z lambda mul +end +} def + +%%%%% ### defpoint3d ### +%% creation du point A a partir de xA yA yB et du nom /A +/defpoint3d { %% xA yA zA /nom +1 dict begin + /memo exch def + [ 4 1 roll ] cvx memo exch +end def +}def + +%%%%% ### scalprod3d ### +%% produit scalaire de deux vecteurs 3d +/scalprod3d { %% x1 y1 z1 x2 y2 z2 +6 dict begin + /zp exch def + /yp exch def + /xp exch def + /z exch def + /y exch def + /x exch def + x xp mul y yp mul add z zp mul add +end +} def + +%%%%% ### addv3d ### +%% addition de deux vecteurs 3d +/addv3d { %% x1 y1 z1 x2 y2 z2 +6 dict begin + /zp exch def + /yp exch def + /xp exch def + /z exch def + /y exch def + /x exch def + x xp add + y yp add + z zp add +end +} def + +/arccos { + dup + dup mul neg 1 add sqrt + exch + atan +} def +%% fin des macros de Jean-Paul Vignault +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%% ### rotV3d ### +%% rotation autour d'un vecteur u +%% defini par (ux,uy,uz) +%% ici l'axe des pôles de la Terre +%% d'un angle theta +/rotV3d { +15 dict begin + /N2uvw ux dup mul uy dup mul add uz dup mul add def + /N2uv ux dup mul uy dup mul add def + /N2vw uz dup mul uy dup mul add def + /N2uw uz dup mul ux dup mul add def + /z exch def /y exch def /x exch def + /uxvywz ux x mul uy y mul add uz z mul add def + /uxvy ux x mul uy y mul add def + /uxwz ux x mul uz z mul add def + /vywz uy y mul uz z mul add def + /_wyvz uz y mul neg uy z mul add def + /wx_uz uz x mul ux z mul sub def + /_vxuy uy x mul neg ux y mul add def + ux uxvywz mul x N2vw mul ux vywz mul sub theta cos mul add N2uvw sqrt _wyvz mul theta sin mul add N2uvw div + uy uxvywz mul y N2uw mul uy uxwz mul sub theta cos mul add N2uvw sqrt wx_uz mul theta sin mul add N2uvw div + uz uxvywz mul z N2uv mul uz uxvy mul sub theta cos mul add N2uvw sqrt _vxuy mul theta sin mul add N2uvw div +end + } def + + +/the_night{ +50 dict begin + /theta {180 hour 15 mul sub} bind def +% direction des rayons du soleil au solstice d'hiver + u1 u2 u3 /u defpoint3d +% vecteur normal dans le plan meridien +% la latitude +% /phi0 u2 neg u3 atan def +u1 u2 u3 rotV3d + /nZ exch def /nY exch def pop + /phi0 nY neg nZ atan def +% vecteur normal dans le plan equateur + /theta0 u1 neg u2 atan def + theta0 cos theta0 sin 0 /v defpoint3d +% w tels que le trièdre u v w soit direct + u v vectprod3d dupp3d norme3d 1 exch div mulv3d /w defpoint3d +/TabPointsVusNeg[ +-180 1 0{ % for + /t exch def + v t cos Rsphere mul mulv3d + w t sin Rsphere mul mulv3d + addv3d + rotV3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + Test + PS 0 ge { t } if + } for +] def +% +/TabPointsVusPos[ +0 1 180{ % for + /t exch def + v t cos Rsphere mul mulv3d + w t sin Rsphere mul mulv3d + addv3d + rotV3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + Test + PS 0 ge { t } if + } for +] def +/t_minNeg 0 def +/t_maxNeg -180 def + +0 1 TabPointsVusNeg length 1 sub { % for + /iPoint exch def + /t TabPointsVusNeg iPoint get def + t t_minNeg le {/t_minNeg t def} if + } for +0 1 TabPointsVusNeg length 1 sub { % for + /iPoint exch def + /t TabPointsVusNeg iPoint get def + t t_maxNeg ge {/t_maxNeg t def} if + } for + +/t_minPos 180 def +/t_maxPos 0 def + +0 1 TabPointsVusPos length 1 sub { % for + /iPoint exch def + /t TabPointsVusPos iPoint get def + t t_minPos le {/t_minPos t def} if + } for +0 1 TabPointsVusPos length 1 sub { % for + /iPoint exch def + /t TabPointsVusPos iPoint get def + t t_maxPos ge {/t_maxPos t def} if + } for + +theta -90 ge theta 90 le and { + v t_minNeg cos Rsphere mul mulv3d + w t_minNeg sin Rsphere mul mulv3d + addv3d + rotV3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + CalcCoordinates + moveto + +t_minNeg 1 t_maxPos{ + /t exch def + v t cos Rsphere mul mulv3d + w t sin Rsphere mul mulv3d + addv3d + rotV3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +phi0 1 phi0 180 add { /t exch def +RsphereScreen t cos mul +RsphereScreen t sin mul + lineto + } for +}{ + v t_minPos cos Rsphere mul mulv3d + w t_minPos sin Rsphere mul mulv3d + addv3d + rotV3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + CalcCoordinates + moveto + +t_minPos 1 t_maxPos { + /t exch def + v t cos Rsphere mul mulv3d + w t sin Rsphere mul mulv3d + addv3d + rotV3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +t_minNeg 1 t_maxNeg { + /t exch def + v t cos Rsphere mul mulv3d + w t sin Rsphere mul mulv3d + addv3d + rotV3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +phi0 1 phi0 180 add { /t exch def +RsphereScreen t cos mul +RsphereScreen t sin mul + lineto + } for +} ifelse +closepath +end +} +def + +% ondes seismes +/ondes { + 50 dict begin + /l exch def % latitude : phi + /L exch def % longitude : theta + /dlmax exch def % intervalle maximal en degrés + /nbr exch def % nombre de cercles + /dl dlmax nbr div def +% le vecteur unitaire normal +% à la sphère au point considéré + L cos l cos mul + L sin l cos mul + l sin + /u defpoint3d +1 1 nbr { /i exch def + /l' l dl i mul add def + /r Rsphere dl i mul cos mul def + /r' Rsphere dl i mul sin mul def +% le centre de l'onde + /x_o r L cos mul l cos mul def + /y_o r L sin mul l cos mul def + /z_o r l sin mul def +% un vecteur unitaire du plan du cercle +% perpendiculaire à n et dans le plan méridien +% donc même longitude + /x_I Rsphere L cos mul l' cos mul def + /y_I Rsphere L sin mul l' cos mul def + /z_I Rsphere l' sin mul def + x_I x_o sub + y_I y_o sub + z_I z_o sub + /uOI defpoint3d + uOI dupp3d norme3d 1 exch div mulv3d + /v defpoint3d +% un vecteur w normal à u et v dans le plan du cercle + u v vectprod3d dupp3d norme3d 1 exch div mulv3d + /w defpoint3d +% on décrit le cercle + + v 0 cos r' mul mulv3d + w 0 sin r' mul mulv3d + addv3d x_o y_o z_o addv3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + CalcCoordinates + moveto +0 1 360{% + /t exch def + v t cos r' mul mulv3d + w t sin r' mul mulv3d + addv3d x_o y_o z_o addv3d + /Zpoint exch def /Ypoint exch def /Xpoint exch def + CalculsPointsAfterTransformations + CalcCoordinates + lineto + } for +stroke + } for +end +} def + +%% nouvelle construction des parallèles +/Parallel { +0 1 360{ % for + /theta exch def + /Xpoint Rsphere theta cos mul latitude_parallel cos mul def + /Ypoint Rsphere theta sin mul latitude_parallel cos mul def + /Zpoint Rsphere latitude_parallel sin mul def +CalculsPointsAfterTransformations + Test + PS condition { + CalcCoordinates + moveto + /theta theta 1 add def + /Xpoint Rsphere theta cos mul latitude_parallel cos mul def + /Ypoint Rsphere theta sin mul latitude_parallel cos mul def + /Zpoint Rsphere latitude_parallel sin mul def +CalculsPointsAfterTransformations +Test + PS condition { +CalcCoordinates + lineto } + { + /theta theta 1 sub def + /Xpoint Rsphere theta cos mul latitude_parallel cos mul def + /Ypoint Rsphere theta sin mul latitude_parallel cos mul def + /Zpoint Rsphere latitude_parallel sin mul def +CalculsPointsAfterTransformations +CalcCoordinates + lineto + } ifelse + } if + } for +} def +end diff --git a/Master/texmf-dist/tex/generic/pst-geo/pst-map3d-doc.tex b/Master/texmf-dist/tex/generic/pst-geo/pst-map3d-doc.tex new file mode 100644 index 00000000000..a4149e3ce14 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pst-geo/pst-map3d-doc.tex @@ -0,0 +1,525 @@ +\documentclass[12pt]{article} +\usepackage{pst-map3d,pstricks-add} +\let\PSTfileversion\fileversion +\let\PSTfiledate\filedate +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[garamond]{mathdesign} +\renewcommand{\ttdefault}{lmtt} +\usepackage{longtable,array} +\usepackage{ragged2e} +%\usepackage{url} +\usepackage[a4paper,margin=2cm,nohead]{geometry} +\usepackage[colorlinks=true]{hyperref} +\usepackage{showexpl,xspace} +\usepackage[french]{babel} +\def\PST{\texttt{PSTricks}\xspace} +\def\PS{\texttt{PostScript}\xspace} +\makeatletter +\newdimen\pssizeStar +\def\psset@sizeStar#1{\pssetlength\pssizeStar{#1}} +\psset@sizeStar{1.5pt} + +%% adapté de \psRandom du package pstricks-add +%% pour rendre aléatoire la taille des étoiles +\def\psRandomStar{\pst@object{psRandomStar}}% +\def\psRandomStar@i{\@ifnextchar({\psRandomStar@ii}{\psRandomStar@iii(0,0)(1,1)}} +\def\psRandomStar@ii(#1){\@ifnextchar({\psRandomStar@iii(#1)}{\psRandomStar@iii(0,0)(#1)}} +\def\psRandomStar@iii(#1)(#2)#3{% + \def\pst@tempA{#3}% + \ifx\pst@tempA\pst@empty\psclip{\psframe(#2)}\else\psclip{#3}\fi + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \begin@SpecialObj + \addto@pscode{ + \pst@tempA\space /yMin exch def + /xMin exch def + \pst@tempB\space /yMax exch def + /xMax exch def + /dy yMax yMin sub def + /dx xMax xMin sub def + rrand srand % initializes the random generator + /getRandReal { rand 2147483647 div } def + \psk@randomPoints { + /DS \pst@number\pssizeStar\space getRandReal mul def + \@nameuse{psds@\psk@dotstyle} + \ifPst@color getRandReal 1 1 sethsbcolor \fi + getRandReal dx mul xMin add + getRandReal dy mul yMin add + Dot + \ifx\psk@fillstyle\psfs@solid fill \fi stroke + } repeat + }% + \end@SpecialObj + \endpsclip + \ignorespaces +} +\makeatother +\definecolor{graygreen}{cmyk}{0.7,0,0.6,0.2} +\newcommand{\PstMapThreeDPackage}{`\textsf{pst-map3d}'} + \title{The \PstMapThreeDPackage{} package\\A PSTricks package for Geographical Projections} + \author{Manuel \textsc{Luque} + \mbox{\texttt{}}\\ + and\\ + Giuseppe \textsc{Matarazzo} \mbox{\texttt{}}} + \date{Version 2.0\\ 18 mars 2008} + +\begin{document} +\maketitle +\begin{abstract} +\PstMapThreeDPackage{} traite de la représentation en trois dimensions + du globe terrestre avec plusieurs fonctionnalités qui rendent son + utilisation agréable (tout au moins nous l'espérons). + +Il s'agit d'une reprise du package élaboré avec Giuseppe Matarazzo en +2003. Celui-ci présentait quelques erreurs de représentation lorsqu'une +grande partie d'un pays était cachée aux yeux de l'observateur. Une idée +très astucieuse de Christophe Poulain permettant de résoudre ce problème +est à l'origine de la refonte du package. J'ai aussi profité de quelques +macros \texttt{postscript} mises au point par Jean-Paul Vignault pour +l'écriture du package \texttt{`pst-solides3d'}. + +L'élaboration et la mise en ligne de ce package a bénéficié des +encouragements, de toute la compétence et de la disponibilité de +Jean-Michel Sarlat. + +La plus grande le code ayant donc du être réécrite, il m'a semblé +judicieux d'introduire de nouvelles fonctionnalités parmi lesquelles : +le \textit{globe tellure}, les plaques tectoniques, les épicentres des +séismes, les zones de fracture et les linéations magnétiques (anomalies +magnétiques des fonds océaniques). + +\end{abstract} + \tableofcontents +% \newpage + \section{Les données\label{datas}} +GLOBE Binaries DECODING : World Public Domain Dbase : + F.Pospeschil, A.Rivera (1999) + +\url{ftp://ftp.blm.gov/pub/gis/wdbprg.zip} + +Elles ont \'et\'e converties sous forme de tableau PostScript, en +degr\'es, +gr\^ ace à un petit programme en pascal (de Giuseppe Matarazzo) qui +fait partie de la distribution. Ce sont les mêmes données que +celles du package \textsf{pst-map2d}. +\section{Les paramètres} +\begin{longtable}{|>{\bfseries\ttfamily\color{blue}}l|c|m{10cm}|} + \hline + \multicolumn{1}{|c|}{\textbf{Paramètre}}& + \multicolumn{1}{c|}{\textbf{Défaut}}& + \multicolumn{1}{c|}{\textbf{Signification}} \\ \hline\hline +\endfirsthead +\hline + \multicolumn{1}{|c|}{\textbf{Paramètre}}& + \multicolumn{1}{c|}{\textbf{Défaut}}& + \multicolumn{1}{c|}{\textbf{Signification}} \\ \hline\hline +\endhead +\multicolumn{3}{|r|}{\textit{Suite à la page suivante}}\\ \hline +\endfoot +\multicolumn{3}{|r|}{\textit{Fin de la table}}\\ \hline +\endlastfoot +Radius&5&rayon du globe \\\hline +Dobs&20&distance de l'observateur au centre du globe \\\hline +Decran&25&distance de l'écran à l'observateur \\\hline +THETA&0& angle définissant, avec $\phi$ en coordonnées sphériques la position de l'observateur \\\hline +PHI&45& angle définissant, avec $\theta$ en coordonnées sphériques la position de l'observateur \\\hline +RotZ&0& rotation du globe autour de l'axe vertical $Oz$ en degrés\\\hline +RotX&0& rotation du globe autour de l'axe horizontal $Ox$ en degrés\\\hline +RotY&0& rotation du globe autour de l'axe horizontal $Oy$ en degrés\\\hline +gridmap&true& boléen : trace le maillage de la sphère : méridiens et parallèles\\\hline +gridmapdiv&$10^{\mathrm{o}}$& écart angulaire entre 2 méridiens ou 2 parallèles\\\hline +gridmapcolor&black& couleur des méridiens et parallèles\\\hline +gridmapwidth&0.8pt & épaisseur des lignes des méridiens et parallèles\\\hline +mapcolor&``terre''& couleur des continents : la couleur ``terre'' a été prédéfinie\\\hline +oceancolor&``mer''& couleur des océans et mers : : la couleur ``mer'' a été prédéfinie\\\hline +borders&true& booléen : dessine les frontières\\\hline +bordercolor&black& couleur des frontières\\\hline +borderwidth&0.8pt & épaisseur des frontières\\\hline +france&false& booléen : dessine la France métropolitaine et la Corse. + Destiné à la représentation particulière de la France ou bien à sa mise en valeur.\\\hline +coasts&true& booléen : dessine les côtes\\\hline +coastcolor&black& couleur des côtes\\\hline +coastwidth&0.8pt & épaisseur des côtes\\\hline +islandcolor&black& couleur du contour des îles\\\hline +rivers&true& booléen : dessine les fleuves\\\hline +lakes&true& booléen : dessine les lacs\\\hline +capitals&true& booléen : marque les capitales visibles\\\hline +citys&true& booléen : marque toutes les villes visibles\\\hline +usa&false& booléen : dessine les états \\\hline +australia&false& booléen : dessine les états \\\hline +mexico&false& booléen : dessine les états \\\hline +circles&false& booléen : dessine des cercles parallèles sur les océans et les mers \\\hline +circlecolor&blue& couleur des côtes\\\hline +circlewidth&0.5pt & épaisseur des côtes\\\hline +circlesep&$2^{\mathrm{o}}$& écart angulaire entre 2 cercles\\\hline +visibility&booléen& true : dessine les parties du globe visibles pour l'observateur\\\hline +blueEarth&booléen& true : dessine un disque couleur de l'océan à la dimension du globe\\\hline +daynight&booléen& false : dessine la nuit sur le globe\\\hline +hour&12 & heure locale du lieu\\\hline +Day&le jour actuel& jour d'observation\\\hline +Month&le mois actuel& mois d'observation\\\hline +ridge&false& trace les limites des plaques tectoniques\\\hline +ridgecolor&red& couleur des dorsales\\ \hline +trenchcolor&darkgreen& couleur des lignes de convergence\\ \hline +transfrmcolor&orange& couleur des lignes de transcurrence\\ \hline +ridgewidth&2 pt& épaisseur des lignes précédentes\\ \hline +zonefrac&false& booléen : tracé des lignes de fracture\\ \hline +zonefraccolor&red& couleur des lignes de fracture\\ \hline +zonefracwidth&0.8 pt& épaisseur des lignes de fracture\\ \hline +wmaglinwidth&0.8 pt& épaisseur des lignes de linéation magnétique\\ \hline +wmaglin&false& booléen : tracé des linéations magnétiques\\ \hline +wmaglincolor&red& couleur des linéations magnétiques\\ \hline +Year&l'année actuelle& l'année d'observation\\\hline +waves&3& nombre de cercles concentriques à partir de l'épicentre\\\hline +Rmax&1500& Rayon, en km, du plus grand cercle centré sur l'épicentre\\\hline +\end{longtable} +\section{La représentation du globe} + +La représentation du globe est centrée sur Paris avec les paramètres +\begin{center}\centering \verb+\psset{PHI=48.85,THETA=2.32}+.\end{center} +Un effet de moirage apparaît du aux +cercles concentriques tracés sur la sphère. Différentes options de +couleur sont testées avec cet exemple. + +%\begin{LTXexample}[width=8cm] +\begin{pspicture}(-4,-4)(4,4) +\psset{PHI=48.85,THETA=2.32,Decran=15,path=../data} +\WorldMapThreeD[gridmapcolor=yellow,circlesep=1,mapcolor=green!50,bordercolor=red, + coastwidth=1.2pt,capitals,islandcolor=blue,coastcolor=blue,coasts] +\psmeridien{2.32} +\psparallel{48.85} +\mapputIIID(2.32,48.85){Paris} +\end{pspicture} +%\end{LTXexample} + +\section{Effet de transparence et rotations} + +La transparence(resp. opacité) du globe se règle avec le paramètre +\texttt{opacity}. Si l'on souhaite combiner les rotations celles-ci +s'effectuent, pour des raisons spécifiques à ce package, dans l'ordre +suivant \texttt{RotZ}, \texttt{RotX}, \texttt{RotY}. + +Rappelons que les effets de transparence ne sont possibles qu'avec le +fichier \texttt{pdf}, celui-ci sera obtenu avec la séquence de commandes: +\texttt{\LaTeX}-->\texttt{dvips}-->\texttt{ps2pdf}. + +%\begin{LTXexample}[width=8.2cm] +\begin{pspicture}(-4,-4)(4,4) +\psset{RotX=-23,RotZ=30,PHI=46.5833,THETA=0.3333,visibility=false,Decran=15,path=../data} +\WorldMapThreeD[circles=false,blueEarth=false] +\WorldMapThreeD[circles=false,visibility=true,opacity=0.7] +\psmeridien[visibility=true]{0.333} +\psparallel[visibility=true]{46.5833} +\mapputIIID(0.3333,46.5833){Poitiers} +\end{pspicture} +%\end{LTXexample} + + +\section{Mise en valeur du territoire français} +\begin{center} + +\begin{pspicture*}(-0.5\linewidth,-0.45\textheight)(0.5\linewidth,0.5\textheight) +\psset{PHI=45,THETA=5,unit=7.5,path=../data} +\WorldMapThreeD[lakes=false,circlesep=0.25,lakes=false,gridmap=false, + mapcolor=graygreen!50,bordercolor=red,rivers=false, + coasts=false,islandcolor=blue]% +\WorldMapThreeD[gridmapcolor=yellow,circles=false,lakes=true,gridmapdiv=5,france=true, + islandcolor=blue,blueEarth=false, + bordercolor=red,islands=false,borders=false,rivers=true,coasts=true, + coastcolor=blue]% +\psmeridien{2.32} +\psparallel{48.85} +\newpsstyle{NodeLabelStyle}{fillstyle=solid,fillcolor=yellow!50,framesep=0, + linestyle=none,opacity=0.5} +\input{villesFrance3d} +\newpsstyle{NodeLabelStyle}{fillstyle=solid,fillcolor=red!50, + framesep=0,linestyle=none,opacity=0.5} +\newpsstyle{psNodeMapStyle}{fillstyle=solid,fillcolor=yellow!50,linecolor=red} +\psset{nodeWidth=0.025\psunit,linecolor=red} +\pnodeMapIIID(15.2833,37.0833){Syracuse} +\pscircle[fillstyle=solid,fillcolor=green](Syracuse){0.025\psunit} +\psdot[dotsize=0.025\psunit](Syracuse) +\uput[l](Syracuse){\psframebox[fillstyle=solid,fillcolor=yellow,framesep=0, + linestyle=none,opacity=0.5]{\textsf{Syracuse}}} +\pnodeMapIIID(10.51667,43.85){Lucques} +\pscircle[fillstyle=solid,fillcolor=green](Lucques){0.025\psunit} +\psdot[dotsize=0.025\psunit](Lucques) +\uput[u](Lucques){\psframebox[fillstyle=solid,fillcolor=yellow!50,framesep=0, + linestyle=none,opacity=0.5]{\textsf{Lucques}}} +\input{capitales} +\psepicenter[circlecolor=red,waves=16,Rmax=2000](0.3333,46.5833){Poitiers} +\end{pspicture*} + +\end{center} + +\section{Les macros} +\subsection{La commande \textbackslash pnodeMapIIID} +Une commande créée à cet effet permet de placer en un point du globe, défini +par sa longitude et sa latitude, une ville, un lieu, un symbole ou une +annotation quelconque. Cette commande qui utilise le package +\textsf{pst-node} est la suivante : +\begin{verbatim} +\pnodeMapIIID(longitude,latitude){nom} +\end{verbatim} +\textsf{longitude} et \textsf{latitude} sont en degrés, le \textsf{nom} +attribué au n\oe{}ud ne doit pas contenir de lettre accentuée. +\subsection{La commande \textbackslash mapputIIID} +La commande \verb+\mapputIIID(0.100000,49.483333){Le Havre}+ est identique à la suite de commandes : +\begin{itemize} +\item \verb+\pnodeMapIIID(0.100000,49.483333){LeHavre}+ +\item \verb+\psdot[linecolor=red,dotsize=2mm](LeHavre)+ +\item \verb+\uput[u](LeHavre){\psframebox*[fillstyle=solid,+\\ + \verb+ fillcolor=yellow,framesep=0]{\textsf{Le Havre}}}+ +\end{itemize} +D'une façon générale elle s'écrit : +\begin{verbatim} + \mapputIIID[angle](longitude,lattitude)[node name]{node label}[country] +\end{verbatim} +Ce qui est entre crochets est facultatif. Par défaut l'angle de positionnement vaut $90^{\mathrm{o}}$. + +Les paramètres avec les valeurs par défaut sont les suivants : +\begin{verbatim} + \newpsstyle{psNodeMapStyle}{fillstyle=solid,fillcolor=red} + \newpsstyle{NodeLabelStyle}{fillstyle=solid,fillcolor=yellow, + framesep=0,linestyle=none} + nodeWidth=1 mm +\end{verbatim} +\subsection{La commande \textbackslash psmeridien} +\begin{verbatim} +\psmeridien[options]{longitude} +\end{verbatim} +Elle permet de tracer la partir visible du méridien défini par sa +longitude en degrés. + +\subsection{La commande \textbackslash psparallel} +\begin{verbatim} +\psparallel[options]{latitude} +\end{verbatim} +Elle permet de tracer la partir visible du cercle parallèle à +l'équateur défini par sa latitude en degrés. + +\section{Le globe tellure} + +Le \textit{globe tellure} est décrit dans le document +\textit{Globe\_tellure\_original.pdf}. + +La macro qui lui est associée est la suivante : +\begin{verbatim} +\def\psGlobeTellure{\pst@object{psGlobeTellure}} +\def\psGlobeTellure@i(#1,#2)#3{% longitude, latitude et nom de la ville + \begin@SpecialObj% + \pnode(!/ux 0 def /uy 90 #2 sub sin def /uz 90 #2 sub cos def 0 0){ttt}% + \psset{PHI=0,THETA=0}% + {\psset{RotX=#2 90 sub,RotZ=90 #1 add} + \WorldMapThreeD[style=\psk@styleGlobe,daynight=false]% + \mapputIIID(#1,#2){#3}}% + \WorldMapThreeD[style=\psk@styleNight,daynight=true,circles=false, + blueEarth=false, + borders=false,islands=false, + rivers=false,lakes=false, + gridmap=false,latitudeParallel=#2]% + \psframe*(-3,-6.5)(3,-5.5) + \rput(! 0 \psk@TroisD@Radius\space neg -1 add){% + \white% + \psk@WorldMap@hour h le \psk@WorldMap@J/\psk@WorldMap@M/\psk@WorldMap@A} + \end@SpecialObj% + \ignorespaces}% +\end{verbatim} +Les deux styles associés à la partie éclairée et à la partie dans +l'ombre sont : + +\begin{verbatim} +\newpsstyle{Globe}{circles=true} +\newpsstyle{night}{fillstyle=solid,fillcolor=black,opacity=0.8} +\end{verbatim} +et sont modifiables grâce aux deux options : \texttt{[styleGlobe=Globe]} +et \texttt{[styleNight=night]} qui sont les styles par défaut. + +Elle s'utilise simplement, mais elle n'est valable que pour les villes de l'hémisphère nord : + +%\begin{LTXexample}[width=8cm] +\begin{postcript} +\definecolor{BlueDark}{cmyk}{1,1,0,0.5} +\newpsstyle{Globe}{circles=true,gridmap=true,daynight=false} +\newpsstyle{night}{fillstyle=solid,fillcolor=BlueDark,linecolor=BlueDark,opacity=0.8} +\psset{Radius=5,Decran=100,Dobs=100,unit=0.5,path=../data} +\begin{pspicture}(-7,-7)(7,7) +\psframe*[linecolor=BlueDark](-7,-7)(7,7)% +\psRandomStar[linecolor=yellow!50,randomPoints=100](-7,-7)(7,7){\psframe(-7,-7)(7,7)} +\psGlobeTellure[hour=10,Day=22,Month=06,Year=2008](15.28,37.07){Syracuse} +\end{pspicture} +\end{postcript} +%\end{LTXexample} + +Elle comprend en options, l'heure locale, le jour, le mois et l'année et +en argument les coordonnées géographiques de la ville ainsi que son nom. + +La commande \verb+\psRandomStar(-7,-7)(7,7){\psframe(-7,-7)(7,7)}+ a été +empruntée au package \texttt{pstricks-add} et permet de dessiner des +étoiles dont la position et la taille sont aléatoires. Par rapport à la +commande de \texttt{pstricks-add}, il y a en plus l'option +\texttt{[sizeStar=1.5pt]} qui permet de fixer la taille maximale des +étoiles. La package +\texttt{pstricks-add} doit être chargé en préambule avant +\PstMapThreeDPackage. + +\begin{verbatim} +\newdimen\pssizeStar +\def\psset@sizeStar#1{\pssetlength\pssizeStar{#1}} +\psset@sizeStar{1.5pt} + +%% adapté de \psRandom du package pstricks-add +%% pour rendre aléatoire la taille des étoiles +\def\psRandomStar{\pst@object{psRandomStar}}% +\def\psRandomStar@i{% + \@ifnextchar({\psRandomStar@ii}{\psRandomStar@iii(0,0)(1,1)}} +\def\psRandomStar@ii(#1){% + \@ifnextchar({\psRandomStar@iii(#1)}{\psRandomStar@iii(0,0)(#1)}} +\def\psRandomStar@iii(#1)(#2)#3{% + \def\pst@tempA{#3}% + \ifx\pst@tempA\pst@empty\psclip{\psframe(#2)}\else\psclip{#3}\fi + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \begin@SpecialObj + \addto@pscode{ + \pst@tempA\space /yMin exch def + /xMin exch def + \pst@tempB\space /yMax exch def + /xMax exch def + /dy yMax yMin sub def + /dx xMax xMin sub def + rrand srand % initializes the random generator + /getRandReal { rand 2147483647 div } def + \psk@randomPoints { + /DS \pst@number\pssizeStar\space getRandReal mul def + \@nameuse{psds@\psk@dotstyle} + \ifPst@color getRandReal 1 1 sethsbcolor \fi + getRandReal dx mul xMin add + getRandReal dy mul yMin add + Dot + \ifx\psk@fillstyle\psfs@solid fill \fi stroke + } repeat + }% + \end@SpecialObj + \endpsclip + \ignorespaces +} +\makeatother +\end{verbatim} +\section{Les épicentres} +La commande suivante : +\begin{verbatim} +\psepicenter[circlecolor=red,waves=4,Rmax=2000](95.98,3.30){Sumatra} +\end{verbatim} +tracera l'épicentre du séisme qui eut lieu sur la côte occidentale du +nord de Sumatra le 26 décembre 2004, les coordonnées géographiques sont +indiquées entre les parenthèses : +\texttt{(longitude, latitude)}, la nom de la ville ou de la région entre +accolades. Les paramètres optionnels concernent la couleur des cercles +concentriques, leur nombre et le rayon maximum en km de l'onde, +l'épaisseur se règle avec +\texttt{[circlewidth=2pt]}. + +Il y a de très nombreux renseignements sur les séismes sur le site : + +\centerline{\url{http://earthquake.usgs.gov/eqcenter/eqarchives/year/magnitude8_1900_date.php}} + +%\begin{LTXexample}[pos=t] +\begin{pspicture}(-5,-5)(5,5) +\psset{Radius=5,Dobs=200,Decran=200,path=../data} +\psset{PHI=10,THETA=120,circlewidth=1.5pt} +\WorldMapThreeD[circles=false,australia=true]% +\psmeridien{95.98} +\psparallel{3.30} +\psepicenter[circlecolor=red,waves=4,Rmax=2000](95.98,3.30){Sumatra} +\psmeridien[meridiencolor=green]{160} +\psparallel[parallelcolor=green]{52.76} +\psepicenter[circlecolor=green](160,52.76){Kamchatka} +\end{pspicture} +%\end{LTXexample} + + +\section{Les plaques tectoniques} + +Elles se tracent avec l'option \texttt{ridge}. Les différents types se +distinguent par des couleurs différentes (paramétrables : voir la partie +correspondant aux paramètres). + +Les données relatives aux plaques ont été obtenues sur le site : + +\centerline{\url{http://www.ig.utexas.edu/research/projects/plates/}} + +%\begin{LTXexample}[pos=t] +\begin{postscript} +\psset{unit=0.8,RotX=0,Decran=100,Dobs=100,PHI=0,THETA=-100,path=../data} +\begin{pspicture}(-5,-5)(5,5) +\WorldMapThreeD[gridmapcolor=yellow,circles=false,ridge=true]% +\psframe(4,-6.4)(10.5,-3.6) +\uput[r](4,-4){Tectonic plates boundaries} +\psline[linecolor=red,linewidth=2pt](4.2,-4.5)(5,-4.5)\uput[r](5,-4.5){\color{red}{Ridge}} +\psline[linecolor=darkgreen,linewidth=2pt](4.2,-5.25)(5,-5.25)\uput[r](5,-5.25){\color{darkgreen}{Trench}} +\psline[linecolor=orange,linewidth=2pt](4.2,-6)(5,-6)\uput[r](5,-6){\color{orange}{Transform}} +\end{pspicture}\\ +\begin{pspicture}(-5,-5)(5,5) +\psset{PHI=0,THETA=100} +\WorldMapThreeD[gridmapcolor=yellow,circles=false,ridge=true]% +\end{pspicture} +\end{postscript} + +%\end{LTXexample} + +\section{Les zones de fracture et les linéations magnétiques} + +%\begin{LTXexample}[pos=t] +\begin{postscript} +\psset{Decran=100,Dobs=100,unit=0.8,path=../data} +\begin{pspicture}(-5,-5)(5,5) +\psset{PHI=0,THETA=-90} +\WorldMapThreeD[gridmapcolor=yellow,circles=false,wfraczon=true]% +\psline[linecolor=red,linewidth=2pt](4.2,-5)(5,-5)\uput[r](5,-5){\color{red}{wzonfrac}} +\end{pspicture}\\ +\begin{pspicture}(-5,-5)(5,5) +\psset{PHI=0,THETA=90} +\WorldMapThreeD[gridmapcolor=yellow,circles=false,wfraczon=true]% +\end{pspicture} +\end{postscript} +%\end{LTXexample} +%\begin{LTXexample}[pos=t] + +\begin{postscript} +\psset{Decran=100,Dobs=100,unit=0.8,path=../data} +\begin{pspicture}(-5,-5)(5,5) +\psset{PHI=0,THETA=-90} +\WorldMapThreeD[gridmapcolor=yellow,circles=false,wmaglin=true]% +\psline[linecolor=darkblue,linewidth=2pt](4.2,-5)(5,-5)\uput[r](5,-5){\color{darkblue}{wmaglin}} +\end{pspicture}\\ +\begin{pspicture}(-5,-5)(5,5) +\psset{PHI=0,THETA=90} +\WorldMapThreeD[gridmapcolor=yellow,circles=false,wmaglin=true]% +\end{pspicture} +\end{postscript} +%\end{LTXexample} + + +\section{Quelques liens} +Le développement du package : \url{http://syracuse-dev.org/mpst-globe} + +\url{http://melusine.eu.org/syracuse/pstricks/pst-solides3d/} + +Pour les données sur les plaques tectoniques, les volcans, les +linéations magnétiques et le zones de fracture : + +\url{http://www.versamap.com/webdoc03.htm} + + +\nocite{*} +\bgroup +\RaggedRight +\bibliographystyle{plain} +\bibliography{PSTricks} +\egroup + + + +\end{document} diff --git a/Master/texmf-dist/tex/generic/pst-geo/pst-map3d.tex b/Master/texmf-dist/tex/generic/pst-geo/pst-map3d.tex index 6bfecd2f11a..7f0fcdd5008 100644 --- a/Master/texmf-dist/tex/generic/pst-geo/pst-map3d.tex +++ b/Master/texmf-dist/tex/generic/pst-geo/pst-map3d.tex @@ -7,40 +7,43 @@ %% %% Manuel Luque (France) %% Giuseppe Matarazzo (Italy) -%% Herbert Voss (Germany) %% -%% May 09, 2004 +%% May 29, 2008 %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: -%% `pst-map3d' is a PSTricks package to create geographical objects +%% `pst-map2dII' is a PSTricks package to create geographical objects %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% nouvelle version de pst-map3d % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \csname PSTMapThreeD\endcsname \let\PSTMapThreeDLoaded\endinput % Require PSTricks \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi -\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi % hv 2004-05-09 +\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi \ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex \fi -\def\fileversion{1.04} -\def\filedate{2008/04/05} +\def\fileversion{2.0} +\def\filedate{2008/03/05} -\message{`PST-map3d v\fileversion, \filedate\space (ML/GM/HV)} +\message{`PST-map3d v\fileversion, \filedate} \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax \pst@addfams{pst-map3d} % +\definecolor{orange}{cmyk}{0,0.61,0.87,0} +\definecolor{darkgreen}{cmyk}{1,0,1,0.5} \SpecialCoor % \define@key[psset]{pst-map3d}{path}{\edef\psk@WorldMap@Path{#1}} % chemin des données \psset{path=data} % -\pstheader{map3d.pro} +\pstheader{pst-map3d.pro} \define@key[psset]{pst-map3d}{RotX}{\edef\psk@TroisD@RotX{#1}} % rotation autour de Ox en degrés \define@key[psset]{pst-map3d}{RotY}{\edef\psk@TroisD@RotY{#1}} % rotation autour de Oy en degrés \define@key[psset]{pst-map3d}{RotZ}{\edef\psk@TroisD@RotZ{#1}} % rotation autour de OZ en degrés @@ -54,19 +57,127 @@ % \psset{RotX=0,RotY=0,RotZ=0,Radius=5} % -\define@key[psset]{pst-map3d}{increment}{\edef\psk@WorldMap@increment{#1}} -\psset{increment=10} +\define@key[psset]{pst-map3d}{Day}{\def\psk@WorldMap@J{#1}} +\define@key[psset]{pst-map3d}{Month}{\def\psk@WorldMap@M{#1}} +\define@key[psset]{pst-map3d}{Year}{\def\psk@WorldMap@A{#1}} +\psset{Day=\number\day,Month=\number\month,Year=\number\year} +\define@key[psset]{pst-map3d}{hour}{\edef\psk@WorldMap@hour{#1}} +\psset{hour=12} % en heures % -\define@key[psset]{pst-map3d}{maillageColor}{\edef\psk@WorldMap@maillageColor{#1}} -\psset{maillageColor= 0.5 0.5 0.5 } +\define@key[psset]{pst-map3d}{gridmapdiv}{\edef\psk@WorldMap@mapgriddiv{#1}} +\psset{gridmapdiv=10} % -\define@key[psset]{pst-map3d}{MapFillColor}{\edef\psk@WorldMap@Fillcolor{#1}} % couleur des continents -\psset{MapFillColor= 0.99 0.95 0.7 } +\define@key[psset]{pst-map3d}{longitudeMeridien}{\edef\psk@WorldMap@longitudeMeridien{#1}} +\psset{longitudeMeridien=0} % -\define@key[psset]{pst-map3d}{level}{\edef\psk@WorldMap@level{#1}} -\psset{level=1} +\newdimen\psmeridienwidth +\def\psset@meridienwidth#1{\pssetlength\psmeridienwidth{#1}} +\psset@meridienwidth{1pt} % -\def\geo@variablesIIID{% +\define@key[psset]{pst-map3d}{meridiencolor}{% +\pst@getcolor{#1}\psmeridiencolor} +\psset[pst-map3d]{meridiencolor=red} +% +\define@key[psset]{pst-map3d}{latitudeParallel}{\edef\psk@WorldMap@latitudeParallel{#1}} +\psset{latitudeParallel=0} +% +\newdimen\psparallelwidth +\def\psset@parallelwidth#1{\pssetlength\psparallelwidth{#1}} +\psset@parallelwidth{1pt} +% +\define@key[psset]{pst-map3d}{parallelcolor}{% +\pst@getcolor{#1}\psparallelcolor} +\psset[pst-map3d]{parallelcolor=red} +% + +\definecolor{terre}{rgb}{0.99,0.95,0.7} +\definecolor{mer}{rgb}{0.5,0.8,0.8} +\definecolor{darkblue}{cmyk}{1,1,0,0.7} + +\define@key[psset]{pst-map3d}{mapcolor}{% +\pst@getcolor{#1}\psmapcolor} +\psset[pst-map3d]{mapcolor=terre} + +\define@key[psset]{pst-map3d}{bordercolor}{% +\pst@getcolor{#1}\psbordercolor} +\psset[pst-map3d]{bordercolor=black} + +\define@key[psset]{pst-map3d}{islandcolor}{% +\pst@getcolor{#1}\psislandcolor} +\psset[pst-map3d]{islandcolor=black} + +\define@key[psset]{pst-map3d}{coastcolor}{% +\pst@getcolor{#1}\pscoastcolor} +\psset[pst-map3d]{coastcolor=black} + +\define@key[psset]{pst-map3d}{oceancolor}{% +\pst@getcolor{#1}\psoceancolor} +\psset[pst-map3d]{oceancolor=mer} + +\define@key[psset]{pst-map3d}{rivercolor}{% +\pst@getcolor{#1}\psrivercolor} +\psset[pst-map3d]{rivercolor=blue} + +\define@key[psset]{pst-map3d}{wfraczoncolor}{% +\pst@getcolor{#1}\pswfraczoncolor} +\psset[pst-map3d]{wfraczoncolor=red} + +\define@key[psset]{pst-map3d}{wmaglincolor}{% +\pst@getcolor{#1}\pswmaglincolor} +\psset[pst-map3d]{wmaglincolor=darkblue} + +\define@key[psset]{pst-map3d}{ridgecolor}{% +\pst@getcolor{#1}\psridgecolor} +\psset[pst-map3d]{ridgecolor=red} + +\define@key[psset]{pst-map3d}{transfrmcolor}{% +\pst@getcolor{#1}\pstransfrmcolor} +\psset[pst-map3d]{transfrmcolor=orange} + +\define@key[psset]{pst-map3d}{trenchcolor}{% +\pst@getcolor{#1}\pstrenchcolor} +\psset[pst-map3d]{trenchcolor=darkgreen} + +\define@key[psset]{pst-map3d}{gridmapcolor}{% +\pst@getcolor{#1}\psgridmapcolor} +\psset[pst-map3d]{gridmapcolor=black} + +\define@key[psset]{pst-map3d}{circlecolor}{% +\pst@getcolor{#1}\pscirclecolor} +\psset[pst-map3d]{circlecolor=blue} + +\define@key[psset]{pst-map3d}{circlesep}{\edef\psk@WorldMap@circlesep{#1}} +\psset{circlesep=2} % en degres + +\newdimen\pscirclewidth +\def\psset@circlewidth#1{\pssetlength\pscirclewidth{#1}} +\psset@circlewidth{.5pt} + +\newdimen\psgridmapwidth +\def\psset@gridmapwidth#1{\pssetlength\psgridmapwidth{#1}} +\psset@gridmapwidth{.8pt} + +\newdimen\psborderwidth +\def\psset@borderwidth#1{\pssetlength\psborderwidth{#1}} +\psset@borderwidth{.8pt} + +\newdimen\pscoastwidth +\def\psset@coastwidth#1{\pssetlength\pscoastwidth{#1}} +\psset@coastwidth{.8pt} + +\newdimen\pswfraczonwidth +\def\psset@wfraczonwidth#1{\pssetlength\pswfraczonwidth{#1}} +\psset@wfraczonwidth{.8pt} + +\newdimen\pswmaglinwidth +\def\psset@wmaglinwidth#1{\pssetlength\pswmaglinwidth{#1}} +\psset@wmaglinwidth{.8pt} + +\newdimen\psridgewidth +\def\psset@ridgewidth#1{\pssetlength\psridgewidth{#1}} +\psset@ridgewidth{2pt} + +\def\variablesTroisD{% /RotX \psk@TroisD@RotX\space def /RotY \psk@TroisD@RotY\space def /RotZ \psk@TroisD@RotZ\space def @@ -75,87 +186,408 @@ /Rsphere \psk@TroisD@Radius\space def /Dobs \psk@TroisD@Dobs\space def /DScreen \psk@TroisD@Ecran\space def - /step \psk@WorldMap@level\space def + /xunit {\pst@number\psxunit\space mul}def + /yunit {\pst@number\psyunit\space mul}def + /runit {\pst@number\psrunit\space mul}def }% % +\newif\ifPst@WorldMap@island +\define@key[psset]{pst-map3d}{islands}[false]{\@nameuse{Pst@WorldMap@island#1}} +\psset{islands=true} +% +\newif\ifPst@WorldMap@border +\define@key[psset]{pst-map3d}{borders}[false]{\@nameuse{Pst@WorldMap@border#1}} +\psset{borders=true} +% +\newif\ifPst@WorldMap@france +\define@key[psset]{pst-map3d}{france}[true]{\@nameuse{Pst@WorldMap@france#1}} +\psset{france=false} +% \newif\ifPst@WorldMap@capitals -\define@key[psset]{pst-map3d}{capital}[false]{\@nameuse{Pst@WorldMap@capitals#1}} -\psset{capital=false} +\define@key[psset]{pst-map3d}{capitals}[true]{\@nameuse{Pst@WorldMap@capitals#1}} +\psset{capitals=false} +% +\newif\ifPst@WorldMap@usa +\define@key[psset]{pst-map3d}{usa}[true]{\@nameuse{Pst@WorldMap@usa#1}} +\psset{usa=false} +% +\newif\ifPst@WorldMap@mexico +\define@key[psset]{pst-map3d}{mexico}[true]{\@nameuse{Pst@WorldMap@mexico#1}} +\psset{mexico=false} +% +\newif\ifPst@WorldMap@australia +\define@key[psset]{pst-map3d}{australia}[true]{\@nameuse{Pst@WorldMap@australia#1}} +\psset{australia=false} +% +\newif\ifPst@WorldMap@canada +\define@key[psset]{pst-map3d}{canada}[true]{\@nameuse{Pst@WorldMap@canada#1}} +\psset{canada=false} % \newif\ifPst@WorldMap@city -\define@key[psset]{pst-map3d}{city}[false]{\@nameuse{Pst@WorldMap@city#1}} -\psset{city=false} +\define@key[psset]{pst-map3d}{citys}[false]{\@nameuse{Pst@WorldMap@city#1}} +\psset{citys=false} % -\newif\ifPst@WorldMap@Rivers% hv 2004-05-03 -\define@key[psset]{pst-map3d}{rivers}[true]{\@nameuse{Pst@WorldMap@Rivers#1}} +\newif\ifPst@WorldMap@Rivers% +\define@key[psset]{pst-map3d}{rivers}[false]{\@nameuse{Pst@WorldMap@Rivers#1}} \psset{rivers=true} % -\newif\ifPst@WorldMap@maillage -\define@key[psset]{pst-map3d}{maillage}[true]{\@nameuse{Pst@WorldMap@maillage#1}} -\psset{maillage=true} +\newif\ifPst@WorldMap@Lake% +\define@key[psset]{pst-map3d}{lakes}[false]{\@nameuse{Pst@WorldMap@Lake#1}} +\psset{lakes=true} % +\newif\ifPst@WorldMap@gridmap +\define@key[psset]{pst-map3d}{gridmap}[true]{\@nameuse{Pst@WorldMap@gridmap#1}} +\psset{gridmap=true} +% +\newif\ifPst@WorldMap@coasts +\define@key[psset]{pst-map3d}{coasts}[true]{\@nameuse{Pst@WorldMap@coasts#1}} +\psset{coasts=false} +% +\newif\ifPst@WorldMap@fraczon +\define@key[psset]{pst-map3d}{wfraczon}[true]{\@nameuse{Pst@WorldMap@fraczon#1}} +\psset{wfraczon=false} +% +\newif\ifPst@WorldMap@ridge +\define@key[psset]{pst-map3d}{ridge}[true]{\@nameuse{Pst@WorldMap@ridge#1}} +\psset{ridge=false} +% +\newif\ifPst@WorldMap@maglin +\define@key[psset]{pst-map3d}{wmaglin}[true]{\@nameuse{Pst@WorldMap@maglin#1}} +\psset{wmaglin=false} +% +\newif\ifPst@WorldMap@circles +\define@key[psset]{pst-map3d}{circles}[false]{\@nameuse{Pst@WorldMap@circles#1}} +\psset{circles=true} +% +\newif\ifPst@WorldMap@visibility +\define@key[psset]{pst-map3d}{visibility}[false]{\@nameuse{Pst@WorldMap@visibility#1}} +\psset{visibility=true} +% +\newif\ifPst@WorldMap@blueEarth +\define@key[psset]{pst-map3d}{blueEarth}[false]{\@nameuse{Pst@WorldMap@blueEarth#1}} +\psset{blueEarth=true} +% +\newif\ifPst@WorldMap@ombre +\define@key[psset]{pst-map3d}{daynight}[true]{\@nameuse{Pst@WorldMap@ombre#1}} +\psset{daynight=false} +% \def\WorldMapThreeD{\pst@object{WorldMapThreeD}} \def\WorldMapThreeD@i{\@ifnextchar[{\WorldMapThreeD@do}{\WorldMapThreeD@do[]}} \def\WorldMapThreeD@do[#1]{{% \psset{#1}% -\begin@ClosedObj +\begin@ClosedObj% \addto@pscode{% - /increment \psk@WorldMap@increment\space def - \geo@variablesIIID - (\psk@WorldMap@Path/river.dat) run - (\psk@WorldMap@Path/pisland.dat) run - (\psk@WorldMap@Path/pborder.dat) run - (\psk@WorldMap@Path/plake.dat) run + /increment \psk@WorldMap@mapgriddiv\space def + \variablesTroisD + /mapcolor {\pst@usecolor\psmapcolor currentrgbcolor} def + /bordercolor {\pst@usecolor\psbordercolor currentrgbcolor} def + /coastcolor {\pst@usecolor\pscoastcolor currentrgbcolor} def + /islandcolor {\pst@usecolor\psislandcolor currentrgbcolor} def + /maillagecolor {\pst@usecolor\psgridmapcolor currentrgbcolor} def + /oceancolor {\pst@usecolor\psoceancolor currentrgbcolor} def + /rivercolor {\pst@usecolor\psrivercolor currentrgbcolor} def + /wfraczoncolor {\pst@usecolor\pswfraczoncolor currentrgbcolor} def + /wmaglincolor {\pst@usecolor\pswmaglincolor currentrgbcolor} def + /ridgecolor {\pst@usecolor\psridgecolor currentrgbcolor} def + /transfrmcolor {\pst@usecolor\pstransfrmcolor currentrgbcolor} def + /trenchcolor {\pst@usecolor\pstrenchcolor currentrgbcolor} def + /circlecolor {\pst@usecolor\pscirclecolor currentrgbcolor} def + /circlewidth {\pst@number\pscirclewidth SLW} def + /circlesep \psk@WorldMap@circlesep\space def + /maillagewidth {\pst@number\psgridmapwidth SLW} def + /borderwidth {\pst@number\psborderwidth SLW} def + /coastwidth {\pst@number\pscoastwidth SLW} def + /wfraczonwidth {\pst@number\pswfraczonwidth SLW} def + /wmaglinwidth {\pst@number\pswmaglinwidth SLW} def + /ridgewidth {\pst@number\psridgewidth SLW} def + /longitude_meridien \psk@WorldMap@longitudeMeridien\space def + /meridienwidth {\pst@number\psmeridienwidth SLW} def + /meridiencolor {\pst@usecolor\psmeridiencolor currentrgbcolor} def + /latitude_parallel \psk@WorldMap@latitudeParallel\space def + /parallelwidth {\pst@number\psparallelwidth SLW} def + /parallelcolor {\pst@usecolor\psparallelcolor currentrgbcolor} def + /year \psk@WorldMap@A\space def + /month \psk@WorldMap@M\space def + /day \psk@WorldMap@J\space def + month 3 lt {/month month 12 add def /year year 1 sub def} if + /AA year 100 div truncate def + /BB 2 AA sub AA 4 div truncate add def + /CC 365.25 year mul truncate def + /DD 30.6001 month 1 add mul truncate def + /julien BB CC add DD add day add 1720994.5 add def + /hour \psk@WorldMap@hour\space def + /jours julien 2454367 sub def + /AngleRayonsSoleil latitude_parallel 23.5 sin 360 jours mul 365.25 div sin mul arccos sub def + /u1 0 def /u2 AngleRayonsSoleil cos def /u3 AngleRayonsSoleil sin def +% /Julien jd hour 24 div add def + % 1 setlinejoin 0 0 translate - /xunit {\pst@number\psxunit\space mul}def - /yunit {\pst@number\psyunit\space mul}def - /runit {\pst@number\psrunit\space mul}def - gsave - newpath - 0.5 0.8 0.8 setrgbcolor - % cercle vu par l'observateur + /pst@fill { \psk@opacityalpha .setopacityalpha fill } def + tx@map3DDict begin + MatriceTransformationZXY +% /RsphereScreen Rsphere DScreen mul Dobs div 1 Rsphere dup mul Dobs dup mul div sub sqrt div runit def +% +/GrandCercle { + % cercle vu par l'observateur 0 0 RsphereScreen 0 360 arc closepath - fill +} def +% +\ifPst@WorldMap@visibility + /condition { 0 ge } def +\else + /condition { 0 le } def +\fi +% +\ifPst@WorldMap@ombre + the_night +\fi +% +\ifPst@WorldMap@blueEarth + gsave + newpath + oceancolor + GrandCercle + pst@fill % fill grestore - /condition {PSfacette 0 le} def - /departPhi -90 def -tx@map3DDict begin - MatriceTransformation -/Draw { - { -CalculsPoints -closepath +\fi +% +\ifPst@WorldMap@circles gsave -Color setrgbcolor -fill + oceans_seas_hatched grestore -stroke -} forall -}def -%/Color {0.5 0.8 0.5} def -/Color {\psk@WorldMap@Fillcolor} def -border - Draw -islands - Draw -/Color {0.5 0.8 0.8} def -lake - Draw -% les rivières -\ifPst@WorldMap@Rivers % hv 2004-05-03 - /DrawRivers { - { CalculsPoints - 0 0 1 setrgbcolor - stroke - } forall - }def - river - DrawRivers \fi +% +\ifPst@WorldMap@border + (\psk@WorldMap@Path/pborder.dat) run +gsave +GrandCercle +clip +border dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + closepath + gsave + mapcolor + pst@fill % fill + grestore + borderwidth + bordercolor + stroke + }forall +grestore +\fi +% +\ifPst@WorldMap@island + (\psk@WorldMap@Path/pisland.dat) run +gsave +GrandCercle +clip +islands dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + closepath + gsave + mapcolor + pst@fill % fill + grestore + borderwidth + islandcolor + stroke + }forall +grestore +\fi + % +\ifPst@WorldMap@france + (\psk@WorldMap@Path/france.dat) run +gsave +GrandCercle +clip +france dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + closepath + gsave + mapcolor + pst@fill % fill + grestore + borderwidth + bordercolor + stroke + }forall +grestore +\fi +% +\ifPst@WorldMap@Lake + (\psk@WorldMap@Path/plake.dat) run +gsave +GrandCercle +clip +lake dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + closepath + gsave + oceancolor + pst@fill % fill + grestore +% borderwidth +% bordercolor +0 0 1 setrgbcolor + stroke + }forall +grestore +\fi +% +\ifPst@WorldMap@coasts + (\psk@WorldMap@Path/pcoast.dat) run +gsave +GrandCercle +clip +coasts dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + coastwidth + coastcolor + stroke + }forall +grestore +\fi +% +\ifPst@WorldMap@usa + (\psk@WorldMap@Path/usa.dat) run +gsave +GrandCercle +clip +usa dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + borderwidth + bordercolor + stroke + }forall +grestore +\fi +% +\ifPst@WorldMap@mexico + (\psk@WorldMap@Path/mex.dat) run +gsave +GrandCercle +clip +mexico dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + borderwidth + bordercolor + stroke + }forall +grestore +\fi +% +\ifPst@WorldMap@australia + (\psk@WorldMap@Path/aus.dat) run +gsave +GrandCercle +clip +australia dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + borderwidth + bordercolor + stroke + }forall +grestore +\fi +% +\ifPst@WorldMap@canada + (\psk@WorldMap@Path/canada.dat) run +gsave +GrandCercle +clip +canada dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + borderwidth + bordercolor + stroke + }forall +grestore +\fi +% +\ifPst@WorldMap@fraczon + (\psk@WorldMap@Path/wfraczon.dat) run +GrandCercle +clip +wfraczon dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + wfraczoncolor + wfraczonwidth + stroke}forall +\fi +% +\ifPst@WorldMap@maglin + (\psk@WorldMap@Path/wmaglin.dat) run +GrandCercle +clip +wmaglin dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + wmaglincolor + wmaglinwidth + stroke}forall +\fi +% +\ifPst@WorldMap@ridge + (\psk@WorldMap@Path/ridge.dat) run +gsave +GrandCercle +clip +ridge dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + ridgecolor + ridgewidth + stroke}forall +grestore + (\psk@WorldMap@Path/transfrm.dat) run +gsave +GrandCercle +clip +transfrm dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + transfrmcolor + ridgewidth + stroke}forall +grestore + (\psk@WorldMap@Path/trench.dat) run +gsave +GrandCercle +clip +trench dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + trenchcolor + ridgewidth + stroke}forall +grestore +\fi +% +\ifPst@WorldMap@Rivers + (\psk@WorldMap@Path/river.dat) run +GrandCercle +clip +river dup /REGION exch def +CompteurRegions +{CalculsPointsRegion + rivercolor + stroke}forall +\fi +% \ifPst@WorldMap@city % les capitales (\psk@WorldMap@Path/c-cap.dat) run @@ -175,13 +607,190 @@ DrawCitys citycapitals DrawCitys \fi -\ifPst@WorldMap@maillage -/maillageColor {\psk@WorldMap@maillageColor} def +% +\ifPst@WorldMap@gridmap MaillageSphere \fi end}% -\end@ClosedObj +\end@ClosedObj}} +% placer une ville en particulier +% par sa longitude et sa latitude en degrés +% si la ville n'est pas visible +% elle est rejetée hors de l'écran +\def\pnodeMapIIID{\pst@object{pnodeMapIIID}} +\def\pnodeMapIIID@i(#1,#2)#3{% + \begin@SpecialObj% + \pnode( ! + \variablesTroisD + tx@map3DDict begin + MatriceTransformationZXY + /Xpoint {#2 cos #1 cos mul Rsphere mul} def + /Ypoint {#2 cos #1 sin mul Rsphere mul} def + /Zpoint {#2 sin Rsphere mul } def + CalculsPointsAfterTransformations +% CalcCoordinates +% /YcoorCity exch def /XcoorCity exch def +% Test +% PS 0 ge % +% {XcoorCity YcoorCity } +% {/XcoorCity 1000 def /YcoorCity 1000 def} +% ifelse +formulesTroisD + Xi Yi end){#3}% + \end@SpecialObj% + \ignorespaces}% +% +% adaptation de \mapput de \pst-map2d} +\define@key[psset]{pst-map3d}{mapCountry}{\edef\psk@WorldMap@mapCountry{#1}} +\psset{mapCountry=all} +\define@key[psset]{pst-map3d}{nodeWidth}{\edef\psk@WorldMap@nodeWidth{#1}} +\psset{nodeWidth=1mm} +\newpsstyle{psNodeMapStyle}{fillstyle=solid,fillcolor=red} +\newpsstyle{NodeLabelStyle}{fillstyle=solid,fillcolor=yellow,framesep=0,linestyle=none} + +% +\def\mapputIIID{\@ifnextchar[{\mapputIIID@i}{\mapputIIID@i[90]}} +\def\mapputIIID@i[#1](#2,#3){\@ifnextchar[{\mapputIIID@iii[#1](#2,#3)}{\mapputIIID@ii[#1](#2,#3)}} +\def\mapputIIID@ii[#1](#2,#3)#4{\mapputIIID@iii[#1](#2,#3)[#4]{#4}} +\def\mapputIIID@iii[#1](#2,#3)[#4]#5{% + \@ifnextchar[{\mapputIIID@iv[#1](#2,#3)[#4]#5}{\mapputIIID@iv[#1](#2,#3)[#4]#5[\@empty]}} +\def\mapputIIID@iv[#1](#2,#3)[#4]#5[#6]{{% +% [angle](longitude,lattitude)[node name]{node label}[country] + \def\pst@tempb{all} + \ifx\pst@tempb\psk@WorldMap@mapCountry + \mapputIIID@v[#1](#2,#3)[#4]{#5}% + \else + \def\pst@tempb{#6}% +% \typeout{Compare \pst@tempb{} with \psk@WorldMap@mapCountry} + \ifx\pst@tempb\psk@WorldMap@mapCountry + \mapputIIID@v[#1](#2,#3)[#4]{#5} + \fi% + \fi% }} +\def\mapputIIID@v[#1](#2,#3)[#4]#5{{% + \pnodeMapIIID(#2,#3){#4} +% \typeout{Node: #4} + \pst@dima=\psk@WorldMap@nodeWidth + \pscircle[style=psNodeMapStyle](#4){\pst@dima} + \pscircle*(#4){0.5\pst@dima} + \uput{1.2\pst@dima}[#1](#4){\psframebox[style=NodeLabelStyle]{\sf#5}}% +}} +% +% dessiner un méridien de longitude donnée +% longitude en degrés +\def\psmeridien{\pst@object{psmeridien}} +\def\psmeridien@i#1{% + \pst@killglue + \begingroup + \begin@SpecialObj% + \addto@pscode{% + \variablesTroisD + /longitude_meridien #1 def + /meridienwidth {\pst@number\psmeridienwidth SLW} def + /meridiencolor {\pst@usecolor\psmeridiencolor currentrgbcolor} def + tx@map3DDict begin + MatriceTransformationZXY + \ifPst@WorldMap@visibility + /condition { 0 ge } def + \else + /condition { 0 le } def + \fi + meridien + end}% + \end@SpecialObj% + \endgroup% + \ignorespaces% +} % +% dessiner un cercle parallèle à l'équateur de latitude donnée +% latitude en degrés +\def\psparallel{\pst@object{psparallel}} +\def\psparallel@i#1{% + \pst@killglue + \begingroup + \begin@SpecialObj% + \addto@pscode{% + \variablesTroisD + /latitude_parallel #1 def + /parallelwidth {\pst@number\psparallelwidth SLW} def + /parallelcolor {\pst@usecolor\psparallelcolor currentrgbcolor} def + tx@map3DDict begin + MatriceTransformationZXY + \ifPst@WorldMap@visibility + /condition { 0 ge } def + \else + /condition { 0 le } def + \fi + Parallel + parallelwidth + parallelcolor + stroke + end}% + \end@SpecialObj% + \endgroup% + \ignorespaces% +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% le dessin du globe tellure +%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\define@key[psset]{pst-map3d}{styleGlobe}{% style du globe +\edef\psk@styleGlobe{#1}} + +\define@key[psset]{pst-map3d}{styleNight}{% style de la partie dans la nuit +\edef\psk@styleNight{#1}} + +\newpsstyle{Globe}{circles=true} +\newpsstyle{night}{fillstyle=solid,fillcolor=black,opacity=0.8} +\psset[pst-map3d]{styleGlobe=Globe,styleNight=night} + +\def\psGlobeTellure{\pst@object{psGlobeTellure}} +\def\psGlobeTellure@i(#1,#2)#3{% longitude, latitude et nom de la ville + \begin@SpecialObj% + \pnode(!/ux 0 def /uy 90 #2 sub sin def /uz 90 #2 sub cos def 0 0){ttt}% + \psset{THETA=0,PHI=0}% + {\psset{RotX=#2 90 sub,RotZ=90 #1 add} + \WorldMapThreeD[style=\psk@styleGlobe,daynight=false]% + \mapputIIID(#1,#2){#3}}% + \WorldMapThreeD[style=\psk@styleNight,daynight=true,circles=false,blueEarth=false, + borders=false,islands=false, + rivers=false,lakes=false, + gridmap=false,latitudeParallel=#2]% + \psframe*(! -3 \psk@TroisD@Radius\space neg -1.5 add)(!3 \psk@TroisD@Radius\space neg -0.5 add) + \rput(! 0 \psk@TroisD@Radius\space neg -1 add){\white\psk@WorldMap@hour h le \psk@WorldMap@J/\psk@WorldMap@M/\psk@WorldMap@A} + \end@SpecialObj% + \ignorespaces}% + +%%%%%%%%%%%%%%%%%%%%%%%%% + +% épicentre d'un tremblement de terre +% Earthquake Epicenters +% +\define@key[psset]{pst-map3d}{waves}{\edef\psk@WorldMap@waves{#1}} +\psset{waves=3} % nombre de cercles concentriques +\define@key[psset]{pst-map3d}{Rmax}{\edef\psk@WorldMap@Rmax{#1}} +\psset{Rmax=1500} % rayon maximum du séisme en km + +\def\psepicenter{\pst@object{psepicenter}} +\def\psepicenter@i(#1,#2)#3{% + \begin@SpecialObj% + \addto@pscode{% + \variablesTroisD + /longitude #1 def + /latitude #2 def + /nbre \psk@WorldMap@waves\space def + /dphi \psk@WorldMap@Rmax\space 0.008983 mul def + /circlecolor {\pst@usecolor\pscirclecolor currentrgbcolor} def + /circlewidth {\pst@number\pscirclewidth SLW} def + tx@map3DDict begin + circlecolor + circlewidth + nbre dphi longitude latitude + ondes + end}% + \mapputIIID(#1,#2){#3} + \end@SpecialObj% + \ignorespaces% +} \catcode`\@=\PstAtCode\relax \endinput diff --git a/Master/texmf-dist/tex/latex/pst-geo/pst-map3d.sty b/Master/texmf-dist/tex/latex/pst-geo/pst-map3d.sty index 4094b6d8114..13fe0a7c877 100644 --- a/Master/texmf-dist/tex/latex/pst-geo/pst-map3d.sty +++ b/Master/texmf-dist/tex/latex/pst-geo/pst-map3d.sty @@ -2,5 +2,9 @@ \ProvidesPackage{pst-map3d}[2004/01/05 package wrapper for PSTricks pst-map3d.tex (hv)] \input{pst-map3d.tex} \ProvidesFile{pst-map3d.tex} - [\filedate\space v\fileversion\space `PST-map3d' (mljm,hv)] + [\filedate\space v\fileversion\space `PST-map3d' (ml,jm,hv)] +\IfFileExists{pst-map3d.pro}{% + \ProvidesFile{pst-map3d.pro} + [2008/03/22 v. 1.0, PostScript prologue file (ml)] +\@addtofilelist{pst-map3d.pro}}{}% \endinput -- cgit v1.2.3