Extract data below a curve

2 views (last 30 days)
TAPAS
TAPAS on 27 Jan 2021
Edited: Veronica Taurino on 12 Mar 2021

I have a gridded data as given in the figure. I want to extract data below the given line(ABCDEFGHI). The co-ordinate of the corner point of the line is given. That means I want to keep only data below that line.

Answers (1)

Veronica Taurino
Veronica Taurino on 12 Mar 2021
Edited: Veronica Taurino on 12 Mar 2021
Your input data is something like that:
% Hypotesis: black points do not overlay the grid (can lay in between blue points)
A =[1 4.5];
B = [2.5 5.3];
C = [3.5 5.1];
D = [6.2 6.1];
E = [6.8 6.1];
F = [7.2 6];
G = [9.5 4.8];
H = [11.2 5.5];
I = [13 5];
ALL= [A;B;C;D;E;F;G;H;I];
plot(ALL(:,1),ALL(:,2))
[X,Y] = meshgrid(1:12,1:7); %gridded point
hold on
plot(X,Y,'.k') % grid
If your black points (A,B,C,...) do not overlay the grid but can lay in between blue points, like this:
first you need to evaluate the red point I dotted in red in the image above with a linear interpolation:
xq = [1 2 3 4 5 6 7 8 9 10 11 12]; % X-grid coordinates at which evaluate the Y
vq = interpn(ALL(:,1)',ALL(:,2)',xq,'linear');
and then you can do a comparison like that:
for jj=1:size(Y,2)
YY(:,jj)=Y(:,jj)<=vq(jj)
end
% Plot only remaining points
plot(X(YY),Y(YY),'or')
  1 Comment
Adam Danz
Adam Danz on 12 Mar 2021
+1, nice approach
1 error and 1 inefficiency to improve,
  1. D and E are the same coordinate in the current version of your answer and that causes an error in interpn due to duplicity.
  2. The jj-loop can be replaced by,
YY = Y < vq;

Sign in to comment.

Categories

Find more on Interpolation in Help Center and File Exchange

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!