2 views (last 30 days)

Show older comments

I have a matrix A that has dimension n x 2.

A(:,1) is x-values and A(:,2) is y values.

Choose the the pairs that is near each others within certain distance and store in matrix B that has x value in column 1 and y value in column 2.

Example

A= [1 1 ; 2 2 ; 5 5 ; so on]

let say if the distance we want to set is 2

then dist =sqrt((2-1)^2 +(2-1)^2) = sqrt(2) which is less than 2. So first and second pair are close.

store it in B

B= [1 1 ; 2 2; so on ]

Nothe this is example for 3 pairs and I have n- pair.

Please help me with a loop to do n-pair

Thank you

Matt Kindig
on 17 Jul 2013

Edited: Matt Kindig
on 17 Jul 2013

One (non-loop) way:

[x1,x2]=meshgrid(A(:,1));

[y1,y2]=meshgrid(A(:,2));

D = sqrt((x1-x2).^2+(y1-y2).^2); %distance matrix

setDistance = 2;

[r,c]=find(D <= setDistance); %find which pairs are below setDistance.

B = [r,c]; %set of pairs

B(r==c,:)= []; %eliminate points paired with itself.

Matt Kindig
on 18 Jul 2013

Right, but this means that B doesn't indicate any information as to which points are members of which pairs. As it stands now, your B just contains points which are members of a pair which is within 2 units of another point; however, the pair correspondence is not present.

If this is what you wish to do, you can add this line of code to the end:

B = A(unique(B(:)),:);

to get that result.

However, you lose the pair information. Really it depends on what you intend to do with the points in B once you've found them.

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

Start Hunting!