看板 C_Sharp 關於我們 聯絡資訊
※ 引述《gavintsou (toward)》之銘言: : 之前寫一個模擬碰撞的問題 : 例:兩顆球在一個 bounded 的二維空間裡亂跑,一旦相撞即停止 : 並且希望球行走的過程能呈現出來 : 我的做法是將這兩顆球每走動三次即於 picturebox 中畫出 : 這個做法似乎不盡理想,因為當球的數量多時, : 其程式好像當掉一般 畫面停止更新。 畫面停止更新? 那表示你的計算瓶頸不是在 redraw,而是在物體運動跟碰撞徵測, 程式忙著物理計算都沒空去畫圖了, 你這邊是 CPU intensive 不是 paint intensive, 這時候改善繪圖效率對程式效能的幫助大概是微乎其微, 如果用上 multithread,把更多資源拿去繪圖還有 task switch,可能會更慢 @@" 碰撞徵測的演算法寫的好不好,效能會差幾百倍的,你應該嘗試從這邊下手才是 ._. 最簡單的像是不要每次都直接計算距離來看有沒有碰撞, 可以先做比較便宜的運算來測試省下一些成本, 比方說先看 x 坐標差值有沒有小於兩個球的半徑合, 然後看 y 坐標差值有沒有小於兩個球的半徑合, 然後才去做距離的計算。 複雜一點的像是用一些資料結構跟演算法 把你的球丟到一個網格或是四元樹上面去 這樣效能會有更大的改善。 -- To iterate is human, to recurse is divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.126.13.57