Polyxpoly返回空矩阵

时间:2015-03-28 17:43:40

标签: 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函数的错误吗?

1 个答案:

答案 0 :(得分:2)

您获得一个空矩阵,因为为(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')

我们得到:

enter image description here

如您所见,xvyv定义的较大形状已关闭,因此由x和{{1定义的较小行从不与形状相交。如果要查找交叉点,则需要关闭更大的多边形。这可以通过复制数组中的第一个 yxv点并确保它们在{{的最后处显示来完成。 1}}和yv数组,以便关闭多边形:

xv

我们得到:

enter image description here

那更好!现在,在新的yvx=[-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') 值上尝试polyxpoly

xv

我们可以通过向已经产生的数字添加一个yv调用来显示这个交点:

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

xi =

 -336.5178


yi =

   4.6878e+03

我们得到:

enter image description here

您可以看到已找到交叉点,并且它已在地图中以红色圆圈描绘。