Вы получаете пустую матрицу, потому что полилинии, определенные для (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')
Мы получаем :
Это лучше! Теперь попробуйте 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')
Получает:
Вы видите, что точка пересечения была найдена, и th при этом он обозначается красным кружком на карте.
Ничего себе, спасибо, сэр! Я понял!! Спасибо за полный ответ. @rayryeng – Heisenberg
Нет проблем. Удачи! – rayryeng