matlab練習程序(射線法判斷點與多邊形關系)


依然是計算幾何。

射線法判斷點與多邊形關系原理如下:

從待判斷點引出一條射線,射線與多邊形相交,如果交點為偶數,則點不在多邊形內,如果交點為奇數,則點在多邊形內。

原理雖是這樣,有些細節還是要注意一下,比如射線過多邊形頂點或射線與多邊形其中一邊重合等情況還需特別判斷。

這里就不特別判斷了,因為我只是熟悉原理,並不是實際運用。

好吧,我實際是太懶了,不想判斷了。

結果如下:

結果圖和線性分類器的組合有幾分相似。

matlab代碼如下:

clear all;close all;clc;

polyn=20;
poly=rand(polyn,2);
poly=createSimplyPoly(poly);  %創建簡單多邊形

polyn=polyn+1;                %連線方便,把第一個點添加到最后一個點后面
poly(polyn,:)=poly(1,:);

pn=500;
p=rand(pn,2);

hold on;
for i=1:pn
   
    flag=0;
    for j=2:polyn
        x1=poly(j-1,1);         %多邊形前后兩個點
        y1=poly(j-1,2);
        x2=poly(j,1);
        y2=poly(j,2);
       
        k=(y1-y2)/(x1-x2);      %多邊形一條邊直線
        b=y1-k*x1;
        x=p(i,1);               %過當前點直線和多邊形交點
        y=k*x+b;          
               
        if min([x1 x2])<=x && x<=max([x1 x2]) && ...        %點同時在射線和多邊形邊上
           min([y1 y2])<=y && y<=max([y1 y2]) &&  y>=p(i,2)
               flag=flag+1;
        end
    end
   
    if mod(flag,2)==0               %偶數則在外部
        plot(p(i,1),p(i,2),'r.');
    else                            %奇數則在內部
        plot(p(i,1),p(i,2),'g.');        
    end
end

plot(poly(:,1),poly(:,2));

其中createSimplyPoly函數在這里可以找到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM