(Monads Video Coming Soon)
Category: Video
(Cover) Strange Charm – Hank Green
In a rush, so I figured I’d record an informal cover and leave all of the mistakes in. Not sure why it came out so low res!
Matlab: Smooth Rotating Animation for Line Plots
I recently became stuck trying to create an animation which consists of a smooth rotation of a viewpoint around the Lorenz attractor. Methods I use for changing viewpoints with respect to surface objects were creating jerky, lagging animations when applied to my line plot.
This will work for any 3D line plot:
plot3(x,y,z);
axis vis3d
fps = 60; sec = 10;
vidObj = VideoWriter('plotrotation.avi');
vidObj.Quality = 100;
vidObj.FrameRate = fps;
open(vidObj);
for i=1:fps*sec
camorbit(0.9,-0.1);
writeVideo(vidObj,getframe(gcf));
end
close(vidObj);
This results in the following smooth animation:
Visual Morse Code
This video also sneakily teaches you the phonetic alphabet.
Some Trombone Basics
In which I play a bit, debunk some misconceptions, teach you the slide positions and embouchure (i.e., mouth shape), and show you how to safely bike with a trombone.
Speed Drawing a Hand starring the Elven Welcome
A video of me drawing a hand as my interpretation of Tolkien’s Elven Welcome plays in the background. Enjoy!
Matlab: Rotating Sphere Animation
Let’s say you want to make a simple simulation of a sphere spinning in Matlab.
First, you set the pop-up window to have the title ‘Spheres,’ the window to have black background, and specify said window’s position and size.
format compact
set(gcf,'Menubar','none','Name','Spheres', ...
'NumberTitle','off','Position',[10,350,400,300], ...
'Color',[0 0 0]);
Matlab has a nice built in “sphere” surface function that you can invoke after you specify where you want it’s axes. Note that if you don’t include the
h = axes('Position',[0 0 1 1]);
command, the program will run the same except your view of the sphere will be farther away (smaller).
%Zooms in on sphere
h = axes('Position',[0 0 1 1]);
%Draws sphere
[X Y Z]=sphere(20);
C = Z^2 + Y^2; %creates color data to map onto sphere
hs = surf(X, Y, Z, C);
The sphere function creates a “curved” surface using quadrilaterals. The boundaries of these quadrilaterals can be hidden set(hs,'EdgeColor','None');
or shown set(hs,'EdgeColor',[0.5 0.5 0.5]);
%Shows wires
set(hs,'EdgeColor',[0.5 0.5 0.5]);
%Adjusts transparency
alpha('color');
alphamap('rampdown');
%Adjusts lighting
camlight right;
lighting phong
hidden off
axis off
axis equal
Stopping here, you have a static sphere.
Depending on whether you wish to just play the animation or if you wish to also save it as an ‘.avi’ file, you approach the animation in different ways. Either way, the animation looks like this:
To play the animation without saving it:
oh=findobj(gca,'type','surface');
%Spins about z axis.
for i = 1:36
axis off;
rotate(oh,[0 0 1],10);
M(i) = getframe(gca);
end
%Spins about y axis.
for i = 1:36
axis off;
rotate(oh,[0 1 0],10);
M(i) = getframe(gca);
end
%Spins about x axis.
for i = 1:36
axis off;
rotate(oh,[1 0 0],10);
M(i) = getframe(gca);
end
To save the movie as an ‘.avi’ for future use, you can modify the above code section slightly. You create a writer object and write the video to it frame by frame (using writeVideo) as part of each forloop.
%Create writerObj
writerObj = VideoWriter('sphere.avi');
open(writerObj)
%Animated movie of the rotation of the 3D globe
oh=findobj(gca,'type','surface');
%Spins about z axis.
for i = 1:36
axis off;
rotate(oh,[0 0 1],10);
M(i) = getframe(gca);
frame = getframe;
writeVideo(writerObj,frame);
end
%Spins about y axis.
for i = 1:36
axis off;
rotate(oh,[0 1 0],10);
M(i) = getframe(gca);
frame = getframe;
writeVideo(writerObj,frame);
end
%Spins about x axis.
for i = 1:36
axis off;
rotate(oh,[1 0 0],10);
M(i) = getframe(gca);
frame = getframe;
writeVideo(writerObj,frame);
end
close(writerObj);
Putting it all together:
format compact
set(gcf,'Menubar','none','Name','Spheres', ...
'NumberTitle','off','Position',[10,350,400,300], ...
'Color',[0 0 0]);
h = axes('Position',[0 0 1 1]);
%Draws sphere
[X Y Z]=sphere(20);
C = Z^2 + Y^2;
hs = surf(X, Y, Z, C);
%sets wireframe to visible
set(hs,'EdgeColor',[0.5 0.5 0.5]);
%Alters transparency of sphere
alpha('color');
alphamap('rampdown');
%Sets lighting of sphere
camlight right;
lighting phong
hidden off
axis equal
%Create writerObj
writerObj = VideoWriter('sphere.avi');
open(writerObj)
%Animated movie of the rotation of the 3D globe
oh=findobj(gca,'type','surface');
%Spins about z axis.
for i = 1:36
axis off;
rotate(oh,[0 0 1],10);
M(i) = getframe(gca);
frame = getframe;
writeVideo(writerObj,frame);
end
%Spins about y axis.
for i = 1:36
axis off;
rotate(oh,[0 1 0],10);
M(i) = getframe(gca);
frame = getframe;
writeVideo(writerObj,frame);
end
%Spins about x axis.
for i = 1:36
axis off;
rotate(oh,[1 0 0],10);
M(i) = getframe(gca);
frame = getframe;
writeVideo(writerObj,frame);
end
close(writerObj);
DC Josephson Effect
I created a video for my Modern Physics class explaining the DC Josephson Effect in less than 5 minutes. You might enjoy it, I sure enjoyed making it!