Triangle mesh filled contour in MATLAB
Alec Jacobson
December 06, 2010
Here is matlab snippet that takes a 2D triangle mesh and a function and produces a pretty, filled contour plot in MATLAB. If your mesh vertices are stored in V, and your triangles in F, then use my previously posted code to get the boundary/outline edges of your mesh in O. Then you can create a contour plot of some function W defined over V using:
% resample W with a grid, THIS IS VERY SLOW if V is large
[Xr,Yr,Wr] = griddata(V(:,1),V(:,2),W,unique(V(:,1)),unique(V(:,2))');
% find all points inside the mesh, THIS IS VERY SLOW if V is large
IN = inpolygon(Xr,Yr,V(O,1),V(O,2));
% don't draw points outside the mesh
Wr(~IN) = NaN;
contourf(Xr,Yr,Wr)
And for a mesh like this one:
You get something like this:
You can also approach a continuous contour with this:
contourf(Xr,Yr,Wr,200)
shading flat
Compare this to what you can get from the much faster:
trisurf(F,V(:,1),V(:,2),W,'FaceColor','interp','EdgeColor','interp')
view(2)
which produces:
The only problem with this method is that the boundary looks a little nasty because of the resampling. Nothing that can't be fixed quickly in photoshop... Or even in MATLAB with something like:
line(V([O(:);O(1)],1),V([O(:);O(1)],2),'Color','k','LineWidth',6)
Which puts an ugly thick outline around the contour, but makes it look a little better...
Source