小弟想要做一个物理现象的模拟,不考虑化学反应,
考虑物体的质量/形状/表面摩擦系数(包括动摩擦和静摩擦)
考虑物体之间的直接作用(碰撞,绳的牵引,力场),和摩擦力
考虑物体外在的表现(显示到屏幕上的), 角速度(物体绕一点旋转的情况),线速度物体的碰撞上,我现在想的办法是,每一个物体都有一个线程在检测自己的周边有没有一点碰撞,这样的话,为了完美,周边每一点有一个独立的小线程检测自己是不是和其他物体接触。这样可以想见会很消耗内存和时间。我不知道专业的解决办法是怎样的。希望各路神仙来看一下,大致说一下思路。谢谢了!

解决方案 »

  1.   

    关于碰撞部分,不建议你这么做。因为线程的执行时间按是不确定的有可能,两个物体碰撞了,A物体的线程正在执行发现碰撞后A物体改变了轨迹此时B物体的线程恰好没有执行,B物体就没变轨迹接着自己的运动,就和想B把A撞飞了一样。你如果是在屏幕上绘制所有物体的运动情况。那么就肯定会每隔多长时间去刷新屏幕上物体的位置。比如AWT里的repaint之类的方法重绘屏幕。所以你可以启动一个线程,run方法里步骤大致如下1、每隔多长时间去重绘屏幕
    2、在重绘之后,判断每个物体间是否存在碰撞,做相应的逻辑处理。比如修改每个物体自身的运动方向,速度等(前提是,你在设计的时候把这些作为物体的属性放在了物体类里)目前想到的就这么多。继续等高手指点
      

  2.   


    呵呵  其实B把A撞飞那种情况是可以避免的
    A,B物体各有一个方法来反映碰撞bounce(Object target)
    在A的线程里面,A.bounce(B)调用之后立刻调用B.bounce(A)就可以吧。
    如果两个物体稍微有点overlap,这样的方法会导致A,B像粘在一起对撞。
    可以给每个物体一个队列,存储可能与之碰撞的物体,如果A与B碰撞发生,从A的队列里面移除B,从B的队列里面移除A,碰撞检测只检测队列内的,然后每隔半秒更新队列。就可以