%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  Programmname	    :  Drehmatrix.m
%
%  Erstellt durch   :  Patric Lengacher
%  Erstellt am      :  16. Juni 2002
%
%  Version          :  1.000
%
%  Beschreibung     :  Es soll mit hilfe von diversen Matrixen eine Grafik geplotet werden und diese soll nach Wunsch
%                      des Users n-mal wiederholt werden. Das Script erstelt vier Grafiken in je einem Grafikfenster
%                      (Subplot).
%                      1. Grafik  ->  Grundaufgabe die im Buch gestell wird.
%                      2. Grafik  ->  Dreieck das die Farbe ändert.
%                      3. Grafik  ->  Kreis der immer kleiner wird und die Farbe langsam ändern.
%                      4. Grafik  ->  TSU Schriftzug der wie eine Spierale der von innen nach aussen geplotet wird.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  Änderungen	    :  nil
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% Definition der Variablen und Kordinaten 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Konstanten die vom User gesetzt werden können
XPunkt       = 0;                                           % Rotationspunkt X (X-Punkt um den sich die Grafik Dreht)
YPunkt       = 0;                                           % Rotationspunkt Y (Y-Punkt um den sich die Grafik Dreht)
AnzKreise_1  = 1;                                           % Anzahl Drehungen der Grafik in dem ersten Grafikfenster
AnzTeile_1   = 50;                                          % Anzahl Grafiken die auf dem ersten Grafikfenster geplotet werden
AnzKreise_2  = 1;                                           % Anzahl Drehungen der Grafik in dem zweiten Grafikfenster
AnzTeile_2   = 100;                                         % Anzahl Grafiken die auf dem zweiten Grafikfenster geplotet werden 
AnzKreise_3  = 8;                                           % Anzahl Drehungen der Grafik in dem dritten Grafikfenster
AnzTeile_3   = 140;                                         % Anzahl Grafiken die auf dem dritten Grafikfenster geplotet werden 
AnzKreise_4  = 3;                                           % Anzahl Drehungen der Grafik in dem vierten Grafikfenster
AnzTeile_4   = 70;                                          % Anzahl Grafiken die auf dem vierten Grafikfenster geplotet werden 

% Arbeitsvatiablen und dehren Initialisierung
AnzTeile     = 1;                                           % Anzahl Teile
AnzKreise    = 1;                                           % Anzahl der Umdrehungen um den Fixen Punkt
WorkNum      = 0;                                           % Variable die zum Zählen gebraucht wird
Drehung      = 0;                                           % Initalisierung der Variablen für die Drehung
oX           = 0;                                           % Offset für die X-Achse (Für Grafik "TSU Zeichen")                                 
oY           = 0;                                           % Offset für die Y-Achse (Für Grafik "TSU Zeichen")
Farben       = hsv(1);                                      % Farbverlaufs mit n Schritten

% Konstanten
Bild_1       = 1;
Bild_2       = 2;
Bild_3       = 3;
Bild_4       = 4;
Exit         = 5;
Bild_Nr      = Bild_1;



% Berechnen und Ausgeben der Grafiken
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clf;                                                        % Löschen des Grafikfensters

while Bild_Nr < Exit;
   % Initialisierung die für alle Grafiken gilt aber bei jedem durchlauf gesetze werden muss
   Drehung = (((AnzKreise * 2) * pi) / AnzTeile) * WorkNum;
   WorkNum = WorkNum + 1;
   % Matrix mit der die Drehung berechnet wird
   DrehMatrix  = [cos(Drehung) -sin(Drehung) 0;
                  sin(Drehung)  cos(Drehung) 0;
                  0             0            1];
   % Rückverschiebungsmatrix
   RueckMatrix = [1             0           -XPunkt;
                  0             1           -YPunkt;
                  0             0            1];
   % Verschiebungsmatrix
   VerMatrix   = [1             0            XPunkt;
                  0             1            YPunkt;
                  0             0            1];

   switch Bild_Nr
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Polten des Bild 1 (Aufgabenstellung)
      case Bild_1
         % Initalisierung der einzelnen Werte die Bildspetzifisch sind
         subplot(2, 2, Bild_1);                             % Ausgeben der Grafik in das erste Fenster
         title('Grundaufgabe aus dem Buch');                % Ausgeben eines Titels auf das Grafikfensters
         AnzTeile   = AnzTeile_1;                           % Anzahl Teile dei geplotet werden
         AnzKreise  = AnzKreise_1;                          % Anzahl der Umdrehungen um den Fixen Punkt
         axis ([-4+XPunkt 4+XPunkt -4+YPunkt 4+YPunkt]);    % Definition der X und Y-Achse (Wertebereich)
         hold on;                                           % Beibehlten der Grafiken die schn ausgegeben wurden
      
         % Eckpunkte des Stockes
         Stock = [0+XPunkt   1+XPunkt   3+XPunkt;
                  0+YPunkt 1.5+YPunkt   2+YPunkt;
                  ones([1, 3])];
              
         % Ausgabe des Stockes auf das Grafikfenster
         Ausgabe = VerMatrix * DrehMatrix * RueckMatrix * Stock;
         plot(Ausgabe(1,:), Ausgabe(2,:));

      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Polten des Bild 2 (Ändern der Farbe -> "Dreick")
      case Bild_2
         % Initalisierung der einzelnen Werte die Bildspetzifisch sind
          subplot(2, 2, Bild_2);                             % Ausgeben der Grafik in das zweite Fenster
          title('Dreieck das die Farbe ändert');             % Ausgeben eines Titels auf das Grafikfensters
          AnzTeile   = AnzTeile_2;                           % Anzahl Teile dei geplotet werden
          AnzKreise  = AnzKreise_2;                          % Anzahl der Umdrehungen um den Fixen Punkt
          Farben     = hsv(AnzTeile);                        % Farbverlaufs mit n Schritten
          axis ([-10+XPunkt 10+XPunkt -10+YPunkt 10+YPunkt]);% Definition der X und Y-Achse (Wertebereich)
          hold on;                                           % Beibehlten der Grafiken die schn ausgegeben wurden
          
          % Eckpunkte des Dreieckes
          Dreieck = [0  0  6  0;
                     3  9  4  3;
                     ones([1, 4])];

          % Ausgabe des Dreieckes auf das Grafikfenster
         Ausgabe = VerMatrix * DrehMatrix * RueckMatrix * Dreieck;
         fill(Ausgabe(1,:), Ausgabe(2,:), Farben(WorkNum,:));         
          
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Polten des Bild 3 (Ändern der Grösseun Farbe -> "Kreis")
      case Bild_3
         % Initalisierung der einzelnen Werte die Bildspetzifisch sind
         subplot(2, 2, Bild_3);                             % Ausgeben der Grafik in das dritte Fenster
         title('Kreis der die Farbe und Grösse ändert');    % Ausgeben eines Titels auf das Grafikfensters
         AnzTeile   = AnzTeile_3;                           % Anzahl Teile dei geplotet werden
         AnzKreise  = AnzKreise_3;                          % Anzahl der Umdrehungen um den Fixen Punkt
         Farben     = hsv(AnzTeile);                        % Farbverlaufs mit n Schritten
         axis ([-30+XPunkt 30+XPunkt -30+YPunkt 30+YPunkt]);% Definition der X und Y-Achse (Wertebereich)
         hold on;                                           % Beibehlten der Grafiken die schon ausgegeben wurden
      
         % Berechnen eines Kreises
         Vektor      = (0: 0.1: 10);
         Abschnitt_1 = sin(Vektor * pi) * (10 - (WorkNum * 0.065));
         Abschnitt_2 = cos(Vektor * pi) * (10 - (WorkNum * 0.065));
         
         % Punkte die auf dem Kreis liegen
         Kreis = [Abschnitt_1+10+XPunkt;
                  Abschnitt_2+10+YPunkt;
                  ones([1, 101])];
         
         % Ausgabe des Kreises
         Ausgabe = VerMatrix * DrehMatrix * RueckMatrix * Kreis;
         fill(Ausgabe(1,:), Ausgabe(2,:), Farben(WorkNum,:));         

      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Polten des Bild 4 (TSU Zeichen)
      case Bild_4
         % Initalisierung der einzelnen Werte die Bildspetzifisch sind
         subplot(2, 2, Bild_4);                             % Ausgeben der Grafik in das vierte Fenster
         title('--== TSU-Schriftzug ==--');                 % Ausgeben eines Titels auf das Grafikfensters
         AnzTeile   = AnzTeile_4;                           % Anzahl Teile dei geplotet werden
         AnzKreise  = AnzKreise_4;                          % Anzahl der Umdrehungen um den Fixen Punkt
         Farben     = hsv(AnzTeile);                        % Farbverlaufs mit n Schritten
         axis ([-45+XPunkt 45+XPunkt -45+YPunkt 45+YPunkt]);% Definition der X und Y-Achse (Wertebereich)
         hold on;                                           % Beibehlten der Grafiken die schon ausgegeben wurden

         % Berechnungen der neuen Offset-Positionen X und Y
         oY = oY + 0.35;
         oX = oX + 0.35;

         % Eckpukte X und Y des Buchstabens "T"
         Buchstabe_T = [1+oX+XPunkt  2+oX+XPunkt  2+oX+XPunkt  3+oX+XPunkt  3+oX+XPunkt  0+oX+XPunkt  0+oX+XPunkt  1+oX+XPunkt  1+oX+XPunkt;
                        0+oY+YPunkt  0+oY+YPunkt  4+oY+YPunkt  4+oY+YPunkt  5+oY+YPunkt  5+oY+YPunkt  4+oY+YPunkt  4+oY+YPunkt  0+oY+YPunkt;
                        ones([1, 9])];
         % Eckpukte X und Y des Buchstabens "S"
         Buchstabe_S = [4+oX+XPunkt  7+oX+XPunkt  7+oX+XPunkt  5+oX+XPunkt  5+oX+XPunkt  7+oX+XPunkt  7+oX+XPunkt  4+oX+XPunkt  4+oX+XPunkt  6+oX+XPunkt  6+oX+XPunkt  4+oX+XPunkt  4+oX+XPunkt;
                        0+oY+YPunkt  0+oY+YPunkt  3+oY+YPunkt  3+oY+YPunkt  4+oY+YPunkt  4+oY+YPunkt  5+oY+YPunkt  5+oY+YPunkt  2+oY+YPunkt  2+oY+YPunkt  1+oY+YPunkt  1+oY+YPunkt  0+oY+YPunkt;
                        ones([1, 13])];
         % Eckpukte X und Y des Buchstabens "U"
         Buchstabe_U = [8+oX+XPunkt 11+oX+XPunkt 11+oX+XPunkt 10+oX+XPunkt 10+oX+XPunkt  9+oX+XPunkt  9+oX+XPunkt  8+oX+XPunkt  8+oX+XPunkt;
                        0+oY+YPunkt  0+oY+YPunkt  5+oY+YPunkt  5+oY+YPunkt  1+oY+YPunkt  1+oY+YPunkt  5+oY+YPunkt  5+oY+YPunkt  0+oY+YPunkt;
                        ones([1, 9])];

         % Ausgabe des Buchstabens "T" auf den Bildschirm 
         Ausgabe = VerMatrix * DrehMatrix * RueckMatrix * Buchstabe_T;
         fill(Ausgabe(1,:), Ausgabe(2,:), 'R');
         % Ausgabe des Buchstabens "S" auf den Bildschirm 
         Ausgabe = VerMatrix * DrehMatrix * RueckMatrix * Buchstabe_S;
         fill(Ausgabe(1,:), Ausgabe(2,:), 'R');
         % Ausgabe des Buchstabens "U" auf den Bildschirm 
         Ausgabe = VerMatrix * DrehMatrix * RueckMatrix * Buchstabe_U;
         fill(Ausgabe(1,:), Ausgabe(2,:), 'R');
   end

   if WorkNum == AnzTeile
      WorkNum = 0;
      Bild_Nr = Bild_Nr + 1;
   end
   pause(0.15);
end