gpt4 book ai didi

javascript - 需要让球按照击球的 Angular 行进

转载 作者:行者123 更新时间:2023-11-27 23:08:35 28 4
gpt4 key购买 nike

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 是球被击中的点。我想让球沿着击球的方向移动。

不太确定为什么我的代码不起作用......它的行为非常奇怪,而且我对三 Angular 学不太擅长,所以我不太确定为什么它不起作用。

最佳答案

您的代码有两个问题:

  • Math.atan2() 按 (y, x) 顺序获取参数。大多数语言(Java、JavaScript、C 等)都会这样做(Microsoft Excel 和其他一些语言除外,它们使用 (x, y) 顺序)。

  • 当您说“[使]球按照击球的 Angular 行进”时,您想要从球点中减去击球点。换句话说,向量是(ball.centerX - hitX,ball.centerY - hitY)。

因此,解决方案:

  • 解决方案 1:

    var angle = Math.atan2((ball.centerY - y), (ball.centerX - x));
  • 解决方案 2 - 进行不带 Angular 向量数学计算(等效计算):

    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;

关于javascript - 需要让球按照击球的 Angular 行进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com