MATLAB: How to plot a single valued function over a triangulated surface

functions defined over a surface

I have a finite element mesh [t,p] for a surface in 3D, where t is the triangles and p is the (x,y,z) coordinates of the vertices. For instance the mesh for the unit sphere from http://persson.berkeley.edu/distmesh/. I'm using the Matlab command patch('Faces',t,'Vertices',p,'edgecol','r'); to visualize this mesh. The question is how to plot a function defined over this triangulated surface?

Best Answer

You can do it with patch. You'll just want to set FaceColor to interp and set the FaceVertexCData to to value of your function.
But you might find it easier to use the trisurf function. Here's a simple example:
npts = 100;
x = 2*randn(npts,1);
y = 2*randn(npts,1);
z = peaks(x,y);
c = z;
tri = delaunay(x,y);
h = trisurf(tri,x,y,z,c,'FaceColor','interp');
colormap(parula(12))
axis tight