※ 引述《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