%% Zusammengesetzter Koerper: Kreiskegel, Kreiszylinder und Halbkugel
clear; clc; close all
%% Daten
R = 3; H = 5; n = 31;             % Radius, Hoehe des Kegels
%% Kegel mit Radius R und Hoehe H
t = linspace(0,1,n);              % (parametrisierte) Einteilung der Hoehe
[XK,YK,ZK] = cylinder(R*(1-t),n); % r(h) = 3*(1-h);
ZK = H*ZK;                        % Hoehe korrekt skalieren
surf(XK,YK,ZK)
%% Zylinder mit Radius R und Hoehe 2H
[XZ,YZ,ZZ] = cylinder(R,n);
ZZ = ZZ*2*H;                      % Hoehe korrekt skalieren
surf(XZ,YZ,ZZ)
%% untere Halbkugel mit Radius R
[XH,YH,ZH] = sphere(n);

XH = R*XH(1:end/2+1,:);
YH = R*YH(1:end/2+1,:);
ZH = R*ZH(1:end/2+1,:);
surf(XH,YH,ZH)
axis equal
%% wir kombinieren die 3 Koerper
% Verschieben der Halbkugel, sodass deren tiefster Punkt in (0,0,0) ist
ZH = ZH + R;
% Verschieben des Zylinders, sodaß dieser auf der Halbkugel steht
ZZ = ZZ + R;
%
% Verschieben des Kegels, sodass dieser auf dem Zylinder steht
ZK = ZK + R + 2*H;
% Zeichnes des gesamten Koerpers
hh = surf(XH,YH,ZH);
hold on; 
hz = surf(XZ,YZ,ZZ);
hk = surf(XK,YK,ZK);
axis equal
box on
grid off
disp(' '); disp('Bitte eine beliebige Taste druecken')
%pause()

%% Koerper in 10° Schritten um die Achse (0,1,1), ausgehend von (2,1,9) rotieren lassen
zdir = [0 1 1];                % Drehachse
GH2 = (3*H+R)/2;
center = [2, 1,GH2];           % Drehpunkt
axis tight manual
axis equal
axis([center(1)-GH2,center(1)+GH2,center(2)-GH2,center(2)+GH2,center(3)-GH2,center(3)+GH2])

nsteps = 36;
stride = 360/nsteps;

filename = [mfilename,'.avi'];
writerObj = VideoWriter(filename);
open(writerObj);

for k = 1:nsteps
    rotate(hk,zdir,stride,center)
    rotate(hz,zdir,stride,center)
    rotate(hh,zdir,stride,center)
    F(k) = getframe;
    frame = getframe;
    writeVideo(writerObj,frame);
end
close(writerObj);
%% Wiederhole die Bildfolge 2 mal
axis off
movie(F,2)









