繁体   English   中英

在Matlab中如何在阶梯图中找到交点?

[英]How to find intersection point in stairs plot in Matlab?

我在matlab上用不同的点画了一个阶梯图。 我想在情节中找到交点。

第一个情节:

a = [0 30 50 60 70];
s = [4 5 9 10 13];
sum_a = zeros(1,length(a));
sum_a = a(1);
for i=2:length(a)
    sum_a(i) = sum_a(i-1) + a(i); 
end

第二个情节:

x = [0 40 30 20 10];
b = [10 8 6 4 2];
sum_x = zeros(1,length(x));
sum_x = x(1);
for i=2:length(x)
    sum_x(i) = sum_x(i-1) + x(i);
end

stairs(sum_x, b)
hold on
stairs(sum_a, s , 'r')

现在,如何找到两个情节之间的交集?

我将每个图分为水平线和垂直线,并检查一个图的水平线与另一个图的垂直线之间的成对相交,反之亦然:

% vertical lines of each graph
vlines1 = [sum_x(2:end);b(1:end-1);b(2:end)].';
vlines2 = [sum_a(2:end);s(1:end-1);s(2:end)].';
% horizontal lines of each graph
hlines1 = [sum_x(1:end-1);sum_x(2:end);b(1:end-1)];
hlines2 = [sum_a(1:end-1);sum_a(2:end);s(1:end-1)];
% crossing function - h.line's y value between v.line y values and the
% same with x.
intfun = @(hl,vl) (hl(1,:) <= vl(:,1)) & (hl(2,:) >= vl(:,1)) & (hl(3,:) >= vl(:,2)) & (hl(3,:) <= vl(:,3));
% check intersections
int1 = intfun(hlines1,vlines2);
int2 = intfun(hlines2,vlines1);
% find intersections points
[r1,c1] = find(int1);
[r2,c2] = find(int2);
% find intersections coordinate(s)
y = [hlines1(3,c1),hlines2(3,c2)].';
x = [vlines2(r1,1);vlines1(r2,1)];
plot(x,y,'xk','MarkerSize',30,'LineWidth',2)

如果intfun在较旧的MATLAB版本中不起作用,则可以改用以下方法:

intfun = @(hl,vl) bsxfun(@le,hl(1,:),vl(:,1)) & bsxfun(@ge,hl(2,:),vl(:,1))...
    & bsxfun(@ge,hl(3,:),vl(:,2)) & bsxfun(@le,hl(3,:),vl(:,3));

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM