Javascript 在2D游戏中,如何从圆形表面反弹圆形对象?

Javascript 在2D游戏中,如何从圆形表面反弹圆形对象?,javascript,2d,collision,Javascript,2d,Collision,我有一个JS函数,当我的“播放器”对象从另一个(静止的)圆形对象上反弹时,它应该计算出新的dx和dy。我可以找到球员与“球门柱”的角度,但一旦发生碰撞,我就很难处理好球员。我可以通过检查球员与球门柱之间的距离是否小于或等于两个物体半径之和来检测碰撞。我还可以使用玩家的dx和dy计算玩家发生碰撞的角度。我知道入射角应该等于反射角,但我似乎无法正确计算 我的代码如下: var side_one = goal_posts[0].x - player.x; var side_two = goal_pos

我有一个JS函数,当我的“播放器”对象从另一个(静止的)圆形对象上反弹时,它应该计算出新的dx和dy。我可以找到球员与“球门柱”的角度,但一旦发生碰撞,我就很难处理好球员。我可以通过检查球员与球门柱之间的距离是否小于或等于两个物体半径之和来检测碰撞。我还可以使用玩家的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;

非常感谢您的帮助!:)

正如所建议的,这个问题是用向量而不是三角函数来解决的。

朋友,总是用向量,从不使用三角函数。没错!事实上,为了得到结果向量,我设法使用对象的向量和点积来解决这个问题,事实上,我对代码的简单性感到惊讶!不过,谢谢你的回复!