请问怎样在matlab中得到直线方程与plot出的曲线之间的交点坐标

我现在有一系列的[x,y]值如下

x=[1,113,334,361,440,964,964,1];
y=[1,107,324,323,400,400,471,471];
请问怎样得到这一系列[x,y]值plot出的曲线与y=x-25之间的交点的确切坐标?

首先需要明确:用plot画图其实是折线图,即每相邻两点之间用直线连接。

画出图形来,从图中可见,有两个交点:

一个交点位于折线的最后一段,纵坐标已知为471,则横坐标易得x=y+25=496;

另一个交点位于点(334,324)和(361,323)连接的折线上,可以使用solve求解得到(9422/27, 8747/27)。

参考代码:

x=[1,113,334,361,440,964,964,1];

y=[1,107,324,323,400,400,471,471];

plot(x,y,'.-')

x1=[0 1000];

y1=x1-25;

hold on

plot(x1,y1,'r')

 

y2=471;

x2=y2+25;

[x3,y3]=solve('y=324+(323-324)/(361-334)','y=x-25');

x3=double(x3);y3=double(y3);

plot([x2, x3],[y2,y3],'mo')

 

legend('plot数据','y=x-25', '交点',2)

 

 

追问

非常感谢您的回答,那如果我得到了一系列的[x,y]值(plot出以后如上图中间的那根黄线),我想要得到黄线与红线(同样也是y=x+25)的交点的确切坐标,请问应该怎么办呢?

追答

你的意思是不是说,数据点很多,不太适合先画图判断和哪段相交再计算具体坐标,而是给定一组坐标,直接由程序作判断并计算吗?
另外,我看你的那根红线不像是y=x+25或y=x-25啊?是使用图像坐标(y轴逆向)?

追问

是的,这里的y轴是逆向的。
这个图中所得到的(x,y)值都是利用灰度差得出的轮廓线,所以点很多,也不可能得到前面您说的方程。我想要知道能不能用什么方法求得红线与黄线的交点坐标?
黄线的[x,y]值是通过x一个像素点一个像素点增加扫出来的,比如其中的一段
297 280
298 280
298 281
299 281
299 282
300 282
300 283
301 283
302 283
下面还有很多

追答

把程序改了一下,可以自动判断(注意,之前的回答solve第一个方程错误):
x=[1,113,334,361,440,964,964,1];
y=[1,107,324,323,400,400,471,471];
plot(x,y,'.-')
x1=[0 1000];
y1=x1-25;
hold on
plot(x1,y1,'r')

for i=1:length(x)-1
% 分垂直和非垂直两种情况
if x(i+1)~=x(i)
eq=sprintf('y=%g+(%g-%g)/(%g-%g)*(x-%g)',y(i),y(i+1),y(i),x(i+1),x(i),x(i) );
[x3,y3]=solve(eq,'y=x-25');
else
x3=x(i);
y3=x(i)-25;
end
x3=double(x3);y3=double(y3);
% 判断交点是否在线段范围内(不计延长线)
if ( (x3-x(i))*(x3-x(i+1)) <= 0 ) && ( (y3-y(i))*(y3-y(i+1)) <= 0 )
fprintf('交点坐标: (%g, %g)\n', x3, y3);
end
end

输出如下:
交点坐标: (348.464, 323.464)
交点坐标: (496, 471)

温馨提示:答案为网友推荐,仅供参考
相似回答