matlab实现多边形顶点凹凸性的识别
09-11
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
plot(p(i,1),p(i,2), 'o' );
endend
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