生成簡單多邊形後,有時還需要對多邊形各頂點的凹凸性做判斷。
先計算待處理點與相鄰點的兩個向量,再計算兩向量的叉乘,根據求得結果的正負可以判斷凹凸性。
結果為負則為凹頂點,為正則為凸頂點。
凹頂點用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