作者yoco315 (眠月)
看板C_Sharp
标题Re: [问题] 程式画面与演算应如何兼顾?
时间Thu Feb 7 23:04:36 2008
※ 引述《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