需要让球以它所击中的角度移动

时间:2016-04-03 18:35:25

标签: javascript physics collision velocity trigonometry

self.hitBall = function(ball, x, y) {
    var angle = Math.atan2((x - ball.centerX), (y - ball.centerY));
    ball.velocityY = (Math.sin(angle) * 10);
    ball.velocityX = (Math.cos(angle) * 10);
};

因此该函数接收球,其具有centerX变量和centerY变量。传递给函数的x和y是x,y是球被击中的点。我想让球沿着被击中的方向前进。

我不确定为什么我的代码不起作用..它表现得非常奇怪,而且我的三角函数不太好,所以我不太确定为什么它不是&#&# 39;工作。

1 个答案:

答案 0 :(得分:1)

您的代码有两个问题:

  • Math.atan2()以(y,x)顺序获取参数。大多数语言(Java,JavaScript,C等)执行此操作(Microsoft Excel和其他使用(x,y)顺序的其他语言除外)。

  • 当你说“[make]球从它被击中的角度移动时”,你想要从球点中减去击中点。换句话说,矢量是(ball.centerX - hitX,ball.centerY - hitY)。

因此,解决方案:

  • 解决方案1:

    var angle = Math.atan2((ball.centerY - y), (ball.centerX - x));
    
  • 解决方案2 - 无角度的矢量数学(等效计算):

    var dx = ball.centerX - x;
    var dy = ball.centerY - y;
    var norm = Math.sqrt(dx * dx + dy * dy);
    ball.velocityX = (dx / norm) * 10;
    ball.velocityY = (dy / norm) * 10;