# MATLAB TUTORIAL, part 2: 3D Plotting

3D Plotting

matlab provides many useful instructions for the visualization of 3D data. The instructions provided include tools to plot wire-frame objects, 3D plots, curves, surfaces, etc. and can automatically generate contours, display volumetric data, interpolate shading colors and even display non-Matlab made images.

 Order Function plot3(x,y,z,'line shape') Space curve meshgrid(x,y) Mesh plot mesh(x,y,z) hollow mesh surface surf(x,y,z) mesh surface, solid filled shading flat flat/smooth surface space countour3(x,y,z,n) 3-dimensional equivipotential (n) lines contour(x,y,z) contours meshc(x,y,z) hollow grid graph projected by equivipotential lines [x,y,z]=cylinder(r,n) 3-dimensional curve surfaces

We show how to use plotting commands by examples.

Example: In the interval [0, 10*π], draw the parametric curve: $$x = \sin (t), \ y = \cos (t), \ z = t.$$ We type in the following matlab code:


t=0:0.01:10*pi;
plot3(sin(t),cos(t),t)


Example: Plot a surface $$z=(x+y)^2$$

x=-3:0.1:3;
y=1:0.1:5;
[x,y]=meshgrid(x,y);
z=(x+y).^2;
plot3(x,y,z)


When using ''meshgrid,'' the coding should be changed into:

x=-3:0.1:3;
y=1:0.1:5;
[x,y]=meshgrid(x,y);
z=(x+y).^2;
mesh(x,y,z)


Or the solid filled:

x=-3:0.1:3;
y=1:0.1:5;
[x,y]=meshgrid(x,y);
z=(x+y).^2;
surf(x,y,z)


And with the flat surface:

x=-3:0.1:3;
y=1:0.1:5;
[x,y]=meshgrid(x,y);
z=(x+y).^2;
surf(x,y,z)


Example: Consider a 3-dimensional rotating surface ([x,y,z]=cylinder(r,n))
We plot the 3D graph for $$r(t)=2+\sin (t) .$$ Using “mesh, cylinder” the code will be as follows

t=0:pi/10:2*pi;
r=2+sin(t);
[x,y,z]=cylinder(r,30);
mesh(x,y,z)

Or

with the Solid filled

t=0:pi/10:2*pi;
r=2+sin(t);
[x,y,z]=cylinder(r,30);
surf(x,y,z)


t=0:pi/10:2*pi;
r=2+sin(t);
[x,y,z]=cylinder(r,30);
surf(x,y,z)


Now we plot the function of r(t)=2+sin(t), using the 3-dimension equipotential lines

t=0:pi/10:2*pi;
r=2+sin(t);
[x,y,z]=cylinder(r,30);
contour3(x,y,z,20)


Or:

t=0:pi/10:2*pi;
r=2+sin(t);
[x,y,z]=cylinder(r,30);
meshc(x,y,z)

Or:

t=0:pi/10:2*pi;
r=2+sin(t);
[x,y,z]=cylinder(r,30);
surfc(x,y,z)

Example:

Toroid surface:

a=5; % a and c are arbitrary constants
c=10;
[u,v]=meshgrid(0:10:360); % meshgrid produces a full grid represented by the output coordinate arrays u and v; u and v are time variables
x=(c+a*cosd(v)).*cosd(u); % x, y, and z are the parameterized equations for a toroid
y=(c+a*cosd(v)).*sind(u);
z=a*sind(v);
surfl(x,y,z) % surfl creates a surface plot with colormap-based lighting
axis equal; % scales the axis so the x, y, and z axis are equal

# Example 0.1.4: Helix

t = 0:pi/50:10*pi; %create the vector t. starting value of 0, each element increases pi/50 from the previous up through 10*pi
plot3(sin(t),cos(t),t) %3D plot, coordinate (x, y, t)
title('Helix') %creates plot title
xlabel('sin(t)') %creates x label
ylabel('cos(t)') %creates y label
zlabel('t') %creates t label
grid on %dashed grids

# Example 0.1.5:

% The Viviani's Curve is the intersection of sphere x^2 + y^2 + z^2 = 4*a^2
%and cylinder (x-a)^2 +y^2 =a^2
%This script uses parametric equations for the Viviani's Curve,
%and the cylinder and sphere whose intersection forms the curve.

% For the sphere:


a = 2; %the parameter 'a' from the equations, here a=2
phi = linspace(0,pi,40); %this defines the scope of phi, from 0 to pi, the '40' indicates 40 increments between the bounds
theta = linspace(0,2*pi,50); %this defines the scope of theta
[phi,theta] = meshgrid(phi,theta); %creates a grid of (phi,theta) ordered pairs
%the parametric equation for the sphere:
x=2*a*sin(phi).*cos(theta); %use a '.' before the operator, this is an array operation
y=2*a*sin(phi).*sin(theta); %the . indicates that this operation goes element by element
z=2*a*cos(phi); %note: always suppress data using a semicolon

%Plotting the sphere:
mhndl1=mesh(x, y, z); %'mhndl' plots and stores a handle of the meshgrid
set(mhndl1,... % formats 'mhndl'
'EdgeColor',[0,0,1]) %gives the surface color, [0,0,1] is a color triple, vary the combination to get different color
axis equal %controls axis equality, this is very important for ensuring the sphere looks perfectly round
axis on %controls whether axes are 'on' or 'off'

%For the cylinder:
t=linspace(0,2*pi,50); %defines the scope of 't'
z=linspace(-2*a,2*a,30); %defines the scope of 'z', the bounds for the top and bottom of the cylinder
[t,z]=meshgrid(t,z); %creates pairs of (t,z)
x=a+a*cos(t); %the parametrized cylinder
y=a*sin(t);
z = 1*z;
%Plotting the cylinder
hold on %prevents override of plot data, so both the cylinder and sphere can occupy the same plot
mhndl2=mesh(x, y, z); %notice 'mhndl' is numbered, mhndl2=mesh(x,y,z) plots the cylinder
set(mhndl2,...
'EdgeColor',[1,0,0]) %[1,0,0] gives the color red
view(50,20)
%view(horizontal_rotation,vertical_elevation) sets the angle of view,
%both parameters used are measured in degrees

%For the actual Vivani's Curve:
t=linspace(0,4*pi,200); %scope of the 't' values
x= a+a*cos(t); %parametrized Viviani's Curve
y= a*sin(t);
z = 2*a*sin(t/2);
%To plot the Viviani's Curve:
vhndl = line( x,y,z); %here 'vhndl' is used to plot the curve and record the handle
set(vhndl, ...
'Color', [0,0,0],... % here [0,0,0] gives the color black
'LineWidth',3) %line width of the line
view(50,20);
%similar to before, this indicates 50 degrees horizontal rotation, 20 degrees vertical elevation

title('Viviani Curve') %to add a title, use title('Title')


# Example 0.1.6:

Some other simple 3D curves:

[x,y] = meshgrid(-2:0.2:2,-2:0.2:2);
z=x.*y.*exp(-x.^2-y.^2);
figure
surface(x,y,z)
view(3)

z=(cos(x).^2).*(cos(y).^2);
surf(x,y,z)
ezmesh('x*y/((x^2)+(y^2))')