生成簡單多邊形後,有時還需要對多邊形各頂點的凹凸性做判斷。
先計算待處理點與相鄰點的兩個向量,再計算兩向量的叉乘,根據求得結果的正負可以判斷凹凸性。
結果為負則為凹頂點,為正則為凸頂點。
凹頂點用o表示,凸頂點用*表示。
結果如下:
matlab**如下:
clear all;close all;clc;createsimplypoly.mn=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,:);
endr=det([v1;v2]); %叉乘後第三個向量的方向
if r>0
plot(p(i,
1),p(i,2),'*'
);
elseif r
<0
plot(p(i,
1),p(i,2),'o'
);
endend
plot(p(:,
1),p(:,2
));p=circshift(p,1
);plot(p(:,
1),p(:,2));
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
Matlab生成多邊形,並且判斷多邊形是否相交
隨機生成若干個點,就可以生成多邊形。嚴格來說,是要判斷產生的點是否共線的,但是這樣概率太低,所以我就沒有判斷。生成的點不能直接連起來,因為點的順序有可能是錯亂的,所以首先要進行順序判斷,方法是計算角度。找到平面內某一點,計算多邊形每乙個點到這個點連線和x軸的夾角,對這個夾角進行排序,就可以得到點的順...
任意線段集生成多邊形 WebGL 頂點和多邊形
在三維空間中描繪出來的東西要說在webgl的世界裡能夠描畫什麼,其實任何東西都可以描畫。而描畫的最基本的東西就是下面幾種。雖然在opengl中提供了矩形的繪製,但是webgl中基本上只能繪製上面的三種型別。和二維世界不同,比如像html中的img標籤那樣,簡單的在畫面上繪製乙個矩形影象是不能的。先不...
最大頂點數的凸多邊形
原題 polygon 題意 在第一象限有n個點,用這些點再加上原點構成乙個凸多邊形 原點必須選 求頂點數的最大值。思路 用dp i j 表示以i為最後第二個點,j為最後乙個點所能構成的最大頂點數。對於所有的點,按照其斜率排序,以節省時間。然後規定第0個點和第n 1個點為原點,因為要從原點出發,再回到...