Voici de quoi fabriquer 5 des 8 planètes et la Lune.
L’idée de l’auteur est toute simple, il utilise un plugin de Gimp à partir des textures des planètes de la NASA.
Le texte se trouve bas de l’article.
Mercure, La Terre, la Lune, Mars, Jupiter et Saturne sont disponibles.
En y zoomant un peu plus, voilà le résultat
Télécharger les Globes des planètes à fabriquer - jpg (616 téléchargements ) – 1.32 mo
.
.
Le plugin à utiliser avec Gimp mais très (trop) long à utiliser. Mieux vaut télécharger les globes directement.
#!/usr/bin/perl use Gimp; use Gimp::Fu; register "make_globe_gore_map", "Create a globe gore map from a cylindrical map.", <<ENDOFHELP http://www.vendian.org/mncharity/dir3/planet_globes/ Given a flat horizontal RGB image which is the cylindrical projection map of a sphere (a planet, etc), creates an interrupted sinusoidal gore map, suitable for printing, cutting out, and bending into a paper globe. It runs _very_ slowly. (e.g. hour-ish) (I used an inefficient (but portable) mechanism to access the pixels. gimp-drawable-{get,set}-pixel ) Comments encouraged, Mitchell Charity <mcharity\@vendian.org> ENDOFHELP , "Mitchell Charity <mcharity\@vendian.org>", "(c)2001 Mitchell Charity - GPL.", "20011115", # the date this script was written (YYYYMMDD) N_"<Image>/Filters/Render/Make Globe...", # N_"<Image>/Make Globe...", "RGB*", [ # argument type, switch name , a short description , default value, extra arguments [PF_INT , "n_gores" , "The number of gores to use. (e.g. 4,8,12,24,etc)", 12], # [PF_RADIO , "alignment" , "Gore alignment", 0, [inline => 0, staggered => 1]], ], sub { my($image,$drawable,$n_gores,$staggeredp)=@_; $staggeredp = 0; my $gore_w = $image->width / $n_gores; my $gore_h = $image->height / 2; my $gore_half_w = $gore_w / 2; my $gore_h_top = rint($gore_h); my $gore_h_bot = $image->height - $gore_h_top; my @x_breakpoints; for(my $i = 0; $i < ($n_gores * 2); $i++) { my $x = $i * $gore_half_w; $x = rint($x); push(@x_breakpoints, $x); } my $w_leftmost = $x_breakpoints[1] - $x_breakpoints[0]; push(@x_breakpoints,$image->width); push(@x_breakpoints,$image->width + $w_leftmost); my $output_width = $image->width + ($staggeredp ? $w_leftmost : 0); my $common_height = $image->height; my $img = Image->new($output_width, $common_height, RGB); my $bgl = Layer->new($img, $output_width, $common_height, RGB_IMAGE, "Background", 100, NORMAL_MODE); $img->add_layer($bgl,0); $bgl->drawable_fill(WHITE_IMAGE_FILL); my $res = $image->width / 10; $img->set_resolution($res,$res); my $lay; my $new_layer = sub { my($name) = @_; $lay = Layer->new($img, $output_width, $common_height, RGBA_IMAGE, $name, 100, NORMAL_MODE); $img->add_layer($lay,-1); $lay->drawable_fill(TRANS_IMAGE_FILL); }; $img->display_new(); Gimp->progress_init("Making globe gores...", -1); $img->undo_push_group_start; my $update = sub { $lay->update(0,0,$img->width,$img->height); Gimp->displays_flush(); Gimp->progress_update($_[0]); }; for(my $i = 0; $i < $n_gores; $i++) { &$new_layer("Gore ".($i+1)); my $x0 = shift @x_breakpoints; my $x1 = shift @x_breakpoints; my $x2 = $x_breakpoints[0]; my $x3 = $x_breakpoints[1]; my $w0 = $x1 - $x0; my $w1 = $x2 - $x1; my $w2 = $x3 - $x2; my($BLx,$BLw) = $staggeredp ? ($x1,$w1) : ($x0,$w0); my($BRx,$BRw) = $staggeredp ? ($x2,$w2) : ($x1,$w1); my $BRxout = $BRx; ($BRx,$BRw) = (0,$w_leftmost) if $staggeredp && $i == ($n_gores - 1); &$update($i/$n_gores); &draw_half_gore($drawable,$x0,0,$w0,$gore_h_top,$lay,$x0,0, 'TL'); &$update(($i+0.25)/$n_gores); &draw_half_gore($drawable,$x1,0,$w1,$gore_h_top,$lay,$x1,0, 'TR'); &$update(($i+0.5)/$n_gores); &draw_half_gore($drawable,$BLx,$gore_h_top,$BLw,$gore_h_bot,$lay,$BLx,$gore_h_top, 'BL'); &$update(($i+0.75)/$n_gores); &draw_half_gore($drawable,$BRx,$gore_h_top,$BRw,$gore_h_bot,$lay,$BRxout,$gore_h_top, 'BR'); } &$update(1); $img->undo_push_group_end; (); }; exit main; sub draw_half_gore { my($in,$x,$y,$w,$h,$out,$outx,$outy,$quarter) = @_; my $tipattop = $quarter =~ /T/; my $tipatleft = $quarter =~ /R/; for(my $row = 0; $row < $h; $row++) { my $from_tip = ($tipattop ? ($h - $row) : ($row + 1)); my $row_w = &rint($w * cos($from_tip / $h * (3.141526/2))); $row_w = 1 if $row_w == 0; my $col_spread = $w / $row_w; my $col_offset = $tipatleft ? 0 : ($w - $row_w); for(my $col = 0; $col < $row_w; $col++) { my $ix = $x + int($col * $col_spread); my $ox = $outx + $col_offset + $col; my $iy = $y + $row; my $oy = $outy + $row; my @pix = &Gimp::gimp_drawable_get_pixel($in,$ix,$iy); $pix[3] = 255; &Gimp::gimp_drawable_set_pixel($out,$ox,$oy,\@pix); } } } sub sgn ($) { $_[0] >= 0 ? 1 : -1 } sub rint ($) { my $f = $_[0]; my $r = int($f); $r += sgn($f) if abs($f - $r) >= 0.5; $r; }