%Aufgabe  : Drehmatrix
%Filename : Drehen.m
%Es wird ein Objekt erzeugt das sich um einen Definierten Punkt dreht
%Version  : 1.2
%Ersteller: Christian Widmer 23. Mai 2002
%------------------------------------------

% Initialisierung
clear; % Löscht die Variablen
clc;   % Löscht die Arbeitsfläche


% Abfrage 
o = input ('Linie          [0]\nGeknickte Linie[1]\nLiegendes U    [2]\nRechteck       [3]:\n');
clc;
s = input ('Gib die Anzahl schritte an:\n');
clc;
v = input ('Gib die Verzögerung zwischen den einzelnen Schritten\nin s an:\n');
clc;
m = input ('Willst Du den Drehmittelpunkt eingeben?\n[j=1/n=0]:\n');

%Schlaufe zu Mittelpunkt Abfrage
if m == 1
    x = input ('gib die x Koordinate an:\n');
    y = input ('gib die y Koordinate an:\n');
else
    x = 0;
    y = 0;
    f = 0;
end;
clc;
d = input ('Willst Du das sich das Objekt Streckt? [j=1/n=0]:\n');
if m == 1
    f = input ('Mit fixierter Drehachse [1] oder ohne [2]\n');
end;




% Schlauffe zu Objektwahl
if o == 0
    object = [x,5+x;y,6+y];                     % Linie 
elseif o == 1
    object = [x,1+x,3+x;y,1.5+y,2+y];           % Geknickte Linie
elseif o == 2
    object = [x,4+x,4+x,x;y,y,4+y,4+y];         % Liegendes U
elseif o == 3
    object = [x,2+x,2+x,x,x;y,y,4+y,4+y,y];     % Rechteck
end;


% Erweiterung der jeweiligen Objektmatrix mit einer 3 Zeile 
if m == 1
   groesse=size(object);  %Bestimmen der grösse der Matrize (Zeile,Spalte)
   spalten=groesse(:,2);  %Ausfiltern der Anzahl Spalen
   zeile=ones(1,spalten); %Erzeugen einer neuer Matrix mit den Anzahl Zahlen
   object=[object;zeile]; %In bestehendes Objekt Zeile zufügen
end;

%erste und letzte (Rechteck) Spalte abkoppeln --> Verwendung bei Graphikausgabe
if d ==1
    erste=object(:,1);    %Erste Spalte Kopieren in eine neue Matrix
    letzter=erste;         %Letzte Spalte = erste Spalte (für Rechteck)
end;
        
%Berechnung des Winkel in RAD
alfa = pi*2/s;

%Grafikausgabe
axis auto;      %Achsen Dynamisch (gleich lang)
hold;            %Behält aktuellen Graphen in der Graphik
colors=hsv(s);   %Farbverlauf in 100 Schritten
grid on;         %Schaltet den Grid ein


for i = 1:s      % Schleife mit s- Schritten
    
     plot (object(1,:),object(2,:),'Color',colors(i,:));
     
    if m == 0
        Drehmatrix = [cos(alfa),(-sin(alfa));sin(alfa),cos(alfa)];
    
        object=Drehmatrix*object;
        
            
        pause(v);
        
    else
        ErweitertDrehmatrix = [cos(alfa),(-sin(alfa)),0;sin(alfa),cos(alfa),0;0,0,1];
       
        Rueckverschiebung=[1,0,x;0,1,y;0,0,1];
        Verschiebung=[1,0,-x;0,1,-y;0,0,1];
        
        object=Rueckverschiebung*ErweitertDrehmatrix*Verschiebung*object;
        
        pause (v);   
    end;
 
    if f == 1
        object=object*1.006;
     else f == 2
        %Schlaufe zum Strecken des Objektes mit Fixiertem Mittelpunkt
        if d == 1
            object=object*1.005;
            if o==0
                rest=object(:,2);
                object=[erste,rest];
            elseif o==1
                rest=object(:,2:3);
                object=[erste,rest];
            elseif o==2
                rest=object(:,2:4);
                object=[erste,rest];
            elseif o==3
                rest=object(:,2:4);
                object=[erste,rest,letzter];
            end; 
         end;

         
    end;
end;
   




    
    








