File:Black and white wiggler.gif
Black_and_white_wiggler.gif (500 × 500 pixels, file size: 2.85 MB, MIME type: image/gif, looped, 200 frames, 4.0 s)
File information
Structured data
Captions
Summary edit
DescriptionBlack and white wiggler.gif |
English: Wiggling striped cone.
Deutsch: Schwingender gestreifter Kegel.
Română: Con vărgat oscilant. |
Date | |
Source | Own work |
Author | Jahobr |
GIF development InfoField | |
Source code InfoField | MATLAB codefunction [] = Black_and_white_wiggler()
% source code for drawing the animation
%
% 2017-04-24 Jahobr
fps = 50;
nFrames = 200;
nBands = 30; % black + white
mergeCircles = 8; % circles merged to create a band
nCircles = nBands*mergeCircles; % individual circle patches
[pathstr,fname] = fileparts(which(mfilename)); % save files under the same name and at file location
k = linspace(0,2*pi,nFrames+1);
k = k(1:end-1); % 0 and 2pi are the same image
xyLim = [-1.5 1.5];
figHandle = figure(15124455);
clf
axesHandle = axes;
hold(axesHandle,'on')
set(figHandle, 'Units','pixel');
set(figHandle, 'position',[1 1 1000 1000]); % big start image for antialiasing later [x y width hight]
set(axesHandle,'position',[-0.05 -0.05 1.1 1.1]); % stetch axis bigger as figure, easy way to get rid of ticks [x y width hight]
set(figHandle,'GraphicsSmoothing','on') % requires at least version 2014b
xlim(xyLim); ylim(xyLim); % set axis limits
axis equal; drawnow;
%% Radii of the circles, big -> small
radii = linspace(1.2,0.25,nCircles).^4; % 1.2^4 = 2.1 covers the whole image ... 0.25^4 = 0.004 is still visible;
% radii = logspace(log10(2),log10(0.003),40);
%% lag of each circle, big -> small
phaseShift = linspace(1.2,0.2,nCircles).^4;
% phaseShift = logspace(log10(0.5),log10(0.0005),nCircles);
% phaseShift = linspace(1.,0.0000000001,nCircles);
%% scale the movement bigger circles are slowed down, big -> small
movementScale = (1-cos(linspace(0,pi,nCircles)))*0.5;
% movementScale = ones(1,nCircles)
% movementScale = linspace(0.3,1,nCircles);
% movementScale = nthroot(linspace(0.3^3,1,nCircles),3);
angleOffPoints = ((2*pi) : -pi/200 : 0);
xTrajectory = zeros(1,nFrames); % allocate
yTrajectory = zeros(1,nFrames); % allocate
for iFrame = 1:nFrames
cla(axesHandle) % fresh frame
col = [0 0 0]; % start black
for iCirc = 1:nCircles % draw stack of circles big to small
nPatch = 1+mergeCircles-rem(iCirc,mergeCircles);
% draw a figure-8
xc=sin( phaseShift(iCirc)+k(iFrame)) *movementScale(iCirc);
yc=sin(2*(phaseShift(iCirc)+k(iFrame)))*movementScale(iCirc);
% % draw a more complex movement
% xc=sin(2*(phaseShift(iCirc)+k(iFrame)))*movementScale(iCirc);
% yc=cos(3*(phaseShift(iCirc)+k(iFrame)))*movementScale(iCirc);
[X(nPatch,:),Y(nPatch,:)] = pol2cart(angleOffPoints,radii(iCirc));
X(nPatch,:) = X(nPatch,:)+xc; % center offset
Y(nPatch,:) = Y(nPatch,:)+yc; % center offset
if nPatch == mergeCircles
MergeX = X(nPatch,:);
MergeY = Y(nPatch,:);
for iMerge = 2:mergeCircles % draw stack of circles big to small
[MergeX,MergeY] = polybool('union', MergeX,MergeY,...
X(iMerge,:),Y(iMerge,:));
end
patch(MergeX,MergeY,col,'EdgeColor',1-col);
col = 1-col; % flip black and white
end
end
xTrajectory(iFrame) = xc; % store trajectory of smallest circle
yTrajectory(iFrame) = yc; % store trajectory of smallest circle
%% save animation
xlim(xyLim); ylim(xyLim); % set axis limits
drawnow % update figure window and execute pending callbacks
f = getframe(figHandle);
f.cdata = imresize(f.cdata,0.5); % the size reduction: adds antialiasing, edge line thinner
if iFrame == 1 % create colormap
map = gray(8); % create own color map %
im = rgb2ind(f.cdata,map,'nodither'); %
im(1,1,1,nFrames) = 0; % allocate
end
imtemp = rgb2ind(f.cdata,map,'nodither');
im(:,:,1,iFrame) = imtemp;
end
imwrite(im,map,fullfile(pathstr, [fname '.gif']),'DelayTime',1/fps,'LoopCount',inf) % save gif
disp([fname '.gif has ' num2str(numel(im)/10^6 ,4) ' Megapixels']) % Category:Animated GIF files exceeding the 50 MP limit
%% Helper Figures
% check trajectory of the tip
figure(15634469); clf; hold on
plot(xTrajectory,yTrajectory)
title('trajectory')
figure(13234469); clf; hold on
subplot(1,3,1)
plot(radii)
title('radii')
subplot(1,3,2)
plot(phaseShift)
title('phase shift')
subplot(1,3,3)
plot(movementScale)
title('movement scale')
|
Licensing edit
I, the copyright holder of this work, hereby publish it under the following license:
This file is made available under the Creative Commons CC0 1.0 Universal Public Domain Dedication. | |
The person who associated a work with this deed has dedicated the work to the public domain by waiving all of their rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse |
File history
Click on a date/time to view the file as it appeared at that time.
Date/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
current | 22:12, 12 September 2017 | 500 × 500 (2.85 MB) | Jahobr (talk | contribs) | GraphicsSmoothing with matlab version 2017a, 8 colores, 500x500 px | |
09:25, 26 April 2017 | 450 × 450 (1.99 MB) | Jahobr (talk | contribs) | white truly white, bigger | ||
07:43, 28 January 2017 | 400 × 400 (1.71 MB) | Jahobr (talk | contribs) | {{Information |Description ={{en|1=Wiggling striped cone.}} {{de|1=Schwingender gestreifter Kegel.}} |Source ={{own}} |Author =Jahobr |Date =2017-01-28 |Permission = |other_versions = }} {{Created with M... |
You cannot overwrite this file.
File usage on Commons
The following 3 pages use this file:
File usage on other wikis
The following other wikis use this file:
- Usage on cs.wikipedia.org
- Usage on de.wikipedia.org
- Usage on en.wikibooks.org
- Usage on es.wikibooks.org
- Usage on pt.wikipedia.org
- Usage on ro.wikipedia.org
- Usage on vi.wikipedia.org