how to show only a part of a surface fit that falls within a certain polygon

2 vues (au cours des 30 derniers jours)
Dany
Dany le 12 Fév 2015
Commenté : Dany le 15 Fév 2015
Hi, i have created a surface fit using the next code:
*ft = 'thinplateinterp';
[fitresult, gof] = fit( [xData, yData], zData, ft );*
the next thing i want to do is to plot that surface, so i use:
*figure( 'Name', 'untitled fit 2' );
h = plot(fitresult);*
the problem is that it creats the surface over areas that i am not intrested in, so i have two parameters x and y that creats a closed polygon and i would like to show the part of the surface that falls within this polygon. how can i do it? is it even possible?
thank you for your help

Réponse acceptée

Mike Garrity
Mike Garrity le 12 Fév 2015
The simplest is to set zData to nan for the points you want to discard. Consider this example:
[x,y,z] = peaks;
px = [0 4 2];
py = [-1 -1 2];
inpts = inpolygon(x,y,px,py);
z(inpts) = nan;
surf(x,y,z)
  3 commentaires
Mike Garrity
Mike Garrity le 12 Fév 2015
When you said "show" I assumed you meant you wanted to modify the surface which gets created by the plot method. Also, to discard the data outside, just do z(~inputs). Like so:
[x,y,z] = peaks;
f = fit([x(:),y(:)],z(:),'poly23');
h = plot(f);
px = [-1 3 3 2 2 0 0 -1];
py = [-1 -1 0 0 1 1 0 0];
inpts = inpolygon(h.XData,h.YData,px,py);
h.ZData(~inpts) = nan;
Dany
Dany le 15 Fév 2015
ok. thank you. but one problem though.
when i write
inpts = inpolygon(h.XData,h.YData,px,py);
i get this error:
Attempt to reference field of non-structure array.
it is like "h" does not have any properties.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by