Matlab Polyxpoly返回空矩阵

Matlab Polyxpoly返回空矩阵,matlab,computational-geometry,Matlab,Computational Geometry,我正在编写一个代码,其中我必须使用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); 它返回: Empty matrix: 0-by-2 我做错了什么我不明白为什么它不工作(

我正在编写一个代码,其中我必须使用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);
它返回:

Empty matrix: 0-by-2

我做错了什么我不明白为什么它不工作(它应该返回交叉点)?有人能帮我吗?这是函数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')
我们得到:

正如您所看到的,由
xv
yv
定义的较大形状是闭合的,因此由
x
y
定义的较小线从不与形状相交。如果要找到交点,需要关闭较大的多边形。只需复制数组中的第一个
xv
yv
点,并确保它们出现在
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];
%// Change
xv = [xv xv(1)];
yv = [yv yv(1)];
mapshow(xv, yv);
mapshow(x,y,'color','red')
我们得到:

那更好!现在在新的
xv
yv
值上尝试
polyxpoly

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

xi =

 -336.5178


yi =

   4.6878e+03
我们可以通过向已生成的图形添加另一个
mapshow
调用来显示此交点:

mapshow(xi,yi,'DisplayType','point','Marker','o')
我们得到:


你可以看到交叉点已经找到了,并且在地图上用一个红色圆圈标出了它。

哇,非常感谢,先生!我现在明白了!!谢谢你完整的回答@雷恩:没问题。祝你好运