这是我的碰撞响应代码,用于模拟两个移动球的碰撞。我用牛顿方程定律,然后把速度向量的分量参数化
α是球1的轨迹
β是球2的轨迹
θ是中心线相对于轴线的角度
我的想法是在2个球的局部框架中,提出一个碰撞响应的一般公式,然后将其重新投影到我的固定框架中,但是我注意到有一些角度问题,我不知道我的生活应该是什么条件,即α
最后一点只是为了确保碰撞后球不会重叠,并陷入无限的碰撞循环中
def collision(b1,b2):
dx=b1.x-b2.x
dy=b1.y-b2.y
Theta = atan2(dy,dx)
Vx1=b1.speedx
Vy1=b1.speedy
Vx2=b2.speedx
Vy2=b2.speedy
V1 = sqrt((Vx1)**2+(Vx1)**2)
V2 = sqrt((Vx2)**2+(Vx1)**2)
Alpha = asin(Vx1/V1)
Beta = asin(Vx2/V2)
b1.speedx = (((1-e)/2)*V1*sin(Alpha-Theta) - ((1+e)/2)*V2*sin(Beta-Theta))*sin(Theta) - V1*cos(Alpha-Theta)*cos(Theta)
b1.speedy = (((1-e)/2)*V1*sin(Alpha-Theta) - ((1+e)/2)*V2*sin(Beta-Theta))*cos(Theta) + V1*cos(Alpha-Theta)*sin(Theta)
b2.speedx = (((1+e)/2)*V1*sin(Alpha-Theta) - ((1-e)/2)*V2*sin(Beta-Theta))*sin(Theta) + V2*cos(Beta-Theta)*cos(Theta)
b2.speedy = (((1+e)/2)*V1*sin(Alpha-Theta) - ((1-e)/2)*V2*sin(Beta-Theta))*cos(Theta) - V2*cos(Beta-Theta)*sin(Theta)
不要用asin来计算角度。如果你坚持使用角度(而不是向量),你应该使用atan2。在
相关问题 更多 >
编程相关推荐