Matlab 3D Graphics
This is a tutorial on the 3D graphics capabilities in Matlab.
Contents
Create data
We begin by creating some sample 3D data.
x=linspace(-1,1,256); % Create 1D grids. y=linspace(-2,2,128); z=linspace(-5,5,384); [xxx,yyy,zzz]=meshgrid(x,y,z); % Combine to make 3D grid. myf=sin(pi*xxx.*yyy).*(yyy.^2-3*xxx.*yyy.*zzz); xg=xxx; yg=yyy; zg=zzz; fg=myf;
Isosurface plot
figure(1)
clf
tic
% isosurface creates a 3D contour at the specified value (in this case 15).
p1=patch(isosurface(xg,yg,zg,fg,15));
Using the "FaceColor" property you can change the color of the contour. These are defined using the RGB values, some common colors are: [0 0 1] Blue [1 0 0] Red [0 1 0] Green [1 1 0] Yellow [1 1 1] White [0 0 0] Black
p1.FaceColor = [0.95 0.05 0.05];
The "EdgeColor" property color sets the color of the edges of the surface. To remove any color from the edges, set this to none.
p1.EdgeColor = 'none';
With the "FaceAlpha" property you can change the opacity of the contour.
p1.FaceAlpha = 0.55;
If you want to keep adding plots to the current figure you need to "hold" the figure.
hold on p2=patch(isosurface(xg,yg,zg,fg,5)); p2.FaceColor = [0.55 0.55 0.95]; p2.EdgeColor = 'none'; p2.FaceAlpha = 0.75;
The view command changes the angle of the viewpoint for your figure. The first number is the azimuthal angle in degrees away from the negative y axis, and the second number is the angle of elevation away from the xy-plane. To see a diagram showing the angles go to: https://www.mathworks.com/help/matlab/ref/view.html?searchHighlight=view&s_tid=doc_srchtitle.
view([120 30])
grid on
With 3D graphics you can control the "light" which creates shadows to create a more "realistic" figure. The "camlight" function specifies a light in the camera "view" coordinates (azimuthal and elevation). Every invocation will create a new light.
camlight(-45,0.1) camlight(45,30)
Since the x, y, and z grids are different lengths we can use the "daspect" command to change their aspect ratio so that the axes appear to be equal lengths.
daspect([1 2 5]) toc
Elapsed time is 6.048523 seconds.
Changing the viewer size
If we wanted to make all the axis lengths appear their actual sizes you change the daspect to [1 1 1].
figure(2) clf tic p1=patch(isosurface(xg,yg,zg,fg,15)); p1.FaceColor = [0.95 0.05 0.05]; p1.EdgeColor = 'none'; p1.FaceAlpha = 0.55; hold on p2=patch(isosurface(xg,yg,zg,fg,5)); p2.FaceColor = [0.55 0.55 0.95]; p2.EdgeColor = 'none'; p2.FaceAlpha = 0.75; view([120 30]) grid on camlight(-45,0.1) camlight(45,30) daspect([1 1 1])
Where the daspect([1 1 1]) specifies that all axis should be the same size.
Notes
Some other plotting functions which work in 3D are: surf quiver streamline To see the full selection of functions please go to: https://www.mathworks.com/help/matlab/2-and-3d-plots.html