MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在MATLAB中找到两个向量之间的交点 (https://www.labfans.com/bbs/showthread.php?t=23052)

poster 2019-12-10 20:30

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

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



[B]回答:[/B]

一种解决方案是使用[URL="https://web.archive.org/web/20091003070719/http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/"]本教程中[/URL]得出的方程式[URL="https://web.archive.org/web/20091003070719/http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/"]来查找二维的两条线的交点[/URL] ( [B]更新:[/B]由于站点不再存在,这是一个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 。如果要检查交点是否位于[I]线[/I]的端点[I]之间[/I] (即它们是有限的[I]线段[/I] ),则只需检查值ua和ub都在0到1之间:

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


所有时间均为北京时间。现在的时间是 04:51

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.