## A little love for MATLAB – plotting algebraic surfaces

Back in February I blogged about a little Mathematica demonstration I wrote which plotted several heart shaped algebraic surfaces. One or two people wrote in the comments section asking how to do such plots in MATLAB and I thought that it was about time I came up with the code.

%code to plot a heart shape in MATLAB

%set up mesh

n=100;

x=linspace(-3,3,n);

y=linspace(-3,3,n);

z=linspace(-3,3,n);

[X,Y,Z]=ndgrid(x,y,z);

%Compute function at every point in mesh

F=320 * ((-X.^2 .* Z.^3 -9.*Y.^2.*Z.^3/80) + (X.^2 + 9.* Y.^2/4 + Z.^2-1).^3);

%generate plot

isosurface(F,0)

view([-67.5 2]);

It’s not really the right time of year for hearts though is it? So let’s plot a star instead.

%Code to plot a 3D star in MATLAB

%set up mesh

n=200;

x=linspace(-2,2,n);

y=linspace(-2,2,n);

z=linspace(-2,2,n);

[X,Y,Z]=ndgrid(x,y,z);

%Compute function at every point in mesh

F=X.^2+Y.^2+Z.^2+1000*(X.^2+Y.^2).*(X.^2+Z.^2).*(Y.^2+Z.^2);

%generate plot

isosurface(F,1);

axis off;

view([-48 18]);

For more examples of algebraic surfaces see the Algebraic Surfaces Gallery.

Happy Valentine’s Day!

This was a far as I got making the heart pink:

%code to plot a heart shape in MATLAB

%set up mesh

n=100;

x=linspace(-3,3,n);

y=linspace(-3,3,n);

z=linspace(-3,3,n);

[X,Y,Z]=ndgrid(x,y,z);

%Compute function at every point in mesh

F=320 * ((-X.^2 .* Z.^3 -9.*Y.^2.*Z.^3/80) + (X.^2 + 9.* Y.^2/4 + Z.^2-1).^3);

%generate plot

p = patch(isosurface(F,0));

set(p,’FaceColor’, ‘red’,’EdgeColor’, [1 .5 .5]);

view([-67.5 2]);