只能提供初步了
1、球体之间的相互碰撞检测(球的半径和质量均相等)
输入数据:(2D向量表示)
球1的球心坐标
球1的速度方向
球1的速率
球1的速度=球1的速度方向×球1的速率
球2的球心坐标
球2的速度方向
球2的速率
球2的速度=球2的速度方向×球2的速率
计算过程:
球1与球2的相对速度 RelativeV = 球1的速度-球2的速度
由球1的球心坐标与RelativeV的单位向量构成一个固定向量,表示由一点向某个方向的一条射线
求球2的球心坐标与射线的距离
如果所得的距离大于2倍半径,则两球不存在碰撞的可能性
如果所得的距离小于等于2倍半径,则两球存在碰撞的可能性
计算当前帧内的碰撞可能性
为了增加计算精度,使用双循环,分离渲染层和逻辑层,渲染速度为33fps
起始时间为 0 时间间隔为 t 把每帧切成30个时间片
计算T 从0到30 之间是否存在一个点NewPosition与球2的球心坐标的距离小于或者等于2倍半径
RV = RelativeV/30;
V1'=V1/30;
V2'=V2/30;
while(T<=30){
T+=t;
NewPosition=Position1+RV*T;
if(Distance(NewPosition, Position2)<=2*RADIUS){
// 计算在碰