% Das Programm zeichnet einen geknickte Gerade und ein Spieler der in einem Fallruckzieher aufs Tor schiesst
% Die geknickte Gerade wird 36 mal gedreht.
% Der Spieler dreht sich im Fallrückzieher.
% Die Beine drehen sich im Uhr und Gegenuhrzeigersinn gleichzeitig.
% Das Beispiel zeigt, wie Farben geändert werden können über einen Handle des Grafikfensters
% File: Projekt Califano.m
% 18. Juni 2002
% Ivan Califano

clf;                    % Grafikfenster löschen
n=36;                   % n = Anzahl Drehungen
i=1;                    % Laufvariable

xdrb=0;                 % horizontal Versatz des Drehpunktes für Rechtes Bein
ydrb=2;                 % Vertikal Versatz des Drehpunktes für Rechtes Bein
xdrb1=0;                % horizontal Versatz des Drehpunktes für Rechtes Bein
ydrb1=0;                % Vertikal Versatz des Drehpunktes für Rechtes Bein
xdrb2=-1;               % horizontal Versatz des Drehpunktes für Rechtes Bein
ydrb2=-2;               % Vertikal Versatz des Drehpunktes für Rechtes Bein
xdrs=-1;                % horizontal Versatz des Drehpunktes für Rechter Schenkel
ydrs=4;                 % Vertikal Versatz des Drehpunktes für Rechter Schenkel
xdsp=-1;                % horizontal Versatz des Drehpunktes für Spieler
ydsp=4;                 % Vertikal Versatz des Drehpunktes für Spieler

axk=0;                  % horizontal Versatz der Parallelverschiebung
ayk=8;                  % Vertikal Versatz der Parallelverschiebung
axb=10;                 % horizontal Versatz der Parallelverschiebung für den Ball
ayb=0.5;                % Vertikal Versatz der Parallelverschiebung für den Ball
axb2=0.1;               % horizontal Versatz der Parallelverschiebung für den Ball
ayb2=0.2;               % Vertikal Versatz der Parallelverschiebung für den Ball
axb3=0.1;               % horizontal Versatz der Parallelverschiebung für den Ball
ayb3=0.2;               % Vertikal Versatz der Parallelverschiebung für den Ball
axb4=-0.5;              % horizontal Versatz der Parallelverschiebung für den Ball
ayb4=0;                 % Vertikal Versatz der Parallelverschiebung für den Ball
axsp=0;                 % horizontal Versatz der Parallelverschiebung für den Spieler
aysp=-1;                % Vertikal Versatz der Parallelverschiebung für den Spieler

a=5;                    % Faktor für die Verkleinerung des Balles

% Erzeugen eines Vektors, der aus 101 Einern besteht
z0=(1:1:101);           % 101 Hilfwerte
z1=(1:1:101);           % 101 Hilfwerte
z=(z0./z1);             % SkalarDivision mit Ziel: Vektor mit 101 Einer (5/5=1 ect.)

% Berechnung der Koordinaten für Kreisobjekt
t=(0:0.1:10);                                            % 0%10 Step 0,1 => 101 Punkte für Kreis
s1=sin(t*pi)*0.75;                                       % Berechnung der x-Koordinaten für Kopf
c1=cos(t*pi);                                            % Berechnung der y-Koordinaten für Kopf
s2=sin(t*pi)*0.5;                                        % Berechnung der x-Koordinaten für Ball
c2=cos(t*pi)*0.5;                                        % Berechnung der y-Koordinaten für Ball

% Definition der Objekte
gk=[0 1 3;0 1.5 2;1 1 1]                                 % Matrix für geknickte Gerade
kopf=[s1;c1;z];                                          % Matrix für Kopf
ball=[s2;c2;z];                                          % Matrix für Ball
OKoerper=[-0.25 -1.5 0 -1 0 0 1.25;4 5.5 7 4 7 5 3.5;1 1 1 1 1 1 1];     % Matrix für Oberkoerper
RSchenkel=[-1 0;4 2;1 1];                                % Matrix für Rechter Oberschenkel
LBein=[-1 -1 -2 -1.5;4 2 0 0;1 1 1 1];                   % Matrix für Linker Bein
RBein=[0 0 0.5;2 0 0;1 1 1];                             % Matrix für Rechter Bein
gol=[1.45 1.7 1.7 -4.3 -4.3 -4.05 -4.05 1.45 1.45;0 0 4.2 4.2 0 0 3.95 3.95 0];                     % Matrix für das Tor
hlgol=[-4.3 -5.3 -5.3 -5.15 -5.15 -4.3; 4.2 2.9 0.2 0.15 2.85 3.9];                                 % Matrix für das Tor
hrgol=[1.25 0.45 0.45 0.6 0.6 1.45; 3.9 2.9 0.2 0.15 2.85 3.9];                                     % Matrix für das Tor
horgol=[0.45 -4.05;2.9 2.9];                             % Matrix für das Tor
hurgol=[0.45 -4.05;2.7 2.7];                             % Matrix für das Tor
holgol=[-4.3 -5.15;2.9 2.9];                             % Matrix für das Tor
hulgol=[-4.3 -5.15;2.7 2.7];                             % Matrix für das Tor
feld=[-10 10;0 0];                                       % Matrix fürs Feld
sechszehnm=[-8 -4 9 5;0 -3 -3 0];                        % Matrix für 16 Meter

% Vektor- Uebergabe in RGB R G B ; R G B ; ect.
Farbematrix1=[1 0 1;1 0 .8;1 0 .6;1 0 .4;1 0 .2;1 0 0;1 .8 0;1 .6 0];

% Definition der Parallelverschiebung
VerschiebungK=[1 0 axk; 0 1 ayk; 0 0 1];                 % Kopf             
Kopf= VerschiebungK * kopf;

while i<=n
    Drehung1 = ((2*pi)/36)*i;                            % 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(i,8) + 1;                                     % i Modulo 8
    
    h=plot (ResMatrixgk(1,:),ResMatrixgk(2,:));          % Die Eigenschaften Color wird aus
    set(h,'Color',Farbematrix1(f,:));                    % der f Martrix eingesetzt
    
    axis ([-10 10 -10 10]);                              % Definition der Achse
    hold on;
    i = i + 1;
    
    pause (0.1);
end

for i=1:20
    VerschiebungB=[1 0 axb; 0 1 ayb; 0 0 1]              % Verschiebematrix
    Ball= VerschiebungB * ball;
    axb=axb-0.5;
    
    plot (RBein(1,:),RBein(2,:),'k',LBein(1,:),LBein(2,:),'k',Kopf(1,:), Kopf(2,:),'k',OKoerper(1,:),OKoerper(2,:),'k',RSchenkel(1,:),RSchenkel(2,:),'k',Ball(1,:),Ball(2,:),'k');
    
    axis ([-10 10 -10 10]);                              % Definition der Achse
    hold off;
    
    pause(0.1);
end

for i=0:3
    Drehung1 = ((2*pi)/36)*i;                            % Schrittweite im Bogenmass
    VerschiebeMatrix1= [1 0 xdrb; 0 1 ydrb; 0 0 1];      % Verschiebematrix
    RueckVerschMatrix1 = [1 0 -xdrb; 0 1 -ydrb; 0 0 1];  % Rückverschiebe Matrix
    
    DrehMatrix1=[cos(Drehung1) -sin(Drehung1) 0;sin(Drehung1) cos(Drehung1) 0;0 0 1];
    ResMatrixRBein=VerschiebeMatrix1 * DrehMatrix1 * RueckVerschMatrix1 * RBein;                    % Rechter Bein
    ResMatrixBall=VerschiebeMatrix1 * DrehMatrix1 * RueckVerschMatrix1 * Ball;                      % Ball
    
    plot (ResMatrixRBein(1,:) , ResMatrixRBein(2,:),'k',LBein(1,:), LBein(2,:),'k',Kopf(1,:), Kopf(2,:),'k',OKoerper(1,:), OKoerper(2,:),'k',RSchenkel(1,:), RSchenkel(2,:),'k',ResMatrixBall(1,:),ResMatrixBall(2,:),'k');
    
    axis ([-10 10 -10 10]);                              % Definition der Achse
    hold off;
    pause (0.1);
end

for i=3:13
    Drehung1 = ((2*pi)/36)*i;                            % Schrittweite im Bogenmass
    VerschiebeMatrix1= [1 0 xdrb; 0 1 ydrb; 0 0 1];      % Verschiebematrix
    RueckVerschMatrix1 = [1 0 -xdrb; 0 1 -ydrb; 0 0 1];  % Rückverschiebe Matrix
    
    DrehMatrix1=[cos(Drehung1) -sin(Drehung1) 0;sin(Drehung1) cos(Drehung1) 0;0 0 1];
    ResMatrixBall=VerschiebeMatrix1 * DrehMatrix1 * RueckVerschMatrix1 * Ball;                      % Rechter Bein
    
    plot (ResMatrixRBein(1,:) , ResMatrixRBein(2,:),'k',LBein(1,:), LBein(2,:),'k',Kopf(1,:), Kopf(2,:),'k',OKoerper(1,:), OKoerper(2,:),'k',RSchenkel(1,:), RSchenkel(2,:),'k',ResMatrixBall(1,:),ResMatrixBall(2,:),'k');
    
    axis ([-10 10 -10 10]);                              % Definition der Achse
    hold off;
    pause (0.05);
end


for i=0:3
    Drehung1 = ((2*pi)/36)*i;                            % Schrittweite im Bogenmass
    Drehung2 = ((-2*pi)/36)*i;                           % Schrittweite im Bogenmass
    VerschiebeMatrix2= [1 0 xdrs; 0 1 ydrs; 0 0 1];      % Verschiebematrix
    RueckVerschMatrix2 = [1 0 -xdrs; 0 1 -ydrs; 0 0 1];  % Rückverschiebe Matrix
    
    VerschiebungrB=[1 0 xdrb1; 0 1 ydrb1; 0 0 1];        % Definition der Parallelverschiebung für rechtes Bein
    RechterBein= VerschiebungrB * RBein;
    xdrb1=xdrb1+0.41;
    ydrb1=ydrb1+0.61;
    
    DrehMatrix1=[cos(Drehung1) -sin(Drehung1) 0;sin(Drehung1) cos(Drehung1) 0;0 0 1];
    DrehMatrix2=[cos(Drehung2) -sin(Drehung2) 0;sin(Drehung2) cos(Drehung2) 0;0 0 1];
    ResMatrixRSchenkel=VerschiebeMatrix2 * DrehMatrix1 * RueckVerschMatrix2 * RSchenkel;            % Rechter Schenkel
    ResMatrixRBein=VerschiebeMatrix2 * DrehMatrix2 * RueckVerschMatrix2 * RechterBein;              % Rechtes Bein
    
    plot (ResMatrixRSchenkel(1,:) , ResMatrixRSchenkel(2,:),'k',LBein(1,:), LBein(2,:),'k',ResMatrixRBein(1,:), ResMatrixRBein(2,:),'k',Kopf(1,:), Kopf(2,:),'k',OKoerper(1,:), OKoerper(2,:),'k',ResMatrixBall(1,:),ResMatrixBall(2,:),'k');
     
    axis ([-10 10 -10 10]);                              % Definition der Achse
    hold off;
    pause (0.01);
end

for i=0:9
    Drehung1 = ((2*pi)/36)*i;                            % Schrittweite im Bogenmass
    VerschiebeMatrix4= [1 0 xdsp; 0 1 ydsp; 0 0 1];      % Verschiebematrix
    RueckVerschMatrix4 = [1 0 -xdsp; 0 1 -ydsp; 0 0 1];  % Rückverschiebe Matrix  
    
    VerschiebungB=[1 0 axb2; 0 1 ayb2; 0 0 1];           % Definition der Parallelverschiebung für den Ball
    ResMatrixBall2= VerschiebungB * ResMatrixBall;
    axb2=axb2+0.01;
    ayb2=ayb2+0.22;
    
    DrehMatrix1=[cos(Drehung1) -sin(Drehung1) 0;sin(Drehung1) cos(Drehung1) 0;0 0 1];
    ResMatrixRSchenkel2=VerschiebeMatrix4 * DrehMatrix1 * RueckVerschMatrix4 * ResMatrixRSchenkel;  % Rechter Schenkel
    ResMatrixKopf=VerschiebeMatrix4 * DrehMatrix1 * RueckVerschMatrix4 * Kopf;                      % Kopf
    ResMatrixLBein=VerschiebeMatrix4 * DrehMatrix1 * RueckVerschMatrix4 * LBein;                    % Linkes Bein
    ResMatrixRBein2=VerschiebeMatrix4 * DrehMatrix1 * RueckVerschMatrix4 * ResMatrixRBein;          % Rechtes Bein
    ResMatrixOKoerper=VerschiebeMatrix4 * DrehMatrix1 * RueckVerschMatrix4 * OKoerper;              % Koerper
    
     
    plot (ResMatrixBall2(1,:) , ResMatrixBall2(2,:),'k',ResMatrixRSchenkel2(1,:) , ResMatrixRSchenkel2(2,:),'k',ResMatrixLBein(1,:), ResMatrixLBein(2,:),'k',ResMatrixRBein2(1,:), ResMatrixRBein2(2,:),'k',ResMatrixKopf(1,:), ResMatrixKopf(2,:),'k',ResMatrixOKoerper(1,:), ResMatrixOKoerper(2,:),'k');
    
    axis ([-10 10 -10 10]);                              % Definition der Achse
    hold off;
    pause (0.01);
end

for i=0:6
    Drehung1 = ((2*pi)/36)*i;                            % Schrittweite im Bogenmass
    VerschiebeMatrix4= [1 0 xdsp; 0 1 ydsp; 0 0 1];      % Verschiebematrix
    RueckVerschMatrix4 = [1 0 -xdsp; 0 1 -ydsp; 0 0 1];  % Rückverschiebe Matrix  
    
    VerschiebungB=[1 0 axb3; 0 1 ayb3; 0 0 1]            % Definition der Parallelverschiebung für den Ball
    ResMatrixBall3= VerschiebungB * ResMatrixBall2;
    axb3=axb3+0.01;
    ayb3=ayb3+0.22;
    
    DrehMatrix1=[cos(Drehung1) -sin(Drehung1) 0;sin(Drehung1) cos(Drehung1) 0;0 0 1];
    ResMatrixLBein1=VerschiebeMatrix4 * DrehMatrix1 * RueckVerschMatrix4 * ResMatrixLBein;          % Linkes Bein
     
    plot (ResMatrixBall3(1,:) , ResMatrixBall3(2,:),'k',ResMatrixRSchenkel2(1,:) , ResMatrixRSchenkel2(2,:),'k',ResMatrixLBein1(1,:), ResMatrixLBein1(2,:),'k',ResMatrixRBein2(1,:), ResMatrixRBein2(2,:),'k',ResMatrixKopf(1,:), ResMatrixKopf(2,:),'k',ResMatrixOKoerper(1,:), ResMatrixOKoerper(2,:),'k');
    
    axis ([-10 10 -10 10]);                              % Definition der Achse
    hold off;
    pause (0.01);
end

for i=0:6
    VerschiebungB=[1 0 axb4; 0 1 ayb4; 0 0 1];           % Definition der Parallelverschiebung für den Ball
    ResMatrixBall4= VerschiebungB * ResMatrixBall3;
    axb4=axb4-0.5;
    VerschiebungSp=[1 0 axsp;0 1 aysp;0 0 1];            % Definition der Parallelverschiebung für den Spieler
    aysp=aysp-0.5;
    
    ResMatrixRSchenkel3= VerschiebungSp * ResMatrixRSchenkel2;                                      % Rechter Schenkel
    ResMatrixLBein2= VerschiebungSp * ResMatrixLBein1;                                              % Linkes Bein
    ResMatrixRBein3= VerschiebungSp * ResMatrixRBein2;                                              % Rechtes Bein
    ResMatrixKopf1= VerschiebungSp * ResMatrixKopf;                                                 % Kopf
    ResMatrixOKoerper1= VerschiebungSp * ResMatrixOKoerper;                                         % Koerper
    
    plot (ResMatrixBall4(1,:) , ResMatrixBall4(2,:),'k',ResMatrixRSchenkel3(1,:) , ResMatrixRSchenkel3(2,:),'k',ResMatrixLBein2(1,:), ResMatrixLBein2(2,:),'k',ResMatrixRBein3(1,:), ResMatrixRBein3(2,:),'k',ResMatrixKopf1(1,:), ResMatrixKopf1(2,:),'k',ResMatrixOKoerper1(1,:), ResMatrixOKoerper1(2,:),'k');
    
    axis ([-10 10 -10 10]);                             % Definition der Achse
    hold off;
    pause (0.01);
end

for i=6:22
    VerschiebungB=[1 0 axb4; 0 1 ayb4; 0 0 1];          % Definition der Parallelverschiebung für den Ball
    ResMatrixBall4= VerschiebungB * ResMatrixBall3;
    axb4=axb4-0.5;
     
    plot (ResMatrixBall4(1,:) , ResMatrixBall4(2,:),'k',ResMatrixRSchenkel3(1,:) , ResMatrixRSchenkel3(2,:),'k',ResMatrixLBein2(1,:), ResMatrixLBein2(2,:),'k',ResMatrixRBein3(1,:), ResMatrixRBein3(2,:),'k',ResMatrixKopf1(1,:), ResMatrixKopf1(2,:),'k',ResMatrixOKoerper1(1,:), ResMatrixOKoerper1(2,:),'k');
    
    axis ([-10 10 -10 10]);                             % Definition der Achse
    hold off;
    pause (0.01);
end

for i=0:8
    Verkleinern=[a 0 0; 0 a 0; 0 0 0]                    % Definition der Verkleinerung für den Ball
    ResMatrixBall5= Verkleinern * ResMatrixBall;
    a=a-0.5;
     
    f= mod(i,8) + 1;                                     % i Modulo 8
    
    fill(ResMatrixBall5(1,:) , ResMatrixBall5(2,:),Farbematrix1(f,:));
    plot (gol(1,:),gol(2,:),'k',hlgol(1,:),hlgol(2,:),'k',hrgol(1,:),hrgol(2,:),'k',horgol(1,:),horgol(2,:),'k',hurgol(1,:),hurgol(2,:),'k',holgol(1,:),holgol(2,:),'k',hulgol(1,:),hulgol(2,:),'k',feld(1,:),feld(2,:),'k',sechszehnm(1,:),sechszehnm(2,:),'k');
    
    axis ([-10 10 -10 10]);                              % Definition der Achse
    hold on;
    pause (0.01);
end





















    


