我有一个很简单的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 = 3yi = 3如果要检查交点是否位于直线的端点之间(即它们是有限的线段),只需检查值uaub是否均位于0和1之间:
isInSegment = all(([ua ub] >= 0) & ([ua ub] <= 1));

我在上面链接的教程中又提到了几点:
如果分母den为0,则两条线平行。
如果uaub方程的分母和分子为0,则两条线重合。

关于math - 在MATLAB中找到两个向量之间的交点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2050850/

10-12 22:49