hpc.social


High Performance Computing
Practitioners
and friends /#hpc
Share: 
This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.

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.

Why is it L-shaped?.

The method of particular solutions.

How the view has evolved..

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

Code

This code is available at vibrating_logo.

vibrating_logo

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

    stop = init_fig;
    fps = 6;
    f = 0;
    % Loop until stop is toggled.
    while true
        f = f + 1;
        if stop.Value
            return
        end
        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.MenuBar = 'none';
        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


Get the MATLAB code

Published with MATLAB® R2023a