2015-03-28 4 views
3

Я пишу код, в котором я должен использовать polyxpoly, и у меня возникают некоторые проблемы с выходом.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?

ответ

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

Как вы можете видеть, тем больше формы определяется 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') 

Мы получаем :

enter image description here

Это лучше! Теперь попробуйте polyxpoly на новом xv и yv значения:

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

xi = 

-336.5178 


yi = 

    4.6878e+03 

Мы можем показать эту точку пересечения, добавив еще один mapshow вызова уже породившей фигуру:

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

Получает:

enter image description here

Вы видите, что точка пересечения была найдена, и th при этом он обозначается красным кружком на карте.

+1

Ничего себе, спасибо, сэр! Я понял!! Спасибо за полный ответ. @rayryeng – Heisenberg

+0

Нет проблем. Удачи! – rayryeng

Смежные вопросы