% Das Programm zeichnet einen Sechseck, ein Viereck und ein ausgefülltes Dreieck.
% Die kombinierte Figur wird 20 mal gedreht gemäss Gleichung 2.21, Seite 21
% Das Beispiel zeigt, wie Farben geändert werden können über einen Handle
% des Grafikfensters
% File: YvesPeyer.m
% 19. Juni 2002
% Yves Peyer
% ---------------------------------------------------------------------------------

clear;                                   % Variablen löschen
clf;                                      % Grafikfenster löschen
h=figure(gcf);                      % Handle für Figur nur zur Aenderung von Figureneigenschaften
i=1;                                     % Laufvariable
ii=1;                                     % Laufvariable
n=20;                                 % n=Anzahl Drehungen
xd=7;                                 % Horizontal Versatz des Drehpunktes
yd=7;                                 % Vertikal Versatz des Drehpunktes
hold on;                             % Grafik beibehalten

% Definition der Objekte
Dreieck=[-1 0 1 -1;-1 1 -1 -1;1 1 1 1];                                                     % Matrix Dreieck
Viereck=[-2 -2 2 2 -2;-2 2 2 -2 -2;1 1 1 1 1];                                          % Matrix Viereck
Sechseck=[-5 0 5 5 0 -5 -5;-2.5 -5 -2.5 2.5 5 2.5 -2.5;1 1 1 1 1 1 1];      % Matrix Sechseck 
gk=[0 1 3;0 1.5 2;1 1 1];                                                                         % Matrix für geknickte Gerade

% Vektor-Uebergabe in RGB (R G B;R G B;etc)
Farben_1=[1 0 1;1 0 0.8;1 0 0.6;1 0 0.4;1 0 0.2;1 0 0;1 0.8 0;1 0.6 0;1 0.4 0;1 0.2 0];                         % Farbenmatrix 1
Farben_2=[0 0 1;0 0 0.8;0 0 0.6;0 0 0.4;0 0 0.2;1 0 0;0.8 0 0;0.6 0 0;0.4 0 0;0.2 0 0];                         % Farbenmatrix 2
Farben_3=[1 0 1;0.8 0 0.8;0.6 0 0.6;0.4 0 0.4;0.2 0 0.2;1 0 1;0.8 0 0.8;0.6 0 0.6;0.4 0 0.4;0.2 0 0.2];   % Farbenmatrix 3

while ii<=n
    Drehung1 = ((2*pi)/20)*ii;                                  % Schrittweite im Bogenmass
    
    DrehMatrix1=[cos(Drehung1) -sin(Drehung1) 0;sin(Drehung1) cos(Drehung1) 0;0 0 1];
    ResMatrixgk= DrehMatrix1 * gk;                          % einfach genickte Gerade
   
    f= mod(ii,8) + 1;                                                % i Modulo 8
    
    h=plot (ResMatrixgk(1,:),ResMatrixgk(2,:));           % Ploten vom geknickte Gerade
    set(h,'Color',Farben_1(f,:));                                 % Farbe setzen
    
    axis ([-10 10 -10 10]);                                        % Definition der Achse
    ii = ii + 1;
    
    pause (0.1);                                                       % Zeitverzögerung
end

while i<=n
    
    Drehung=((2*pi)/20)*i;                                                                                    % Schrittweite im Bogenmass
    VerschiebeMatrix=[1 0 xd;0 1 yd;0 0 1];                                                            % Verschiebematrix
    RueckVerschMatrix=[1 0 -xd;0 1 -yd;0 0 1];                                                      % Rückverschiebematrix
    
    DrehMatrix=[cos(Drehung) -sin(Drehung) 0;sin(Drehung) cos(Drehung) 0;0 0 1];  % Drehmatrix
    ResMatrixv=VerschiebeMatrix*DrehMatrix*RueckVerschMatrix*Viereck;                 % Viereck
    ResMatrixd=VerschiebeMatrix*DrehMatrix*RueckVerschMatrix*Dreieck;                 % Dreieck
    ResMatrixs=VerschiebeMatrix*DrehMatrix*RueckVerschMatrix*Sechseck;              % Sechseck
    
    VergroessernSechseck=[i/5 0 0;0 i/5 0;0 0 0]*ResMatrixs;                             % Vergrössern vom Sechseck
    VergroessernViereck=[i/5 0 0;0 i/5 0;0 0 0]*ResMatrixv;                               % Vergrössern vom Viereck
    VergroessernDreieck=[i/5 0 0;0 i/5 0;0 0 0]*ResMatrixd;                               % Vergrössern vom Dreieck

    f=mod(i,10)+1;                                                                                         % i Modulo 8

    h=plot(VergroessernViereck(1, :),VergroessernViereck(2,:));                         % Ploten vom Viereck
    set(h,'Color',Farben_1(f,:));                                                                       % Farbe setzen
    h=plot(VergroessernDreieck(1, :),VergroessernDreieck(2,:));                         % Ploten vom Dreieck
    set(h,'Color',Farben_2(f,:));                                                                       % Farbe setzen
    fill(VergroessernDreieck(1,:),VergroessernDreieck(2,:),Farben_1(f,:));            % Ausfüllen einer Figur
    h=plot(VergroessernSechseck(1, :),VergroessernSechseck(2,:));                   % Ploten vom Sechseck
    set(h,'Color',Farben_3(f,:));                                                                       % Farbe setzen

    i= i+1;
    
    axis([-40 40 -20 60]);                                                                              % Definition der Achsen
    pause(0.1);                                                                                               % Zeitverzögerung
end