Earth cross-section
Matlab code 

% Animation that rotates the Earth by 360 degrees, then removes an octant 

% to reveal the inner structure of the Earth of the lithosphere, upper 

% mantle, lower mantle, outer core, and inner core 

 

clear

close all

 

vid = VideoWriter('earthCrossSection.mp4','MPEG-4');

vid.Quality = 100;

vid.FrameRate = 30;

open(vid);

 

figure('units','pixels','position',[0 0 1920 1080],'ToolBar','none');

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

set(gca,'linewidth',7);

lp = [0.7 0.7 0.7]; 

LL = 1.25; 

 

[xx,yy,zz] = sphere(3000); % Earth with octant removed 

[xx2,yy2,zz2] = sphere(3000); % Full spherical Earth 

[xx3,yy3,zz3] = sphere(3000); % Octant of Earth 

 

% Remove octant 

for ii = 1:3001

    for jj = 1:3001

        if (xx(ii,jj)>=0) && (yy(ii,jj)>=0) && (zz(ii,jj)<=0)

            xx(ii,jj) = NaN;

            yy(ii,jj) = NaN;

            zz(ii,jj) = NaN;

        end

    end

end

 

% Octant only 

for ii = 1:3001

    for jj = 1:3001

        if (xx3(ii,jj)<0) || (yy3(ii,jj)<0) || (zz3(ii,jj)>0)

            xx3(ii,jj) = NaN;

            yy3(ii,jj) = NaN;

            zz3(ii,jj) = NaN;

        end

    end

end 

 

% Read in representation of different components of Earth from lithosphere 

% to inner core as a set of coloured concentric circles. Drawn by the 

% author 

earthSlice = imread('earthSlice.png');

XX = [1 1; -1 -1];

YY = [1 -1; 1 -1];

ZZ = [0 0; 0 0];

 

% Get rid of regions that are black due to original image having 

% transparent regions outside circular representations of the different 

% depth regions of the Earth. Set them to NaN 

iimax = size(earthSlice,1);

jjmax = size(earthSlice,2);

for ii = 1:iimax

    for jj = 1:jjmax

        if (earthSlice(ii,jj,1)==0) && ...

                (earthSlice(ii,jj,2)==0) && ...

                (earthSlice(ii,jj,3)==0)

            earthSlice(ii,jj,1) = NaN;

            earthSlice(ii,jj,2) = NaN;

            earthSlice(ii,jj,3) = NaN;

        end

    end

end

AlphaData = earthSlice(:,:,1)+ earthSlice(:,:,2) + earthSlice(:,:,3);

 

% Read in surface representation of continents and oceans from an image

% that was produced to map onto a spherical surface. Original image

% 'earth.jpg' licenced under Creative Commons at 

% https://commons.wikimedia.org/wiki/File:PathfinderMap_hires_(4996917742).jpg

earth = imread('earth.jpg'); 

 

% Full earth, no octant removed 

% Rotate this through a day 

for rot = 0:pi/60:2*pi

    newplot

    hold off

    fullEarth = surf(xx2,yy2,-zz2,earth,'FaceColor','texturemap','EdgeColor','none');

    rotate(fullEarth,[0 0 1],rot*180/pi,[0,0,0]);

    axis equal

    axis off

    hold on

    view(110,23);

    xlim([-LL LL]);

    ylim([-LL LL]);

    zlim([-LL LL]); 

    set(gca, 'Projection','perspective');

 

    % Store the frame

    frame = getframe(gcf);

    writeVideo(vid,frame);

 

end 

pauseMov(vid,60); 

 

% Now move the octant (approximately covering longitude from Greenwich to

% India and from the equator to North pole in latitude) away from the

% original sphere 

for ii = 0:0.005:0.25 

    newplot

    hold off

    view(110,23);

    surf(xx3+ii,yy3+ii,-zz3+ii,earth,'FaceColor','texturemap','EdgeColor','none')

    axis equal

    axis off

    hold on

    surf(xx,yy,-zz,earth,'FaceColor','texturemap','EdgeColor','none');

    

    surf(XX,YY,-ZZ,earthSlice*0.98,'FaceColor','texturemap','EdgeColor','none','Alphadata',AlphaData,'FaceAlpha','texturemap');

    surf(ZZ,XX,-YY,earthSlice*1.1,'FaceColor','texturemap','EdgeColor','none','Alphadata',AlphaData,'FaceAlpha','texturemap');

    surf(YY,ZZ,-XX,earthSlice*1.25,'FaceColor','texturemap','EdgeColor','none','Alphadata',AlphaData,'FaceAlpha','texturemap');

    

    view(110,23);

    xlim([-LL LL]);

    ylim([-LL LL]);

    zlim([-LL LL]); 

    set(gca, 'Projection','perspective');

 

    % Store the frame

    frame = getframe(gcf);

    writeVideo(vid,frame);

    

end 

 

% Fade the same quadrant away to reveal inner structure 

for ii = 1:-1/30:0 

    newplot

    hold off

    view(125,31);

    surf(xx3+0.25,yy3+0.25,-zz3+0.25,earth,'FaceColor','texturemap','EdgeColor','none')

    alpha(ii)

    axis equal

    axis off

    hold on

    surf(xx,yy,-zz,earth,'FaceColor','texturemap','EdgeColor','none');

    

    surf(XX,YY,-ZZ,earthSlice*0.98,'FaceColor','texturemap','EdgeColor','none','Alphadata',AlphaData,'FaceAlpha','texturemap');

    surf(ZZ,XX,-YY,earthSlice*1.1,'FaceColor','texturemap','EdgeColor','none','Alphadata',AlphaData,'FaceAlpha','texturemap');

    surf(YY,ZZ,-XX,earthSlice*1.25,'FaceColor','texturemap','EdgeColor','none','Alphadata',AlphaData,'FaceAlpha','texturemap');

    

    view(110,23);

    xlim([-LL LL]);

    ylim([-LL LL]);

    zlim([-LL LL]); 

    set(gca, 'Projection','perspective');

 

    % Store the frame

    frame = getframe(gcf);

    writeVideo(vid,frame);

    

end 

 

close(vid)