clear; clc;

R_Kolbenloch  =  9;
R_Stuetzrad   =  R_Kolbenloch /3 *2 ;
Eckenradius   =  2 * R_Kolbenloch;

Df_GrafischeAufloesung = 0.3;   % [°]

% Stützrad liegt mit seinem Zentrum im Koordinatenursprung.
% Kolbenzentrum z0. Seine 3 Ecken E1, E2 und E3:

z0 = (R_Stuetzrad-R_Kolbenloch)*exp(j*0*(pi/180));
E1 = z0 + Eckenradius*exp(j*0*(pi/180));
E2 = z0 + Eckenradius*exp(j*120*(pi/180));
E3 = z0 + Eckenradius*exp(j*240*(pi/180));

zB = 5 * Eckenradius  % Zentrum des Bogens, welcher die Kolbenwölbung bildet
R_Bogen = abs( E2 - zB )
f_Bogen_von = angle( E2 - zB )*(180/pi);
f_Bogen_bis = angle( E3 - zB )*(180/pi) + 360;
Bogen23 = zB + R_Bogen*exp(j*[f_Bogen_von:Df_GrafischeAufloesung:f_Bogen_bis]*(pi/180));
Bogen31 = (Bogen23-z0) * exp(j*120*(pi/180)) + z0;
Bogen12 = (Bogen23-z0) * exp(j*240*(pi/180)) + z0;

Kolben = [E1 Bogen12 E2 Bogen23 E3 Bogen31];

Kolbenloch  = z0 + R_Kolbenloch*exp(j*[0:Df_GrafischeAufloesung:360]*(pi/180));
Stuetzrad   = 0 + R_Stuetzrad*exp(j*[0:Df_GrafischeAufloesung:360]*(pi/180));

figure(1); cla; hold on; box on; axis equal;
xlim([-30 30])
ylim([-30 30])
fill( real(Kolben) , imag(Kolben) , 'y' )
plot( Kolben , 'k.' )
fill( real(Kolbenloch) , imag(Kolbenloch) , 'w' )
fill( real(Stuetzrad) , imag(Stuetzrad) , 'k' )
getframe;

% Kreisförmige Bewegung des Kolbenmittelpunktes um das Zentrum vom Stützrad:
Df1 = 3   % [°]
% Rotation des Kolbens um seinen eigenen Mittelpunkt:
Df2 = (1 - R_Stuetzrad/R_Kolbenloch)*Df1;

% Erste Umdrehung zur Erstellung der Gehäusekontur
for i=1:720
   
    %------------- ERSTER TEIL DER BEWEGUNG:---------------
    % Kolbenmittelpunkt dreht um das Stützrad:
    z0 = z0 * exp(j*Df1*(pi/180));
    
    % Kolben muss nun seine eigenen Mittelpunkt durch eine 
    % Translation folgen
    Kolben = Kolben - mean(Kolben) + z0;
    Kolbenloch = Kolbenloch - mean(Kolbenloch) + z0;
    
    %------------- ZWEITER TEIL DER BEWEGUNG:---------------
    % Kolben dreht sich um seinen eigene Mittelpunkt:
    Kolben = (Kolben-z0) * exp(j*Df2*(pi/180)) + z0;
    Gehaeuse(i) = Kolben(1);
    
    DasAktuelleGrafikFenster = get( gca );
    AlleGrafikobjekte = DasAktuelleGrafikFenster.Children;
    delete( AlleGrafikobjekte(4) )
    delete( AlleGrafikobjekte(3) )
    delete( AlleGrafikobjekte(2) )
    delete( AlleGrafikobjekte(1) )
    plot( Kolben(1) , 'b.' )
    fill( real(Kolben) , imag(Kolben) , 'y' )
    plot( Kolben , 'k.' )
    fill( real(Kolbenloch) , imag(Kolbenloch) , 'w' )
    fill( real(Stuetzrad) , imag(Stuetzrad) , 'k' )
    getframe;
    
end