% Aufgabe: Drehgrafik
% 
% Marco Di Menco, 16.05.02
%
%*****************************************

%###################################################################################################
% Aufagbe 1
%###################################################################################################

clear;

% Definition der geknickten Linie
P0=[4 4];
P1=[5 5.5];
P2=[7 6];
OffsetX = 4;
OffsetY = 4;
% Initialisieren des Grafikfensters
clf;
figure(gcf);
set(gcf,'Position',[270 300 500 500])
hold on;
axis([0 8 0 8]);

% Linie mehrmahls aufzeichnen und drehen
anzahl = 100;
radphi = 0;
while radphi < (2*pi)
    linie = [1 0 OffsetX; 0 1 OffsetY; 0 0 1] * ...                               % Verschieben
            [cos(radphi) -sin(radphi) 0; sin(radphi)  cos(radphi) 0; 0 0 1] * ... % Drehen
            [1 0 -OffsetX; 0 1 -OffsetY; 0 0 1] * [P0 1; P1 1; P2 1]';            % Zurückverschieben
    radphi = radphi + (2*pi/anzahl);
    plot(linie(1,:),linie(2,:));
end;


%###################################################################################################
% Aufagbe 2
%###################################################################################################
% Zweite Grafik erstellen
stoppuhr = figure;

% Variablen initialisierung
time = 0;
ende = 0;

while ende < 1; % Bis Tastendruck
    figure(stoppuhr);
    set(gcf,'KeyPressFcn','ende=1','Position',[800 300 500 500],'Color','w'); % Abrruch auf Tastendruck    
    
    % Definition des Min(Std)-Symbols
    P20=[0 0];
    P21=[0 2];
    P22=[2 2];
    P23=[2 0];
    MinsymCol = 'b';        %Farbe
    % Definition des Std-Symbols
    StdsymCol = 'g';        %Farbe

    % Definition des Std-Zeiges
    StdZ0 = [0,0];
    StdZ1 = [-1.5,1];
    StdZ2 = [0,10];
    StdZ3 = [1.5,1];
    StdCol = 'k';           %Farbe
    % Definition des Min-Zeiges
    MinZ0 = [0,0];
    MinZ1 = [-1,1];
    MinZ2 = [0,15];
    MinZ3 = [1,1];
    MinCol = 'm';           %Farbe
    % Definition des Sek-Zeigers
    SekZ0 = [0,0];
    SekZ1 = [-0.5,1];
    SekZ2 = [0,18];
    SekZ3 = [0.5,1];
    SekCol = 'y';           %Farbe
    
    % Variablen initialisierung
    std = 0;
    zaehler = 0;
    anzahlsek = 60;
    anzahlmin = 60;
    anzahlstd = 12;
        
    % Fenster neu initialisieren
    clf
    axes('Visible','off');
    axis([-30 30 -30 30]);
    title('Stoppuhr');
    hold on;
    statustext = text(-28,-28,'Taste Drücken um zu stoppen');

    % Position des Minutenrings
    Posmin=[ 1 0 19; 0 1 -1; 0 0 1];
    %Positions des Minutentextes
    Postext=[0 0 1;0 16 1];
    
    % Minuten(Stunden) Ring zeigen 
    radphi = 0;
    while radphi < (2*pi)
        minring = Posmin * [cos(radphi) -sin(radphi) 0; sin(radphi)  cos(radphi) 0; 0 0 1] * ...
                  [P20 1; P21 1; P22 1;P23 1;P20 1]';
        if (zaehler >= (anzahlmin/anzahlstd))       %Jedes 5.Symbol
        % Stunden symbol
            fill(minring(1,:),minring(2,:),StdsymCol);
            zaehler = 0;
        else
        % Minuten Symbol
            plot(minring(1,:),minring(2,:),MinsymCol);
        end;
        zaehler = zaehler + 1;
        Posmin(1,3) = minring(1,2);
        Posmin(2,3) = minring(2,2);
        radphi = radphi + (2*pi/anzahlmin);
    end;
    
    % Stundentext anzeigen
    radphi = 2*pi;
    while radphi > (0)
            std = std + 5;
            radphi = radphi - (2*pi/anzahlstd);
            stdtext =  [cos(radphi) -sin(radphi) 0; sin(radphi)  cos(radphi) 0; 0 0 1] * Postext';
            text(stdtext(1,2)-1,stdtext (2,2), num2str(std));
    end;
    
    
    % Stundenzeiger
    radphi = -2*pi/(anzahlstd*anzahlmin*anzahlsek) * time;
    stdZeiger = [cos(radphi) -sin(radphi) 0; sin(radphi)  cos(radphi) 0; 0 0 1] * ...
                [StdZ0 1; StdZ1 1; StdZ2 1;StdZ3 1;StdZ0 1]';
    fill(stdZeiger(1,:),stdZeiger(2,:),StdCol);
    radphi = radphi - (2*pi/anzahlmin);    

    % Minutenzeiger
    radphi = -2*pi/(anzahlsek*anzahlmin) * time;
    minZeiger = [cos(radphi) -sin(radphi) 0; sin(radphi)  cos(radphi) 0; 0 0 1] * ...
                [MinZ0 1; MinZ1 1; MinZ2 1;MinZ3 1;MinZ0 1]';
    fill(minZeiger(1,:),minZeiger(2,:),MinCol);
    radphi = radphi - (2*pi/anzahlmin);    
    
    % Sekundenzeiger
    radphi = -2*pi/anzahlsek * time;
    sekZeiger = [cos(radphi) -sin(radphi) 0; sin(radphi)  cos(radphi) 0; 0 0 1] * ...
                [SekZ0 1; SekZ1 1; SekZ2 1;SekZ3 1;SekZ0 1]';
    fill(sekZeiger(1,:),sekZeiger(2,:),SekCol);
    radphi = radphi - (2*pi/anzahlmin);    
    
    time = time + 1;        % 1 Sekunde addieren
    pause(1);           % 1 Sekunde warten
    
end;
    set(statustext,'String','Gestoppt !!!');     % Statustext ändern

%###################################################################################################
%###################################################################################################
%###################################################################################################