How to find the point of interception between the two lines?
1 view (last 30 days)
Show older comments
I have two y values, second and third columns in the attached matlab file. I am looking for the point of interception of the two lines. I have interpolated the two y values to get more sampling points (500 points). My goal is to find the integral of each line from the point of interception (where they both cross each othe and not at the origin; they cross around 200+ but I need a way to identify this point) to the end and compare them with the integral of the whole line.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/666995/image.bmp)
I tried to find the point where the two lines are exactly equal but that didn't work. The lines intercept but not the points. So, the closest point there in this case as other times they could meet is what I am looking for.
row = find(abs(x_untrt)==abs(x_untrt_s));
Thank you for the anticapated assistance.
1 Comment
Rik
on 27 Jun 2021
Once the x-values are shared, you can subtract one from the other and look for a zero crossing.
Accepted Answer
Scott MacKenzie
on 27 Jun 2021
Edited: Scott MacKenzie
on 27 Jun 2021
I think this is more or less what your are looking for. The crossover indices are idx1 and idx2. Just for fun, and since you mentioned the integral, I added code to compute and show the area between the curves at the crossover points. The area was compute both using polyarea and trapz. The result is the same (187.85 in this case).
M = readmatrix('testdata.txt'); % this is your x_untrt and x_untrt_s data
y1 = M(:,1); % x_untrt
y2 = M(:,2); % x_untrt_s
x = 1:length(y1);
% find indices of crossover points
ydiff = y1 - y2;
idxCross = find(ydiff(1:end-1) < 0 & ydiff(2:end) > 0);
idxCross(end) = []; % ignore last crossover point (by inspection)
idx1 = idxCross(1); % 1st crossover point
idx2 = idxCross(2); % 2nd crossover point
% find area using trapz
a1 = trapz(x(idx1:idx2), y1(idx1:idx2));
a2 = trapz(x(idx1:idx2), y2(idx1:idx2));
area1 = abs(a2 - a1)
% find area using polyarea
px = [x(idx1:idx2) flip(x(idx1:idx2))];
py = [y2(idx1:idx2)' flip(y1(idx1:idx2))'];
p = polyshape(px, py);
area2 = polyarea(px,py)
plot(y1);
hold on;
plot(y2);
scatter(x(idxCross), y1(idxCross), 'k', 'filled');
plot(p);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/667075/image.jpeg)
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!