我有一个非常简单的MATLAB问题。找到两个向量之间的交点的最简单方法是什么。我不熟悉各种MATLAB函数-似乎应该为此使用一个。
例如,如果我有一个向量从(0,0)到(6,6),另一个向量从(0,6)到(6,0),我需要确定它们在(3,3)处相交。
回答:
一种解决方案是使用
本教程中得出的方程式
来查找二维的两条线的交点 (
更新:由于站点不再存在,这是一个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]