两个向量之间的角度 javascript

Angle between two vectors javascript

我有一个 dotProduct 函数和一个 magnitude 函数。我正在努力将它们结合起来以获得两个向量之间的弧度。

我目前拥有的是:

 Vector.prototype.angleBetween = function (secondVector) {
    var Vec1, Vec2, Vec3, Dot;
    Vec1 = this.magnitude();
    Vec2 = secondVector.magnitude();
    Vec3 = Vec1.getX() * Vec2.getX() + Vec1.getY() * Vec2.getY();
    Dot = Vec3 / Vec1 * Vec2;
    return new Math.cos(Dot);
};

我知道我需要计算两个向量的点积/vec1 * vec2 的大小。

它必须通过这个茉莉花测试:

describe("Angle between", function () {
    var secondVector, angleBetween;
    secondVector = new Vector(-40, 30, 0);
    angleBetween = secondVector.angleBetween(vector);

    it("Result is PI/2", function () {
        expect(angleBetween).toBeCloseTo(Math.PI / 2, 1);
    });
});

我哪里错了?

工作函数:

Vector.prototype.angleBetween = function (secondVector) {
    var Vec1, Vec2, Vec3, Dot;


    Vec1 = this.magnitude();
    Vec2 = secondVector.magnitude();

    Vec3 = this.getX() * this.getY() + secondVector.getX() * secondVector.getY();

    Dot = this.dotProduct(this) * this.dotProduct(secondVector);

    return Math.acos(Vec3 / Vec1 * Vec2 * Math.PI / 2, 1);
};

你应该return Math.acos (Vec3/(Vec1*Vec2)) Acos 因为您希望角度和括号对幅度的乘积进行分组。我认为不需要新的。

Vec1 = this.magnitude();
Vec2 = secondVector.magnitude();
Vec3 = Vec1.getX() * Vec2.getX() + Vec1.getY() * Vec2.getY();

大小不是向量的长度吗?您将其分配给变量 vec1 和 vec2,然后调用 getX 和 getY,就好像它们位于 Vectors.

也许你的意思是 点 = this.getX() * secondVector.getX() + this.getY() * secondVector.getY();

然后

return acos(点/(Vec1*Vec2))

顺便说一句,这是功能 https://evanw.github.io/lightgl.js/docs/vector.html