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

2021-09-07 21:26:42 字數 1300 閱讀 8249

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

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

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

凹頂點用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,:);

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));

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

Matlab生成多邊形,並且判斷多邊形是否相交

隨機生成若干個點,就可以生成多邊形。嚴格來說,是要判斷產生的點是否共線的,但是這樣概率太低,所以我就沒有判斷。生成的點不能直接連起來,因為點的順序有可能是錯亂的,所以首先要進行順序判斷,方法是計算角度。找到平面內某一點,計算多邊形每乙個點到這個點連線和x軸的夾角,對這個夾角進行排序,就可以得到點的順...

任意線段集生成多邊形 WebGL 頂點和多邊形

在三維空間中描繪出來的東西要說在webgl的世界裡能夠描畫什麼,其實任何東西都可以描畫。而描畫的最基本的東西就是下面幾種。雖然在opengl中提供了矩形的繪製,但是webgl中基本上只能繪製上面的三種型別。和二維世界不同,比如像html中的img標籤那樣,簡單的在畫面上繪製乙個矩形影象是不能的。先不...

最大頂點數的凸多邊形

原題 polygon 題意 在第一象限有n個點,用這些點再加上原點構成乙個凸多邊形 原點必須選 求頂點數的最大值。思路 用dp i j 表示以i為最後第二個點,j為最後乙個點所能構成的最大頂點數。對於所有的點,按照其斜率排序,以節省時間。然後規定第0個點和第n 1個點為原點,因為要從原點出發,再回到...