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. Voici le code source Oberon .NET :
MODULE rgbbox;
IMPORT System,System.Drawing,System.Windows.Forms;
CONST
CenterHorizontal = 320 DIV 2;
CenterVertical = 320 DIV 2;
TYPE
RGBBOXApp = OBJECT IMPLEMENTS System.Windows.Forms.Form;
PROCEDURE SetPixel3D(e:System.Windows.Forms.PaintEventArgs;X,Y,Z,R,G,B:INTEGER);
VAR
p: System.Drawing.Pen;
BEGIN
NEW(p,System.Drawing.Color.FromArgb(R, G, B));
e.get_Graphics().DrawRectangle(p, CenterHorizontal + X - (Z DIV 2), CenterVertical - Y + (Z DIV 2), 1, 1);
END SetPixel3D;
PROCEDURE Painting(sender: OBJECT; pe: System.Windows.Forms.PaintEventArgs);
VAR
I,J,K:INTEGER;
BEGIN
FOR I := 0 TO 149 DO
SetPixel3D(pe, 0, 0, I, 0,0,0);
SetPixel3D(pe, 0, I, 0, 0,0,0);
SetPixel3D(pe, I, 0, 0, 0,0,0);
END;
FOR J := 99 TO 0 BY -1 DO
FOR I := 0 TO 99 DO
SetPixel3D(pe, I, J, 99, I, J, 99);
END;
END;
FOR K := 0 TO 99 DO
FOR I := 0 TO 99 DO
SetPixel3D(pe, I, 99, K, I, 99, K);
END;
END;
FOR J := 99 TO 0 BY -1 DO
FOR K := 0 TO 99 DO
SetPixel3D(pe, 99, J, K, 99, J, K);
END;
END;
END Painting;
PROCEDURE NEW();
VAR
PaintHandler:System.Windows.Forms.PaintEventHandler;
BEGIN
NEW(PaintHandler, Painting);
System.Windows.Forms.Form.add_Paint(PaintHandler);
System.Windows.Forms.Form.set_Text("Cube RVB");
System.Windows.Forms.Form.set_Width(320);
System.Windows.Forms.Form.set_Height(320);
System.Windows.Forms.Form.set_BackColor(System.Drawing.Color.FromArgb(255, 255, 255));
END NEW;
END RGBBOXApp;
VAR
rgbboxapp:RGBBOXApp;
BEGIN
NEW(rgbboxapp);
System.Windows.Forms.Application.Run(System.Windows.Forms.Form(rgbboxapp));
END rgbbox.
Voici en terminant un exemple du résultat de se petit programme :
Dernière mise à jour : Samedi, le 2 février 2008