How do I cut a surface in Matlab plot?

49 vues (au cours des 30 derniers jours)
Hamid Attar
Hamid Attar le 19 Mai 2020
Réponse apportée : darova le 19 Mai 2020
Hello,
I have a function f(x) which is in 2D, allowing me to make surf plot. To make the surf plot, I discretise the space and do 2 for loops over the x and y indecies to get a matrix of Z values. I then use the surf command to plot this surface.
However, I would like to cut the surface at all Z values above a critical value to produce a smooth boundary. I do this by simply removing the values of the Z matrix which are above a critical value by setting those to "nan".
When I plot this new Z matrix (with some enteries as "nan") , I get a choppy border, see the figures below. I know this is because my space is discretised into a finite grid of points, and I could just increase the number of points, however since the function is expensive to evaluate, I don't want to do this methid.
Is there another way to plot the surface with a smooth boundary?
Many thanks.

Réponses (1)

darova
darova le 19 Mai 2020
Do you have a contour? Green line?
[x,y,z] = peaks(20);
% some contour data
data = [-0.3907 1.5591
-1.8039 0.6908
-0.8456 -0.8716
1.7243 -0.8535
1.3515 0.7998];
x1 = data(:,1);
y1 = data(:,2);
gd = [2; length(x1); x1(:); y1(:)]; % geometry
dl = decsg(gd); % decomposition of geomtry
[p,e,t] = initmesh(dl); % mesh
z1 = interp2(x,y,z,p(1,:),p(2,:)); % get 'z' coordinate
ff.vertices = [p' z1(:)];
ff.faces = t(1:3,:)';
ff.facecolor= 'y';
surf(x,y,z,'facecolor','none')
line(x1,y1,y1*0+5,'linew',3)
patch(ff)
axis vis3d

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by