Как да разберете дали дадена точка е в секифициран многоъгълник в Matlab?

Да предположим, че имам многосегментен многоъгълник. Дефинирах върховете по този начин в Matlab:

    X = [-1 -1 1 1;
         -4 -4 -3 -3];
    Y = [0 5 5 0;
        -6 -8 -8 -6]

И мога да начертая този многосегментен полигон така:

patch(X',Y',[1 1 1 1;1 1 1 1]')

И ето как изглежда:
Многосегментен многоъгълник

Как мога да разбера дали определена точка е в регионите, дефинирани от моите многоъгълници?
Моля, обърнете внимание, че искам да събера тези две форми заедно и да ги третирам по същия начин в този случай
Мога да го направя с един многоъгълник с този код, но не работи за повече:

inpolygon(A(1),A(2), X(1,:),Y(1,:)) 

person Zeta.Investigator    schedule 20.04.2015    source източник


Отговори (1)


inpolygon може да се справи с тази ситуация, но отделните многоъгълни върхове трябва да бъдат < a href="http://www.mathworks.com/help/matlab/ref/inpolygon.html?expandall=true#buanygl-3" rel="nofollow">разделен с NaN така че да няма връзка е направен.

Този тестов случай ми дава очаквани резултати:

 X = [-1 -1  1  1 ;
      -4 -4 -3 -3];
 Y = [ 0  5  5  0 ;
      -6 -8 -8 -6];

X = [X';nan(1,size(X,1))];
Y = [Y';nan(1,size(Y,1))];

isIn = inpolygon([-3.5,-2,0],[-7,-4,2],X(:),Y(:))

които извежда

isIn =
     1     0     1
person TroyHaskin    schedule 20.04.2015
comment
Как мога да закърпя (начертая) X и Y сега? - person Zeta.Investigator; 20.04.2015
comment
@Zeta.Investigator За да използвам patch(), просто бих присвоил модифицираните стойности на X и Y на различни променливи. Бях мързелив в примера. - person TroyHaskin; 20.04.2015