Animation of wavelength of light v photon energy
Matlab code 

% Animation of change in wavelength v photon energy in the visible regime 

 

clear; close all

 

Konst = 6.626e-34*2.9979e8/1.6022e-19; % hc in eV.m 

radFactor = pi/180; 

 

N = 300; 

z = (1:3500); 

ampl = 0.*z; 

v = VideoWriter('wavelength_v_photonenergy.mp4','MPEG-4'); 

v.Quality = 100; 

open(v); 

set(0,'defaultfigurecolor',[1 1 1]);

 

for i = 1:300 % scan photon energy from red (1.77 eV) to blue (3.11 eV) 

    lambda = (700 - i); % wavelength in nm 

    % Plot 

    % Begin with colour of plot as function of loop (here, energy) 

    

    if (i <= N/4) % from red (1 0 0) to yellow (1 1 0) 

        rval = 1.0;

        gval = 4*i/N; 

        bval = 0.0;

    elseif (i > N/4) && (i <= N/2) % from yellow (1 1 0) to green (0 1 0) 

        rval = 1.0 - 4*(i - N/4)/N; 

        gval = 1.0; 

        bval = 0.0;

    elseif (i > N/2) && (i <= 3*N/4) % from green (0 1 0) to cyan (0 1 1) 

        rval = 0.0;

        gval = 1.0; 

        bval = 4*(i - N/2)/N; 

    else % from cyan (0 1 1) to blue (0 0 1) 

        rval = 0;

        gval = 1 - 4*(i - 3*N/4)/N; 

        bval = 1.0;

    end 

    

    ampl = sin(2*pi.*(z - 10*i)/lambda) + 1.0; % 10i makes sine wave move to right 

                                               % + 1.0 offsets x-axis position 

    plot(-0.1,2.1,0,3500,z,ampl,'color',[rval, gval, bval], 'LineWidth', 2.0);

        

    xaxisLabel = get(gca,'XTickLabel'); 

    h=get(gca);

    set(gca,'FontName','Helvetica','fontsize',18);

    set(gca,'TickLength',[0.016, 2]); 

    set(gca,'YColor','none'); % Removes left and right y-axes 

    set(gca,'Box', 'off'); % Removes upper x-axis 

    xlim([0 3500]) % Plot 5 red wavelengths, or nearly 9 blue wavelengths 

    ylim([-0.1 2.1]) % 

    set(gca,'linewidth',2); 

    xlabel('z [nm]'); 

    

    str1 = '{\lambda} = ';

    str2 = num2str(lambda,'% 7.0f'); 

    str3 = ' nm, '

    strTot = [str1,str2,str3]; 

    hText = text(2150, 2.2, strTot, 'FontSize',14); 

 

    str1 = 'E = ';

    str2 = num2str(Konst/(lambda*1e-9),'% 7.3f'); 

    str3 = ' eV'

    strTot = [str1,str2,str3]; 

    hText = text(2800, 2.2, strTot, 'FontSize',14); 

 

    

    % Store the frame

    frame = getframe(gcf); 

    writeVideo(v,frame); 

end 

% Output the movie as an mpg file

close(v);