%EPIZYKLODEMO animierte grafische Demo zur Definition von Epizykloiden
% Durch Vordefinieren der globalen Variablen ZYKRADFAC
% (kleiner oder = 1, Radiusverhaeltnis, negativ Hypozykloide)
% kann der Typ der Epizykloiden gew\"ahlt werden (Defaultwert = 1/2).
% Copyright 2003 HSZ-T, Zuerich , Dr. Stefan Adam
t = 2*pi*(0:0.01:1.4) ; w = 2*pi*(0:0.01:1); clf ; hold on
if exist('ZYKRADFAC') == 0 ; ZYKRADFAC = 0.5 ; end
R=6 ; Ra=ZYKRADFAC*R;
frc = 1+ R/Ra ; fr = R/Ra;
polx = 0 ; poly = R;
xkri = R*cos(w) ; ykri = R*sin(w);
plot(xkri,ykri,'k'); axis([-20 20 -20 20]); axis square
Mofram=moviein(length(t));
for k=1:length(t)
x=(R+Ra)*sin(t(k)) + Ra*cos(w); y=(R+Ra)*cos(t(k)) + Ra*sin(w);
lx = 0:0.005*2*pi:t(k);
bix = (R)*sin(lx); biy = (R)*cos(lx);
bx=(R+Ra)*sin(t(k)) - Ra*sin(t(k)+fr*lx);
by=(R+Ra)*cos(t(k)) - Ra*cos(t(k)+fr*lx);
vx = [(R+Ra)*sin(t(k)) (R+Ra)*sin(t(k))-Ra*sin(frc*t(k))];
vy = [(R+Ra)*cos(t(k)) (R+Ra)*cos(t(k))-Ra*cos(frc*t(k))];
pnewx = (R+Ra)*sin(t(k)) - Ra*sin(frc*t(k));
pnewy = (R+Ra)*cos(t(k)) - Ra*cos(frc*t(k));
if k > 1
delete(circ); delete(cent); delete(arc);
delete(vec); delete(pt);
end
circ = plot(x,y,'k');
cent = plot( (R+Ra)*sin(t(k)), (R+Ra)*cos(t(k)) ,'k.');
arc = plot(bx,by,'g'); vec = plot(vx,vy,'b');
pt = plot(pnewx,pnewy,'m.');
plot([polx pnewx],[poly pnewy],'r');
polx = pnewx; poly = pnewy;
plot(bix, biy,'g');
Mofram(:,k)=getframe; pause(0.1)
end
pause(0.8); movie(Mofram,-3); movie(Mofram,1);