matlab練習程式(多邊形頂點凹凸性)

Dsp Tian發表於2014-10-05

生成簡單多邊形後,有時還需要對多邊形各頂點的凹凸性做判斷。

先計算待處理點與相鄰點的兩個向量,再計算兩向量的叉乘,根據求得結果的正負可以判斷凹凸性。

結果為負則為凹頂點,為正則為凸頂點。

凹頂點用o表示,凸頂點用*表示。

結果如下:

matlab程式碼如下:

clear all;close all;clc;

n=20;
p=rand(n,2);

p=createSimplyPoly(p);  %建立簡單多邊形

hold on;
for i=1:n    
    if i==1                     %處理第一個點
        v1=p(n,:)-p(1,:);       %當前點到前一點向量
        v2=p(2,:)-p(1,:);       %當前點到後一點向量
    elseif i==n                 %最後一個點
        v1=p(n-1,:)-p(n,:);    
        v2=p(1,:)-p(n,:);        
    else                        %其他點
        v1=p(i-1,:)-p(i,:);     
        v2=p(i+1,:)-p(i,:);
    end
    r=det([v1;v2]);                 %叉乘後第三個向量的方向
    if r>0
        plot(p(i,1),p(i,2),'*');       
    elseif r<0
        plot(p(i,1),p(i,2),'o');         
    end
end

plot(p(:,1),p(:,2));
p=circshift(p,1);
plot(p(:,1),p(:,2));

createSimplyPoly.m

function p=createSimplyPoly(p)
    cen=mean(p);
    ang=atan2(p(:,1)-cen(1),p(:,2)-cen(2)); %每個點到座標中心極角

    p=[p,ang];
    p=sortrows(p,3);    %按極角排序

    p=p(:,1:2);
end

 

相關文章