隨機生成若干個點,就可以生成多邊形。
嚴格來說,是要判斷產生的點是否共線的,但是這樣概率太低,所以我就沒有判斷。生成的點不能直接連起來,因為點的順序有可能是錯亂的,所以首先要進行順序判斷,方法是計算角度。找到平面內某一點,計算多邊形每乙個點到這個點連線和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圖形在某一幀有重疊部分,或者預判到下一幀有重疊部分,那麼就是碰撞到了。先從簡單的模型來討論碰撞。判斷乙個點是否在多...