[問題] 2D平面上四角形碰撞偵測

看板C_and_CPP (C/C++)作者 (怪龍-卡西歐魯)時間14年前 (2011/09/15 09:07), 編輯推噓3(3019)
留言22則, 5人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 這是在OpenGL裡面的函式 但是本身沒有用到OpebGL的函數庫 問題(Question): http://codepad.org/9SPjxJHW is_intersect()這是我寫的碰撞偵測函式 這個程式輸入兩個4*2的陣列 分別是兩個bounding box各四個點的座標 函式讀入座標後會將bounding box的點投影到一維的線上比對 get_interval()函式就是將rect投影到vector這個向量的線上 最後再比對投影到線上的bounding box有沒有重疊的地方 最後如果有碰到東西就輸出true,沒碰到東西就輸出false 但是在實際運行的時候,會一直出現兩個明明沒有碰到的東西 卻出現碰撞反應的問題 想請教一下這個函式的問題是出在哪裡呢? 順帶一提,我有看過置底文第12條 傳遞二維陣列的時候不能用雙指標來傳 所以我直接將陣列宣告在參數裡面 跑起來沒有error,函數也有輸出東西(雖然輸出的東西錯了) 所以我不確定問題是不是在那邊... 在這裡先感謝各位的回答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 149.169.246.32 ※ 編輯: hcl012 來自: 149.169.243.9 (09/16 01:55)

09/16 02:07, , 1F
我看到了一點嚴重問題,memory leak..
09/16 02:07, 1F

09/16 02:08, , 2F
在get_interval配置2個float,傳回去,在is_intersect裡
09/16 02:08, 2F

09/16 02:11, , 3F
大量調用,完全沒free,全都memory leak住.邏輯再確認過.
09/16 02:11, 3F

09/16 02:26, , 4F
感謝,我會先試著修正memory leak的問題
09/16 02:26, 4F

09/16 16:54, , 5F
假如兩個四邊形有重疊的話, 是否存在各取一邊且這兩個邊
09/16 16:54, 5F

09/16 16:54, , 6F
是相交的.
09/16 16:54, 6F

09/16 16:55, , 7F
然後, 不知道為什麼要 return 1>2 1<2 這種東西?
09/16 16:55, 7F

09/17 01:27, , 8F
各取一邊判斷是否相交的作法也是可以的,但是如果之後要用
09/17 01:27, 8F

09/17 01:28, , 9F
到3D的物件上就會比較難處理,1<2和1>2是要函式回傳true和
09/17 01:28, 9F

09/17 01:28, , 10F
false,因為直接寫true和false程式會出錯所以就這樣寫了
09/17 01:28, 10F

09/17 01:59, , 11F
c語言不支援bool,但可以自己把 true,false定義出來,
09/17 01:59, 11F

09/17 02:00, , 12F
#define TRUE 1 / #define FALSE 0,這技巧還蠻常用的.
09/17 02:00, 12F

09/17 02:48, , 13F
不都寫 0 1 來誤導別人(誤
09/17 02:48, 13F

09/17 03:06, , 14F
對厚.. 大多都是 TRUE(0) , FALSE(!0)
09/17 03:06, 14F

09/17 03:07, , 15F
不對,不同地方會有不同定義 XD
09/17 03:07, 15F

09/17 08:43, , 16F
上面讓我想起當年寫 8051 的時候 LED 要 ON(0) OFF(1) XD
09/17 08:43, 16F

09/17 11:03, , 17F
原來有這種寫法,感謝指教
09/17 11:03, 17F

09/18 05:06, , 18F
想問一下關於一樓說的memory leak的問題,memory leak是
09/18 05:06, 18F

09/18 05:06, , 19F
在get_interval裡面malloc沒有free導致的,但是如果free掉
09/18 05:06, 19F

09/18 05:07, , 20F
這樣還能回傳嗎?
09/18 05:07, 20F

09/18 11:35, , 21F
free掉後就不能再傳。既然這樣,你何不副函式地方不管
09/18 11:35, 21F

09/18 11:36, , 22F
記憶體配置,引數再加上指標/陣列的東西去存結果?
09/18 11:36, 22F
抱歉用回文比較快 在之前我有試過將float *minmax = (float*)malloc(2*sizeof(float)); 改成float minmax[2]; 但是在底下這兩行的時候 car_interval = (float*)get_interval(car,vector); box_interval = (float*)get_interval(box,vector); car_interval裡面的值會被bax_interval裡面的值複寫過去 我猜是因為在get_interval函式宣告 minmax[2]的時候都是用同一塊記憶體 所以get_interval(car,vector)和get_interval(car,vector) 都回傳同一塊記憶體位置 所以car_interval的值就被box_interval呼叫get_interval的那行改掉了 只有用malloc才不會發生這樣的問題.. 不知道在用完之後將car_interval和box_interval free掉有沒有用呢? 如果都是指向同一塊記憶體的話 應該就算在不同函式裡面malloc和free都沒有關係...吧? ※ 編輯: hcl012 來自: 68.99.86.102 (09/19 11:48)
文章代碼(AID): #1ESK_6Ud (C_and_CPP)
文章代碼(AID): #1ESK_6Ud (C_and_CPP)