How to find the indices that a point lays between?

조회 수: 5 (최근 30일)
ARGY B
ARGY B 2019년 9월 11일
댓글: Matt J 2019년 9월 12일
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
Matt J
Matt J 2019년 9월 12일
Ah. Yes, you are right.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Linear Algebra에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by