Skip to content

Instantly share code, notes, and snippets.

@maruta
Last active September 7, 2017 00:18
Show Gist options
  • Save maruta/1629a925acbef9dbe335497cd52d917c to your computer and use it in GitHub Desktop.
Save maruta/1629a925acbef9dbe335497cd52d917c to your computer and use it in GitHub Desktop.
% vector field
dxdt = @(x) [x(2);-x(1)];
% mesh
[GX,GY] = meshgrid(linspace(-2*pi,2*pi,100),linspace(-10,10,100));
% stream
DX = arrayfun(@(x,y) [1,0]*dxdt([x;y]),GX,GY);
DY = arrayfun(@(x,y) [0,1]*dxdt([x;y]),GX,GY);
[verts,averts] = streamslice(GX,GY,DX,DY,400);
iverts = interpstreamspeed(GX,GY,DX,DY,verts,1/60/3);
% visualize
v = VideoWriter('stream.m4v','MPEG-4');
v.FrameRate=60;
open(v)
nframe = 60*10-1;
seglen = 60;
offset =randi(seglen,numel(iverts),1)-1;
frames = cell(seglen,1);
for frame=1:seglen
fig = figure(6);
clf
fig.Position = [fig.Position(1:2),1024,768];
axes('Units', 'normalized', 'Position', [0 0 1 1])
set(fig,'Color',[0,0,0.2])
colormap([linspace(0,0,100);linspace(0,1,100);linspace(0.2,1,100)]')
hold on
for k=1:length(iverts)
xy = iverts{k};
C = mod((0:(size(xy,1)-1))-frame+offset(k),seglen)/(seglen-1);
C = exp(-(1-C)*1);
xy(end+1,:)=[0,NaN];
patch(xy(:,1)',xy(:,2)',[C,0],'EdgeColor','interp','LineWidth',0.5)
end
xlim([min(GX(:)),max(GX(:))])
ylim([min(GY(:)),max(GY(:))])
set(gca,'Color',[0,0,0.2])
drawnow
frames{frame}=getframe(gcf);
end
for frame=1:nframe
writeVideo(v,frames{mod(frame,seglen)+1})
end
close(v)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment