Number of points that passes a line

2 views (last 30 days)
The attached data contains x and y values. Assuming they are walking in 1 direction per axis i.e. some people move from left to right thus x always increases, other people move from south to north. How can I find the number of people who passes a certain line? i.e. min(x)= -4, max(x)= 4, I want to find the number of people who passes my line x(from -4 to 0) y(0).

Accepted Answer

KSSV
KSSV on 5 Nov 2020
Edited: KSSV on 5 Nov 2020
You can calculate the intersection points of your (x,y) data and the given line. To find the intersection points you can use this file exchange: https://in.mathworks.com/matlabcentral/fileexchange/22441-curve-intersections
Let L1 be your (x,y) walking data and L2 be your line data.
P = InterX(L1,L2) ;
Your L1, L2 should be row matrices of size 2*m and 2*n. Where first row corresponds to x and second row correspond to y. The number of points P, you got is what you want.
  3 Comments
KSSV
KSSV on 5 Nov 2020
I have seen your data..it has 178*27 matrix....If you have (x,y) pairs it should be having a even number of columns. And your max and min x-value is huge i.e [ -627.88 524.25]. When I try to use interX, with the lines [-4 to +4] , I am not getting any intersection points, But if you extend this line to say -800 to +800, you will get some intersection points. Check the below:
num = xlsread("01) 90.xlsx") ;
num(:,3) = [] ; % some extra column present, so remove it
x = num(:,1:2:end) ;
y = num(:,2:2:end) ;
x = x(:) ;
y = y(:) ;
L1 = [x' ; y'] ;
m = 100 ;
L2 = [linspace(-800,800,m); zeros(1,m)] ;
P = InterX(L1,L2) ;
plot(x,y,'r')
hold on
plot(L2(1,:),L2(2,:),'b')
plot(P(1,:),P(2,:),'*k')
Abdulkarim Almukdad
Abdulkarim Almukdad on 5 Nov 2020
Thanks a lot KSSV, that was very helpful.

Sign in to comment.

More Answers (0)

Categories

Find more on Programming 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!