我需要最简单的解决方案来解决圆之间的2D弹性碰撞,每个圆具有彼此相等的质量。
环境是Android画布,其中Y轴朝下生长。圆的逻辑表示法是 PlayerBall 类,该类具有成功的碰撞检测功能。 PlayerBall具有字段:
圆心的x 和 y 位置
圆周运动的velX 和 velY 速度矢量表示为两个标量值,可以为正或负。
直径-圆直径
public static void resolveCollision(PlayerBall ballOne, PlayerBall ballTwo)
{
double collisionAngle = Math.atan2(ballTwo.y - ballOne.y, ballTwo.x - ballOne.x); // angle for ball one
// calculating new velocities between ballOne and ballTwo
...
// setting the new velocities for both balls
ballOne.setVelocity((float)ballOneVelX, (float)ballOneVelY);
ballTwo.setVelocity((float)ballTwoVelX, (float)ballwTwoVelY);
}
我希望球的速度根据本文https://en.wikipedia.org/wiki/Elastic_collision#Two-dimensional_collision_with_two_moving_objects中定义的公式发生变化