如何在 2D 游戏中将圆形物体从圆形表面弹开?

How can I bounce a circular object off of a circular surface in a 2D game?

我有一个 JS 函数,它应该计算我的 'player' 对象一旦从另一个(静止的)圆形对象反弹回来的新 dx 和 dy。我可以找到玩家与 'goal post' 的角度,但一旦碰撞实际发生,我就无法处理玩家。我可以通过检查玩家和目标之间的距离 post 是否小于或等于两个物体的半径之和来检测碰撞。我还可以使用玩家的 dx 和 dy 计算玩家进入碰撞的角度。我知道入射角应该等于反射角,但是我好像不太对。

我的代码如下:

var side_one = goal_posts[0].x - player.x;
var side_two = goal_posts[0].y - player.y;
var hypotenuse_player_to_post = Math.sqrt(Math.pow(side_one, 2) + Math.pow(side_two, 2));
var angle_player_to_post = Math.acos(side_two / hypotenuse_player_to_post) * (180 / Math.PI);
var player_travel_speed = Math.sqrt(Math.pow(player.dx, 2) + Math.pow(player.dy, 2));
var player_travel_angle = Math.acos(player.dy / player_travel_speed) * (180 / Math.PI);
var difference = angle_player_to_post - player_travel_angle;
var resulting_angle = angle_player_to_post + difference;
resulting_angle = resulting_angle / (180 / Math.PI);
player.dy = Math.cos(resulting_angle) * player_travel_speed;
player.dx = Math.sin(resulting_angle) * player_travel_speed;

非常感谢任何帮助! :)

按照建议,问题已使用向量而不是三角函数解决。