--- /dev/null
+%j'ai du modifier main_memory
+%sous Debian Etch
+%modifier /etc/texmf/texmf.d/95NonPath.cnf
+%main_memory:1500000->40000000 !!!!
+%puis update-texmf
+%puis fmtutil-sys --refresh
+% ->not ok :( "independent variables" pose problème.
+% solution: réduction du nombre de points placés.
+% pb suivant : lorsque l'on a une position de l'observateur avec un
+% phi>90, rien ne s'affiche->réglé
+
+% autre solution envisagée ici : lecture des données dans un fichier
+% extérieur au format dat par exemple
+
+% il faut changer aussi le path size :) >2000 pour une version avec ..
+% au lieu de -- mais cette version marche pas :(
+% modifier /etc/texmf/texmf.d/95NonPath.cnf
+% path_size.mpost=10000
+
+% readfrom files=30. Comment changer ? Pas la peine : inclusion d'un
+% closefrom (présent dans metapost depuis 0.64) pour clotûrer vraiment
+% chaque fichier en fin de lecture. quand readfrom lit une ligne d'un
+% fichier, il ne passe pas de suite à la prochaine ligne, il attend
+% simplement le prochain ordre "readfrom".
+
+% ajout de LectureMultiple pour les iles (utilisable pour les lacs :
+% dépassement metapost ?)
+
+prologues:=2;
+
+input geometriesyr16;
+
+vardef Projgeo(expr X)=
+ pair $;
+ numeric Xobs,Yobs,Zobs,XProj,YProj;
+ Xobs = -redpart(X)*Aux1 + greenpart(X)*Aux3;
+ Yobs = -redpart(X)*Aux5 - greenpart(X)*Aux6 + bluepart(X)*Aux4;
+ Zobs = -redpart(X)*Aux7 - greenpart(X)*Aux8 - bluepart(X)*Aux2 + Rho;
+ XProj = DE*Xobs/Zobs;
+ YProj = DE*Yobs/Zobs;
+ $=(XProj,YProj);
+ $
+enddef;
+
+vardef FX(expr t,v)=ray*cosd(c*t)*cosd(c*v)
+enddef;
+
+vardef FY(expr t,v)=ray*cosd(c*t)*sind(c*v)
+enddef;
+
+vardef FZ(expr t,v)=ray*sind(c*t)
+enddef;
+
+vardef arcsind(expr x)=%Définition mathématique en degré ici :)
+ angle((sqrt(1-x**2),x))
+enddef;
+
+numeric nbpts;
+
+vardef lecture(expr nomfichier,fond)=
+ color Coord[];
+ numeric ll;
+ ll:=0;
+ color Pays[];
+ nbpts:=scantokens readfrom nomfichier;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichier;
+ Coord[k]=ray*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),
+ cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+ ll:=ll+1;
+ Pays[k]=Coord[k];
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+ closefrom nomfichier;
+ path pays;
+ if ll>0:
+ pays=Projgeo(Pays[1])
+ for l=2 upto nbpts:
+ --Projgeo(Pays[l])
+ endfor;
+ remplis pays--cycle withcolor fond;
+ trace pays;
+ clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+ fi;
+enddef;
+
+vardef lecturemanuel(expr nomfichier,fond)=
+ color Coord[];
+ numeric ll;
+ ll:=0;
+ color Pays[];
+ nbpts:=scantokens readfrom nomfichier;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichier;
+ Coord[k]=ray*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),
+ cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+ if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+ ll:=ll+1;
+ Pays[k]=Coord[k];
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ else:
+ Pays[k]=2*Coord[k];
+ fi;
+ endfor;
+ closefrom nomfichier;
+ path pays;
+ if ll>0:
+ pays=Projgeo(Pays[1])
+ for l=2 upto nbpts:
+ --Projgeo(Pays[l])
+ endfor;
+ remplis pays--cycle withcolor fond;
+ trace pays;
+ %clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+ fi;
+enddef;
+
+vardef lectureexemple(expr nomfichier,fond)=
+ color Coord[];
+ numeric ll;
+ ll:=0;
+ color Pays[];
+ nbpts:=scantokens readfrom nomfichier;
+ for k=1 upto nbpts:
+ pair latlon;
+ latlon=scantokens readfrom nomfichier;
+ Coord[k]=ray*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),
+ cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+ endfor;
+ closefrom nomfichier;
+ path pays;
+ pays=Projgeo(Coord[1])
+ for l=2 upto nbpts:
+ --Projgeo(Coord[l])
+ endfor;
+ trace pays dashed evenly;
+ %clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+enddef;
+
+
+ray:=2;
+
+figureespace(-100u,-100u,100u,100u);
+Initialisation(5,-115,-10,750);
+numeric phim,phip,phii;%phi moins -- phi plus - phi intermédiaire
+phim=Phi+arcsind(ray/Rho)-90;
+phip=Phi+90-arcsind(ray/Rho);
+color pte[];
+pte1=ray*(cosd(phim)*cosd(Theta),cosd(phim)*sind(Theta),sind(phim));
+pte2=ray*(cosd(phip)*cosd(Theta),cosd(phip)*sind(Theta),sind(phip));
+pte3=iso(pte1,pte2);
+pte4-pte3=Normal((0,0,0),pte1,pte2);
+if (Phi>90):
+ phip:=180-phip;
+ phii:=180-phim;
+ phim:=phip;
+ phip:=phii;
+fi;
+if (Phi<-90):
+ phip:=-180-phip;
+ phii:=-180-phim;
+ phim:=phip;
+ phip:=phii;
+fi;
+remplis cercles(pte3,pte1,pte3,pte1,pte4) withcolor ciel;
+%%amerique du sud :) Manque l'arctique.
+lecturemanuel("../DATA/bresil.dat",vert);
+trace cercles(pte3,pte1,pte3,pte1,pte4);
+finespace;
+
+figureespace(-100u,-100u,100u,100u);
+Initialisation(5,-115,-10,750);
+numeric phim,phip,phii;%phi moins -- phi plus - phi intermédiaire
+phim=Phi+arcsind(ray/Rho)-90;
+phip=Phi+90-arcsind(ray/Rho);
+color pte[];
+pte1=ray*(cosd(phim)*cosd(Theta),cosd(phim)*sind(Theta),sind(phim));
+pte2=ray*(cosd(phip)*cosd(Theta),cosd(phip)*sind(Theta),sind(phip));
+pte3=iso(pte1,pte2);
+pte4-pte3=Normal((0,0,0),pte1,pte2);
+if (Phi>90):
+ phip:=180-phip;
+ phii:=180-phim;
+ phim:=phip;
+ phip:=phii;
+fi;
+if (Phi<-90):
+ phip:=-180-phip;
+ phii:=-180-phim;
+ phim:=phip;
+ phip:=phii;
+fi;
+remplis cercles(pte3,pte1,pte3,pte1,pte4) withcolor ciel;
+%%amerique du sud :) Manque l'arctique.
+lecture("../DATA/bresil.dat",vert);
+lectureexemple("../DATA/bresil.dat",noir);
+trace cercles(pte3,pte1,pte3,pte1,pte4);
+finespace;
+end
\ No newline at end of file