8

Blog Post Number 300, Vibrating Logo

 9 months ago
source link: https://blogs.mathworks.com/cleve/2023/12/13/blog-post-number-300-vibrating-logo/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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.gif

       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.

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.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

Published with MATLAB® R2023a


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK