Blog Post Number 300, Vibrating Logo

This is post number 300 of Cleve's Corner blog. The first post was on June 6, 2012, which is 600 weeks ago. So, I have averaged one post every two weeks for over a decade. The posts were more frequent in the early days and are less frequent today.

Contents

Vibrating Logo

For my 300-th post, I want to take another look at our MathWorks logo. Here is a modified version of one of the animations that I entered in the recent MATLAB Flipbook Mini Hack.

       Vibrating Logo

The MathWorks company logo is the solution to a partial differential equation that describes how a disturbance travels through matter. I discussed the logo in a five-part blog post in 2014. Here are links to three of those posts.

One of my most-liked blog posts is by ten-year old Eden Rajapakse.

Code

This code is available at vibrating_L.

vibrating_L

function vibrating_L

    % MathWorks logo, vibrating L-shaped membrane. See Cleve's Corner, Dec.13, 2023.
% https://blogs.mathworks.com/cleve/2023/12/13/blog-post-nuber-300-vibrating-logo.

stop = init_fig;
fps = 6;
f = 0;
% Loop until stop is toggled.
while stop.Value == 0
f = f + 1;
vibrating_logo_frame(f)
pause(1/fps)
end


vibrating_logo_frame

    function vibrating_logo_frame(f)
%
% One frame of animation.
if f == 1
first_frame
end
fud = get(gcf,'UserData');
[mu,L,s] = deal(fud{:});
t = (f-1)/fps;
Z = cos(mu(1)*t)*L{1} + sin(mu(2)*t)*L{2} + sin(mu(3)*t)*L{3} +  ...
sin(mu(4)*t)*L{4} + sin(mu(5)*t)*L{5} + sin(mu(6)*t)*L{6};
s.ZData = Z;
end


first frame

    function first_frame
cla
axis off

% First six eigenvalues.
mu = sqrt([9.6397238445, 15.19725192, 2*pi^2, ...
29.5214811, 31.9126360, 41.4745099]);

% First six eigenfunctions.
L{1} = 30*membrane(1,25);
L{2} = 2*membrane(2,25);
L{3} = -2*membrane(3,25);
L{4} = 5*membrane(4,25);
L{5} = -3*membrane(5,25);
L{6} = 4*membrane(6,25);

% Surf plot with custom lighting.
axes('CameraPosition', [-193.4013 -265.1546  220.4819],...
'CameraTarget',[26 26 10], ...
'CameraUpVector',[0 0 1], ...
'CameraViewAngle',9.5, ...
'DataAspectRatio', [1 1 .9],...
'Visible','off', ...
'XLim',[1 51], ...
'YLim',[1 51], ...
'ZLim',[-13 40]);
s = surface(zeros(size(L{1})), ...
'EdgeColor','none', ...
'FaceColor',[0.9 0.2 0.2], ...
'FaceLighting','phong', ...
'AmbientStrength',0.3, ...
'DiffuseStrength',0.6, ...
'Clipping','off',...
'BackFaceLighting','lit', ...
'SpecularStrength',1.0, ...
'SpecularColorReflectance',1, ...
'SpecularExponent',7);
light('Position',[40 100 20], ...
'Style','local', ...
'Color',[0 0.8 0.8]);
light('Position',[.5 -1 .4], ...
'Color',[0.8 0.8 0]);
set(gcf,'UserData',{mu,L,s})
end


init_fig

    function stop = init_fig
% Initialize figure.
fig = gcf;
fig.Color = 'k';
fig.ToolBar = 'none';
fig.NumberTitle = 'off';
fig.Clipping = 'off';
stop = uicontrol;
stop.Style = 'togglebutton';
stop.String = 'X';
stop.FontSize = 12;
stop.FontWeight = 'bold';
stop.Units = 'normalized';
stop.Position = [.92 .92 .06 .06];
cla
shg
end

end


Published with MATLAB® R2023a

|