Polyxpoly returns 空矩阵

Polyxpoly returns empty matrix

我正在编写必须使用 polyxpoly 的代码,但我遇到了一些输出问题。

我的代码:

x=[-286.1018 -363.2334];
y=[4617.4 4725.1];
xv=[-316.7 -128-9 -268.3 -1864.6 -840.4];
yv=[4694.4 4944.7 5641.7 6002.0 4519.9];
[xi,yi] = polyxpoly(x,y,xv,yv);

它 returns:

Empty matrix: 0-by-2

我做错了什么我不明白为什么它不起作用(它应该 return 交点)?有人能帮我吗?这是函数 polyxpoly 的错误吗?

您得到一个空矩阵,因为为 (x,y)(xv,yv) 定义的折线不相交。这可以通过绘制多段线清楚地显示出来:

x=[-286.1018 -363.2334];
y=[4617.4 4725.1];
xv=[-316.7 -128-9 -268.3 -1864.6 -840.4];
yv=[4694.4 4944.7 5641.7 6002.0 4519.9];
mapshow(xv, yv);
mapshow(x,y,'color','red')

我们得到:

如您所见,xvyv 定义的较大形状 闭合,因此 [=18= 定义的较小线] 和 y 永远不会与形状相交。如果您想找到交点,则需要 关闭 较大的多边形。这可以简单地通过复制数组中的 first xvyv 点并确保它们出现在 末尾 [=57] 来完成=] xvyv 数组,以便关闭多边形:

x=[-286.1018 -363.2334];
y=[4617.4 4725.1];
xv=[-316.7 -128-9 -268.3 -1864.6 -840.4];
yv=[4694.4 4944.7 5641.7 6002.0 4519.9];
%// Change
xv = [xv xv(1)];
yv = [yv yv(1)];
mapshow(xv, yv);
mapshow(x,y,'color','red')

我们得到:

那就更好了!现在在新的 xvyv 值上尝试 polyxpoly

>> [xi,yi] = polyxpoly(x, y, xv, yv)

xi =

 -336.5178


yi =

   4.6878e+03

我们可以通过对已经生成的图形再添加一个 mapshow 调用来显示这个交点:

mapshow(xi,yi,'DisplayType','point','Marker','o')

我们得到:

可以看到交点已经找到了,在地图上用红圈标出。