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.

moon-front-mapped.jpg

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.
moon-back-mapped.jpg
top.jpg top.jpg

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.