Fichier mp-geotrans.mp (figure 1) — Modifié le 16 Mars 2008 à 22 h 24

Globe transparent

mp-geotrans.mp (figure 1)
Source

prologues:=2;

input geometriesyr16;

color tan,payscolor,cielfonce;
tan=(0.824,0.705,0.55);
payscolor=tan;
cielfonce=(0.25,0.75,1);

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)=rayon*cosd(c*t)*cosd(c*v)
enddef;

vardef FY(expr t,v)=rayon*cosd(c*t)*sind(c*v)
enddef;

vardef FZ(expr t,v)=rayon*sind(c*t)
enddef;

vardef arcsind(expr x)=%Définition mathématique en degré ici :)
  angle((sqrt(1-x**2),x))
enddef;

numeric nbpts,nblec,nbcapitales;

string arborescence;
arborescence:="../DATA/";

path pays[];path paysnonvus[];

vardef lecture(expr nomfichier,fond)=
  color Coord[],Pays[],Paysnonvus[];
  numeric ll,lnv;
  ll:=0;lnv:=0;
  nbpts:=scantokens readfrom nomfichier;
  for k=1 upto (nbpts div 3):
    pair latlon;
    latlon=((scantokens readfrom nomfichier)+(scantokens readfrom nomfichier)+(scantokens readfrom nomfichier))/3;
    Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
    if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
      if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
	ll:=ll+1;
	Pays[k]=Coord[k];
	Paysnonvus[k]=2*Coord[k];
      else:
	Pays[k]=2*Coord[k];
	Paysnonvus[k]=2*Coord[k];
      fi;
    else:
      Pays[k]=2*Coord[k];
      lnv:=lnv+1;
      Paysnonvus[k]=Coord[k];
    fi;
  endfor;
  closefrom nomfichier;
  if ll>0:
    nbvus:=nbvus+1;
    pays[nbvus]=Projgeo(Pays[1])
    for l=2 upto (nbpts div 3):
      --Projgeo(Pays[l])
    endfor;
  else:
    nbnonvus:=nbnonvus+1;
    %show nbnonvus;
    paysnonvus[nbnonvus]=Projgeo(Paysnonvus[1])
    for l=2 upto (nbpts div 3):
      --Projgeo(Paysnonvus[l])
    endfor;
  fi;
  if lnv>0:
    nbnonvus:=nbnonvus+1;
    %show nbnonvus;
    paysnonvus[nbnonvus]=Projgeo(Paysnonvus[1])
    for l=2 upto (nbpts div 3):
      --Projgeo(Paysnonvus[l])
    endfor;
  fi;
enddef;

string NomFichier;

vardef Lecture(expr Nomfichier)=
  NomFichier:=arborescence&Nomfichier;
  nblec:=scantokens readfrom NomFichier;
  for w=1 upto nblec:
    lecture(scantokens readfrom NomFichier);
  endfor;
  closefrom NomFichier;
enddef;

string nomfichiermul;

vardef Lectureiles=
  nomfichiermul:=arborescence&"iles.dat";
  nblec:=scantokens readfrom nomfichiermul;
  for p=1 upto nblec:
    color Coord[],fond,Pays[],Paysnonvus[];
    numeric ll,lnv;
    ll:=0;lnv:=0;
    nbpts:=scantokens readfrom nomfichiermul;
    fond=scantokens readfrom nomfichiermul;
    for k=1 upto nbpts:
      pair latlon;
      latlon=scantokens readfrom nomfichiermul;
      Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
      if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
	if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
	  ll:=ll+1;
	  Pays[k]=Coord[k];
	  Paysnonvus[k]=2*Coord[k];
	else:
	  Pays[k]=2*Coord[k];
	  Paysnonvus[k]=2*Coord[k];
	fi;
      else:
	Pays[k]=2*Coord[k];
	lnv:=lnv+1;
	Paysnonvus[k]=Coord[k];
      fi;
    endfor;
    if ll>0:
      nbvus:=nbvus+1;
      pays[nbvus]=Projgeo(Pays[1])
      for l=2 upto nbpts:
	--Projgeo(Pays[l])
      endfor;
    else:
      nbnonvus:=nbnonvus+1;
      %show nbnonvus;
      paysnonvus[nbnonvus]=Projgeo(Paysnonvus[1])
      for l=2 upto nbpts:
	--Projgeo(Paysnonvus[l])
      endfor;
    fi;
    if lnv>0:
      nbnonvus:=nbnonvus+1;
      %show nbnonvus;
      paysnonvus[nbnonvus]=Projgeo(Paysnonvus[1])
      for l=2 upto nbpts:
	--Projgeo(Paysnonvus[l])
      endfor;
    fi;
  endfor;
  closefrom nomfichiermul;
enddef;

vardef Recap=
  %message("nombre de pays non vus (partiellement ou total)");
  %show nbnonvus;
  %message("nombre de pays vus (partiellement ou total)");
  %show nbvus;
  for k=1 upto nbnonvus:
    remplis paysnonvus[k]--cycle withcolor tan;
    trace paysnonvus[k];
  endfor;
  fillcolor:=ciel;
  transparence cercles(pte3,pte1,pte3,pte1,pte4);
  for k=1 upto nbvus:
    remplis pays[k]--cycle withcolor tan;
    trace pays[k];
  endfor;
  clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
enddef;

nbvus:=0;
nbnonvus:=0;

rayon:=2;

vardef MaillageS=
  path Maillage[];
  color CentMaillage[];
  for k=Udebut step 0.5*pasU until (Ufin):
    for l=Vdebut step pasV until (Vfin):
      Maillage[100*k+l]=Projgeo((FX(k,l),FY(k,l),FZ(k,l)))--Projgeo((FX(k,l+pasV),FY(k,l+pasV),FZ(k,l+pasV)))--Projgeo((FX(k+pasU,l+pasV),FY(k+pasU,l+pasV),FZ(k+pasU,l+pasV)))--Projgeo((FX(k+pasU,l),FY(k+pasU,l),FZ(k+pasU,l)))--cycle;
      if ProduitScalaire(1/2[(FX(k,l),FY(k,l),FZ(k,l)),(FX(k+pasU,l+pasV),FY(k+pasU,l+pasV),FZ(k+pasU,l+pasV))]-pte3,Oeil-pte3)>0:
	draw Maillage[100*k+l];
      fi;
    endfor;
  endfor;
enddef;

vardef InitialiseMaillage(expr ud,uf,up,vd,vf,vp)=
  Udebut:=ud;
  Ufin:=uf;
  pasU:=up;
  Vdebut:=vd;
  Vfin:=vf;
  pasV:=vp;
enddef;

vardef MaillageSphere=
  InitialiseMaillage(((phim div 10)+1)*pi/18,((phip div 10)-1)*pi/18,pi/18,-pi,pi,pi/36);
  MaillageS;
enddef;

vardef Mappemonde(expr longobs,latobs)=
  figureespace(-100u,-100u,100u,100u);
  Initialisation(5,longobs,latobs,750);
  numeric phim,phip,phii;%phi moins -- phi plus - phi intermédiaire
  phim=Phi+arcsind(rayon/Rho)-90;
  phip=Phi+90-arcsind(rayon/Rho);
  color pte[];
  pte1=rayon*(cosd(phim)*cosd(Theta),cosd(phim)*sind(Theta),sind(phim));
  pte2=rayon*(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;
  Lecture("Cameriquesud.dat");
  Lecture("Cameriquecentrale.dat");
  Lecture("Ccaraibes.dat");
  Lecture("Cameriquenord.dat");
  Lecture("Casie.dat");
  Lecture("Ceurope.dat");
  Lecture("Cafrique.dat");
  %Lecturelacs;
  Lectureiles;
  %Lecturerivieres;
  Recap;
  trace cercles(pte3,pte1,pte3,pte1,pte4);
  finespace;
enddef;

Mappemonde(-35,50);

end