Cutting area plot matlab

55 views (last 30 days)
Jerry on 12 Apr 2020
Commented: Rena Berman on 12 Oct 2020
I have a given 3D surface plot My problem is drawing an area, f and cutting out exactly this area from the given plot.Please help!

darova on 12 Apr 2020
Jerry on 13 Apr 2020
i have a random 3d surface plot like in the picture, and programmed a triangle into the plot.
how do I substract exactly this shape of the triangle(in pink) from my given plot, so that there is a triangle area of the plot cut out?
Rena Berman on 12 Oct 2020

darova on 13 Apr 2020
clc,clear
% generate surface
r = 0:0.1:5;
t = linspace(0,2*pi,30);
[T,R] = meshgrid(t,r);
Z = 5*sin(R)./R;
[X,Y] = pol2cart(T,R);
% data for cutting
x = [1 3 0.7];
y = [0.2 0.3 3];
z = [1 1.2 1];
ix = convhull(X(:),Y(:)); % boundary of surface
x1 = X(ix(1:end-2)); % vertices of boundary
y1 = Y(ix(1:end-2));
gd1 = [2; length(x1); x1(:); y1(:)]; % surface boundary geometry
gd2 = gd1;
gd2(1:2+2*length(x)) = [2; length(x); x(:); y(:)]; % cutting plane boundary geometry
dl = decsg([gd1 gd2],'P1-P2',char('P1','P2')'); % decomposite geometry
[p,e,t] = initmesh(dl,'hmax',0.5); % create mesh
F = scatteredInterpolant(X(:),Y(:),Z(:));
zz = F(p(1,:),p(2,:)); % calculate Z coordinate for each mesh point
fv.vertices = [p;zz]'; % x y z data
fv.faces = t(1:3,:)'; % connection list of faces
cla
patch(fv,'facecolor','r') % surface
patch(x,y,z,'g') % cutting plane
view(150,45)
axis vis3d
If you have boundary intstead of convhull
ix = convhull(X(:),Y(:)); % boundary of surface

Jerry on 16 Apr 2020
here's the picutre
darova on 16 Apr 2020
I choosed XZ plane to detect if points inside triangle (i used inpolygon)
Since there are another vertices inside i added Y axis condition:
where y1 - triangle verices, y2 - surface vertices
Result
Was not that easy! See attached script
Jerry on 17 Apr 2020
thank you so much! it is perfec!!!