Terug
Maak je eigen Maan
Klik de plaatjes aan om ze te downloaden.
Je hebt vast wel eens een maankaart gezien met alle kraters.
Om die op een bol te kunnen plakken, zodat je een echt
maanmodel
krijgt moet je een platte kaart
met een speciaal computervision computerprogramma met
OpenCV
vervormen zoals hieronder gebeurd is.
Wat heb je nodig?
Je hebt voor je maanmodel een bol of bal nodig waar je papier op kunt plakken.
Zes centimeter diameter is een goede afmeting, groter dan 10 cm diameter
is niet aan te bevelen.
Je kunt bijvoorbeeld (de kern van) een oude tennisbal gebruiken.
Download onderstaande afbeeldingen en print ze uit zodat ze
zo precies mogelijk 1.571 maal zo groot zijn als de diameter van de
toekomstige maanbol.
Op veel printers kun je de afmeting in
inches
opgeven. Reken dat om volgens de formule 1 inch = 2,54 centimeter.
Knip de maankaarten zorgvuldig uit. Je hebt dan twee schijfjes papier
met elk 12 flapjes die je precies op de bol kunt plakken.
Zowel op de noordpool als de zuidpool van de Maan komen dan vier flapjes
met de hoekunten bij elkaar. Dat zijn de bovenste en onderste punten
van de afbeeldingen hieronder.
De oorspronkelijke (platte) kaarten zijn respectievelijk
https://tile.loc.gov/image-services/iiif/service:gmd:gmd3:g3196:g3196a:ct002487/full/pct:25/0/default.jpg
en
https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Moon_Farside_LRO.jpg/2048px-Moon_Farside_LRO.jpg
De voorkant van de Maan
De Maan draait zó om zijn as dat altijd dezelfde kant naar de Aarde gekeerd is.
Door kleine schommelingen en door vanaf verschillende punten op Aarde te
kijken is net iets meer dan 50 % van het oppervlak voor ons zichtbaar.
Op beide onderstaande kaarten is Noord boven.
De achterkant van de Maan
De kant van de Maan die vanaf de Aarde niet te zien is,
is door satellieten uitgebreid gefotografeerd en in kaart gebracht.
Voor de liefhebbers, de gebruikte sourcecode
Met weglatng van details.
#define FORK(n) for(k=0;k<(n);k++)
count=(int *)cvAlloc((nsector+1)*sizeof(int));
Fillremap();
cvRemap(src,dest,remapx,remapy,interpolation+CV_WARP_FILL_OUTLIERS,CV_RGB(backr,backg,backb));
static void
Fillremap(void)
{
int i,j,k;
double dx,dy,r,phi,beta,xf,yf;
double ratio,phisector,dphi;
FORK(nsector+1)count[k]=0;
FORJ(destheight)
{
dy=j-ycdest;
FORI(destwidth)
{
xf=1.0+ycsrc;
yf=1.0+xcsrc;
dx=i-xcdest;
r=sqrt(dx*dx+dy*dy);
if(r>TINY)phi=M_PI+atan2(dy,dx);
else phi=0.0;
beta=r/radius;
ratio=sin(beta)/beta;
if(r<=pole)
{
xf=ratio*r*sin(phi);
yf=ratio*r*cos(phi);
}
if(r>pole && r<=destradius)
{
FORK(nsector)
{
if(phi>=k*TWOPI/nsector && phi<(k+1)*TWOPI/nsector)break;
}
count[k]++;
phisector=(k+0.5)*TWOPI/nsector;
if(phisector>TWOPI)phisector -= TWOPI;
dphi=phi-phisector;
if(dphi>=0.0 && dphi<=ratio*M_PI/nsector)
{
xf=ratio*r*sin(phisector+(dphi/ratio));
yf=ratio*r*cos(phisector+(dphi/ratio));
}
if(dphi<0.0 && dphi>= -ratio*M_PI/nsector)
{
xf=ratio*r*sin(phisector+(dphi/ratio));
yf=ratio*r*cos(phisector+(dphi/ratio));
}
}
cvSetReal2D(remapx,j,i,(float)(xcsrc-yf));
cvSetReal2D(remapy,j,i,(float)(ycsrc-xf));
}
}
FORK(nsector+1)printf("k=%2d %9d pixels in sector k.\n",k,count[k]);
}
Versie 2023-10-17. © Harm J. Schoonhoven, Utrecht, 2023.