how to mark and print the intersecting coordinates of two lines
39 ビュー (過去 30 日間)
古いコメントを表示
I have x1,y1 and x2, y2 data sets that give me two lines graphs.
I want to find the intersecting point of these two lines and and print it on the graph.
I tried following different functions like intesect but did not work.
Could someone please help me with this?
2 件のコメント
Matt J
2021 年 10 月 10 日
Since it is discrete data, you need a more formal definition of what it means for them to "intersect". Suppose we have
[x1,y1,x2]=deal([0,1]);
y2=[1,0];
plot(x1,y1,'--x', x2,y2,'-o')
These seem to intersect at (x,y)=[0.5,0.5] but only because I've chosen to connect the points with straight lines instead of some other kind of connecting curve. Is that what you want?
採用された回答
Star Strider
2021 年 10 月 10 日
Much depends on what ‘x1’, ‘y1’ and the rest are.
One approach (sssuming multiple intersections, although thiis will also work for only one intersection) would be —
x1 = linspace(-2, 15);
y1 = 2 + 3*x1;
x2 = linspace(-10, 10);
y2 = (x2-2).^2;
xq = linspace(min([x1,x2],[],2), max([x1,x2],[],2)); % Create Common 'x' Vector
y1q = interp1(x1, y1, xq, 'pchip','extrap'); % Interpolate To It
y2q = interp1(x2, y2, xq, 'pchip','extrap'); % Interpolate To It
idx = find(diff(sign(y1q-y2q))); % Approximate Indices Of Intersections
for k = 1:numel(idx)
idxrng = max(1,idx(k)-2) : min(numel(xq),idx(k)+2); % Index Range
xi(k) = interp1(y1q(idxrng)-y2q(idxrng), xq(idxrng), 0); % Interpolate X-Intersection
yi(k) = interp1(xq(idxrng), y1q(idxrng), xi(k)); % Interpolate Y-Intersection (Either Y-Vector Will Work)
end
Intercepts = [xi; yi]
figure
plot(x1, y1)
hold on
plot(x2, y2)
plot(xi, yi, '+r', 'MarkerSize',10)
hold off
grid
legend('y1','y2','Intersections', 'Location','best')
Experiment to get the desired result.
.
2 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Graph and Network Algorithms についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!