Accueil de Gladir.com Notes légales de Gladir.com Flux RSS des nouvelles du site Gladir.com - Langage de programmation - Perl - Colorimétrie - Boite en 3D de couleur RVB Section du logiciel DOS «MonsterBook» Inventaire de la bibliothèque de Gladir.com Entrée administrateur

J'ai longuement hésité, tant qu'à savoir, si je devais mettre ou non, un exemple d'affichage du Cube RVB en 3 dimensions. Est-ce vraiment utile? Il semblerait que, dans un certain sens, oui, puisque je considère que cela permettra pour plusieurs de développer leur imagination dans un sens pratique du traitement des couleurs. Le concept de l'image suivante est fort simple, il faut créer des coordonnées en 3 dimensions de façon à égaler toujours la même somme total en coordonnée lorsqu'on affiche dans une couleur. Avant de commencer assurez-vous d'avoir installé le paquet Tk approprié comme l'exemple suivant :

C:\>ppm install Tk

Voici le code source Perl :

  1. #!/usr/bin/perl
  2.  
  3. use Tk;
  4. use strict;
  5.  
  6. use constant CenterHorizontal => 320 >> 1;
  7. use constant CenterVertical => 320 >> 1;
  8.  
  9. my $mw = MainWindow->new;
  10. $mw->title("Cube RVB");
  11. my $canvas = $mw->Canvas( -width=>320, -height=>300, -background=>"white");
  12. $canvas->pack(-expand => 1, -fill => 'both');
  13.  
  14. sub SetPixel3D($$$$$$) {
  15.  my($X, $Y, $Z, $R, $G, $B) = @_;
  16.  my $color = sprintf("#%04x%04x%04x", $R * 256, $G * 256, $B * 256);
  17.  $X = CenterHorizontal + $X - ($Z >> 1);
  18.  $Y = CenterVertical - $Y + ($Z >> 1);
  19.  $canvas->createLine($X, $Y, $X + 1, $Y + 1, -width => 1, -fill=>$color);
  20. }
  21.  
  22. for(my $I = 0; $I <= 149; $I++) {
  23.  &SetPixel3D(0, 0, $I, 0, 0, 0);
  24.  &SetPixel3D(0, $I, 0, 0, 0, 0);
  25.  &SetPixel3D($I, 0, 0, 0, 0, 0);
  26. }
  27. for(my $J = 99; $J >= 0; $J--) {
  28.  for(my $I = 0; $I <= 99; $I++) {
  29.    &SetPixel3D($I, $J, 99, $I, $J, 99);
  30.  }
  31. }
  32. for(my $K = 0; $K <= 99; $K++) {
  33.  for(my $I = 0; $I <= 99; $I++) {
  34.   &SetPixel3D($I, 99, $K, $I, 99, $K);
  35.  }
  36. }
  37. for(my $J = 99; $J >= 0; $J--) {
  38.  for(my $K = 0; $K <= 99; $K++) {
  39.   &SetPixel3D(99, $J, $K, 99, $J, $K);
  40.  }
  41. }
  42.  
  43. MainLoop;

Voici en terminant un exemple du résultat de se petit programme :

Dernière mise à jour: Vendredi, le 23 décembre 2011