Fichier exemplemanuel.mp (figure 1) — Modifié le 16 Mars 2008 à 18 h 38
%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