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

如何在Matlab中找到楼梯图中的交点?,matlab,plot,intersection,Matlab,Plot,Intersection,我在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

我在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)

谢谢你。我这样做了,但int1的输出为0。你能告诉我intfun如何工作吗?我还是不能走十字路口。此外,我在代码中使用了第二个intfun。int1和int2应该是矩阵,其中大多数元素等于0,可能只有一个1。在您的实现中它们真的是矩阵吗?a、x、b和s变量在我的代码中是向量或数组。int1和int2的矩阵等于0。当你运行问题中的代码,然后运行我答案中的代码,你得到答案中的图像了吗?奇怪。。。看起来像是int1和int2交换了位置-试着切换它们,看看这样是否有效
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));