How to find the indices that a point lays between?

5 次查看(过去 30 天)
points.PNGpoint.PNG
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 个评论
ARGY B
ARGY B 2019-9-11
You are right.
Do you suggest another way? In case X is not increasing.
Bruno Luong
Bruno Luong 2019-9-11
编辑:Bruno Luong 2019-9-11
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,:);

请先登录,再进行评论。

回答(2 个)

Matt J
Matt J 2019-9-11
编辑:Matt J 2019-9-11
Do you suggest another way? In case X is not increasing.
If X,Y are non-monotonic, I would do
[~,points] = pdist2([X(:),Y(:)],[xA,yA] ,'Smallest',2)

Matt J
Matt J 2019-9-11
编辑:Matt J 2019-9-11
find is inefficient. You should instead do,
point1=discretize(xA,X);
point2=point1+1;
  6 个评论
Bruno Luong
Bruno Luong 2019-9-12
>> 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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Number Theory 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by