登录论坛

查看完整版本 : 在MATLAB中找到两个向量之间的交点


poster
2019-12-10, 20:30
我有一个非常简单的MATLAB问题。找到两个向量之间的交点的最简单方法是什么。我不熟悉各种MATLAB函数-似乎应该为此使用一个。

例如,如果我有一个向量从(0,0)到(6,6),另一个向量从(0,6)到(6,0),我需要确定它们在(3,3)处相交。



回答:

一种解决方案是使用本教程中 (https://web.archive.org/web/20091003070719/http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/)得出的方程式来查找二维的两条线的交点 (https://web.archive.org/web/20091003070719/http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/) ( 更新:由于站点不再存在,这是一个Internet归档链接)。您可以首先创建两个矩阵:一个保存线端点的x坐标,另一个保存y坐标。

x = [0 0; 6 6]; %# Starting points in first row, ending points in second row y = [0 6; 6 0]; 来自上述来源的方程式可以如下进行编码:

dx = diff(x); %# Take the differences down each column dy = diff(y); den = dx(1)*dy(2)-dy(1)*dx(2); %# Precompute the denominator ua = (dx(2)*(y(1)-y(3))-dy(2)*(x(1)-x(3)))/den; ub = (dx(1)*(y(1)-y(3))-dy(1)*(x(1)-x(3)))/den; 现在,您可以计算两条线的交点:

xi = x(1)+ua*dx(1); yi = y(1)+ua*dy(1); 对于问题的示例,上面的代码按预期给出xi = 3和yi = 3 。如果要检查交点是否位于线的端点之间 (即它们是有限的线段 ),则只需检查值ua和ub都在0到1之间:

isInSegment = all(([ua ub] >= 0) & ([ua ub]