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

2021-10-22 05:56:31 字數 1846 閱讀 8615

隨機生成若干個點,就可以生成多邊形。

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

%% 隨機生成兩個多邊形

x1=rand(1,4);

y1=rand(1,4);

px=[x1,x1(1)];

py=[y1,y1(1)];

figure(1)

clfang=cart2pol((x1-mean(x1)),(y1-mean(y1)));

[sortang,sortindex]=sort(ang);

sx1=x1(sortindex);

sy1=y1(sortindex);

sx1=[sx1,sx1(1)];

sy1=[sy1,sy1(1)];

plot(sx1,sy1,'--')

hold on

x2=rand(1,4);

y2=rand(1,4);

ang=cart2pol((x2-mean(x2)),(y2-mean(y2)));

[sortang,sortindex]=sort(ang);

sx2=x2(sortindex);

sy2=y2(sortindex);

sx2=[sx2,sx2(1)];

sy2=[sy2,sy2(1)];

plot(sx2,sy2,'g-')

線段一端點:(2,3)和(3,4)

線段二端點:(1,4)和(2.5,3)

取值範圍的並集是[1 3],插值後,代表線段1的函式,取值範圍是[1,3],在x<2時,取值為nan,在x>2時,取值則為原來的線段上的值,這樣就可以了。

function ifconter = findcounter(p1x,p1y,p2x,p2y)

%% p1x,p1y,p2x,p2y分別是兩個封閉圖形的點

ifconter=0;

for i=1:length(p1x)-1

for j=1:length(p2x)-1

p1x=p1x(i:i+1) ;

p1y= p1y(i:i+1) ;

p2x=p2x(j:j+1);

p2y= p2y(j:j+1);

% figure(2);

% clf

% plot(p1x(i:i+1),p1y(i:i+1));hold on

% plot(p2x(j:j+1),p2y(j:j+1))

allx=linspace(min([p1x p2x]),max([p1x p2x]),100);

%% 插值

int1 = interp1(p1x,p1y,allx);

int2 = interp1(p2x,p2y,allx);

intersec=int1-int2;

if(max(intersec)*min(intersec)<0)

ifconter=1;%有交點 返回1

endend

endend

通過呼叫以上的函式,就可以判斷兩個多邊形是否相交了。

**沒有對時候包含進行判斷,想要判斷也很簡答,只要呼叫inpolygon函式就可以了,這裡就不贅述了。

這個是我自己昨天接單子的時候遇到的實際問題,搜尋了挺久也沒有解決方法,自己想了一下,寫出來了,於是就在這裡分享一下。

多邊形判斷模板

include include define maxn 1000 define offset 10000 define eps 1e 8 define zero x x 0?x x define sign x x eps?1 x eps?2 0 struct point struct line do...

多邊形與多邊形 位置關係的判斷

c 判斷點的位置方法一 public intisleft point p0,point p1,point p2 private boolpointinfences point pnt1,point fencepnts else if wn 0 return false else return tru...

判斷多邊形重疊 多邊形碰撞檢測

在討論多邊形碰撞檢測之前,我們可以先思考一下遊戲物件怎麼判斷2d圖形有碰撞,靠的是判斷2d圖形在遊戲世界中有接觸,或者有重疊區域,大到包含,小到重疊接觸乙個點。那麼我們就需要精確計算2d圖形在某一幀有重疊部分,或者預判到下一幀有重疊部分,那麼就是碰撞到了。先從簡單的模型來討論碰撞。判斷乙個點是否在多...