——别想了,程序文件在我电脑里,不会给各位抄答案的。
原程序的几个问题:
1.球速的计算方式很奇怪,会导致不同角度出射的碰撞球速度不一致——解决方法是给碰撞球加速度xy分量的参数即可;
2.球要碰撞后运动,直接自己写一个碰撞函数来计算方向即可。
若假设等质量弹性对心正碰,这函数30s你就能写完;
若假设弹性非对心碰撞,可以知道速度交换,但是仅限于球心连线上的速度分量,由于我使用xy速度分量参数,所以分别求出主动球的球速的每个分量会有多少传递给被动球即可。不过是两个三角函数相乘的事儿~
……我终于发现为什么我的碰撞算法逻辑正确却看起来是错误结果——由于球的运动方式特殊(坐标是分立的),使得前一时刻尚未判定碰撞的两个球,下一时刻的相对位置就可能发生错位,导致碰撞算法算出来的角度错误,然后球就乱飞……
解决方法有以下几个方向:
1)加大碰撞判定范围,落实下来就是增大球的半径;
2)加快刷新频率并同时减小步长,使得同样速度下检测次数增加,减小bug概率。