# Counitng the number of scatter points above a surface

11 views (last 30 days)
Adam Bartle on 11 Aug 2015
Commented: Octavian Macari on 20 Mar 2018
Hi All,
I am having some troubles and hoping someone out there much smarter with MATLAB than me can help.
The problem I have i s;
• I have plotted some data as a 3D scatter plot.
• I have then plotted a surface which is a ‘limiting condition’ for the data I have.
• I need to count the number of data points that fall above and below the surface.
Is this something that can be done?
I have been reading up on slices and searching these forums for help but cant find anything close.
Any help is appreciated.
The code is;

Mike Garrity on 11 Aug 2015
You can use interp2 to evaluate the surface at the X & Y coordinates of your scatter data.
Consider the following example:
% Make up some sample data
[sx,sy,sz] = peaks(12);
px = randn(1,100);
py = randn(1,100);
pz = 5*randn(1,100);
% draw the surface and points
h1 = surf(sx,sy,sz);
hold on
h2 = scatter3(px,py,pz,'filled');
% Evaluate surface's function @ point's X & Y
spz = interp2(sx,sy,sz, px,py);
% Build mask of points which are above surface
% Delete old scatter
delete(h2)
% Replace with two scatters with different colors
h3.MarkerFaceColor = 'red';
h4.MarkerFaceColor = 'blue'; But you should read this blog post to understand some of the subtleties of how surface does it's interpolation before you go too far down this path.
##### 2 CommentsShowHide 1 older comment
Octavian Macari on 20 Mar 2018
Mike Garrity, is it possible to make a surface pace above for all points?

Lukas Bystricky on 11 Aug 2015
Edited: Lukas Bystricky on 11 Aug 2015
Can your surface be expressed as z = f(x,y)? If so for every scatter point (at position (x0,y0, z0)), you can do:
h = z0 - f(x0,y0)
If h > 0 your point is above the surface.
If you can't express your surface as z = f(x,y), you can use interp2 or something to get an approximation to z at any (x,y) and do the same as above.
Adam Bartle on 12 Aug 2015
Thanks Lukas,