diff --git a/matlab/+MovieMaker/goFigureAnimation.m b/matlab/+MovieMaker/goFigureAnimation.m new file mode 100644 index 0000000000000000000000000000000000000000..cdf3798843e633a891c9d5badf6a6c94d5c25a7e --- /dev/null +++ b/matlab/+MovieMaker/goFigureAnimation.m @@ -0,0 +1,49 @@ +% this code can be functionalized +% can also add features: +% periodicity toggle? if true remove final frame +% changing number of inbetweens to speed up or slow down the animation + +fileName = 'ssfClustering'; % name of movie generated +frameRate = 30; % desired frame rate +duration = 30; % desired length of movie in seconds +azimuthList = [-20,-110,-190,-290,-380]; % camera pan angle at key frames +elevationList = [10,10,10,10,10]; % camera tilt angle at key frames + +v = VideoWriter(fileName,'MPEG-4'); +v.FrameRate = frameRate; +open(v); + +% interpolate viewing angles between key frames to match the specified duration + +keyFrameList = [azimuthList;elevationList]'; +numFrames = round(duration * frameRate); +intervalLength = (numFrames - 1) / (size(keyFrameList,1) - 1); + +% initialize the angleList +angleList = zeros(numFrames,2); + +for numKeyFrame = 1:size(keyFrameList,1) - 1 + + firstRow = round(intervalLength * (numKeyFrame - 1) + 1); % first row of the interval between key frames + lastRow = round(intervalLength * numKeyFrame + 1); % last row of the interval between key frames + + a = keyFrameList(numKeyFrame,1); % initial key frame azimuth angle + b = keyFrameList(numKeyFrame + 1,1); % ending key frame azimuth angle + + c = keyFrameList(numKeyFrame,2); % initial key frame elevation angle + d = keyFrameList(numKeyFrame + 1,2); % ending key frame elevation angle + + n = round(intervalLength * numKeyFrame) - round(intervalLength * (numKeyFrame - 1)) + 1; % number of angles to add + + angleList(firstRow:lastRow,:) = [linspace(a,b,n).' , linspace(c,d,n).']; + +end + +% capture frames and write to the movie file +for frame = 1:size(angleList,1) + view(angleList(frame,:)); + drawnow; + writeVideo(v,getframe(gcf)); +end + +close(v);