%Pascal/MATLAB-Kurs Oktober 2001, Gerhard Opfer
%Es soll eine gegebene mit ganzen, positen Zahlen besetzte Matrix M
%als ein Farbarray gezeigt werden. Die Farben  selbst werden als 
%Tripel [r g b] dargestellt mit 0<=r, g, b<=1. Die Zahlen darin bestimmem
%die Mischung aus den drei Farben rot (r), gruen (g), blau (b): also z. B.
%[1 0 0]: rot
%[0 1 0]: gruen
%[0 0 1]: blau
%[0 0 0]: schwarz
%[1 1 1]: weiss
%[1 1 0]: gelb
%[1 0 1]: magenta
%[0 1 1]: cyan
%[0.5 0.5 0.5]: grau
%alpha*[1 1 1]: Grautoene, 0<=alpha<=1
%alpha*[1 0 0]: Rottoene, 0<=alpha<=1, kleines alpha dunkelrot
%[1 0.62 0.62]: Kupfer
%[0.49 1 0.83]: Aquamarin

%Wir beginnen mit einem einfachen Beispiel:
M=[1 2 3; 4 5 6];
%Um den Zahlen 1 bis 6 eine Farbe zuzuordnen, definieren wir eine Farbtabelle
%bestehend aus 6 Zeilen und 3 Spalten entsprechend der obigen Farbdefinition.
%Also

Map=[1 0 0   %rot
     0 1 0   %gruen
     0 0 1   %blau
     0 0 0   %schwarz
     1 1 1   %weiss
     1 1 0]; %gelb
zeit=3; %Laenge der Pause in Sekunden
%Der Vorgang ist immer derselbe, naemlich

%1. Herstellung einer (mxn)-Matrix M mit ganzzahligen Eintr\"agen 
%   im Bereich [u,o] mit 1<=u<=o.
%2. Definition einer Farbtabelle Map in Form einer (o,3)-Matrix.
%   Die Zeile j in Map repr\"sentiert die Farbe j in der Matrix M. 
%   Dann verwende man die entscheidende Befehlssequenz
%   image(M);colormap(Map); 
%   Dann wird der Schirm (oder das Papier) unterteilt in mxn Rechtecke
%   und das kleine Rechteck an der Position (l,k) wird gef\"arbt 
%   mit der durch j=M(l,j) definierten Farbe, die indirekt 
%   durch die j-te Zeile von Map definiert ist.
image(M);colormap(Map); %Gibt hier ein 2x3 Farbmuster
disp('Vom Benutzer definierte Farben');pause(zeit)

%image(M) stellt die Matrix dar unter Verwendung der in Map 
%angegebenen Informationen. Benutzt wird dazu die vorgefertigte
%Prozedur 'colormap', die den Zusammenhang herstellt.

%Es gibt auch vordefinierte Farbzuordnungen: Map=colorcube(n) definiert
%fuer die ganzen Zahlen von 1 bis n gewisse Farben.
image(M);colormap(colorcube(6)); %Ein Muster aus Grautoenen. 
disp('Vorgefertigte Farbpalette "colorcube"');pause(zeit)

%Um ohne groesseren Aufwand grosse Farbmatrizen herzustellen, verwenden wir  
%Zufallszahlen. Eine analoge Technik (mit anders definierten Matrizen)
%kann auch verwendet werden, um zweidimensionale  Einzugsbereiche des 
%Newton-Verfahrens zu zeichnen, gibt schoene Bilder mit fraktalen Raendern.

mm=2; nn=3;
for j=1:3
  figure(j)
  m=10^(j-1)*mm; n=10^(j-1)*nn;  %zuerst (2,3), dann (20,30), dann (200,300)
  M=round(63*rand(m,n))+1; %gibt ganze Zufallszahlen in [1,64]
  Map=rand(64,3); %64 Zeilen mit jeweils drei Zufallszahlen in [0,1]
  image(M); colormap(Map);
  figure(j+3);
  image(M); colormap(colorcube); %Dasselbe mit anderer Farbtabelle
end; %for
pause(5); close(1:6);

%Weiteres Beispiel: Schachbrett
disp('Schachbrett');
Schachbrett=zeros(8,8);
Schachbrett(1:2:7,1:2:7)=ones(4,4);
Schachbrett(2:2:8,2:2:8)=ones(4,4);%schachbrettartige Verteilung von 0 und 1
Schachbrett=Schachbrett+1;%schachbrettartige Verteilung von 1 und 2
map=[0,0,0;1,1,1]; %nur schwarz-weiss, Farbe1=schwarz.
image(Schachbrett);colormap(map); axis square;
xlabel('Schachbrett');
%Aufgabe: Man verwandele die senkrechten 1,...,8 in A,...,H
