How to find the indices that a point lays between?
5 views (last 30 days)
Show older comments
I have a vector X and a vector Y with 112 points. See picture above, the points are depected with a cross symbol.
There is a point A in the position where the arrow points out that I know its value (xA,yA).
How can I find the points that this point A lays between? For example here the answer would be 83 and 84.
4 Comments
Bruno Luong
on 11 Sep 2019
Edited: Bruno Luong
on 11 Sep 2019
If your array are 2-columns: X is n x 2 and Xa is 1 x 2, I propose
d2 = sum((X-Xa).^2,2)
[~,i] = min(d2);
if i==length(d2) || (i > 1 && d2(i-1) < d2(i+1))
i = i-1;
end
point1 = X(i,:);
point2 = X(i+1,:);
Answers (2)
Matt J
on 11 Sep 2019
Edited: Matt J
on 11 Sep 2019
find is inefficient. You should instead do,
point1=discretize(xA,X);
point2=point1+1;
6 Comments
Bruno Luong
on 12 Sep 2019
>> X=10:-1:1
X =
10 9 8 7 6 5 4 3 2 1
>> xA=2.5 % data fall between 3 and 2, meaning indexes 8 and 9 of X
xA =
2.5000
>> numel(X) + 1 - discretize(xA,flip(X)) % this should be index of Point 2
ans =
9
>> discretize(-xA,-X) % this should be index of Point 1
ans =
8
See Also
Categories
Find more on Number Theory in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!