%% Zusammengesetzter Koerper: Kreiskegel, Kreiszylinder und Halbkugel clear; clc; clf %% Daten R = 3; H = 5; n = 30; % 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 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; for k = 1:nsteps rotate(hk,zdir,stride,center) rotate(hz,zdir,stride,center) rotate(hh,zdir,stride,center) F(k) = getframe; end %% Wiederhole die Bildfolge 4 mal movie(F,2) %% Create movie % File anlegen mov = avifile('try_geom.avi','fps',10); % Vorwaerts und Rueckwaerts drehen mov = addframe(mov,F(1:end),F(end:-1:1)); % File schliessen mov = close(mov); %movie2avi(F,'try_geom2.avi')