两个向量javascript之间的角度

时间:2016-12-11 14:45:53

标签: javascript vector 2d

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

到目前为止我所拥有的是:

 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的两个向量/幅度的Dotproduct。

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

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);
};

2 个答案:

答案 0 :(得分:0)

你应该返回Math.acos(Vec3 /(Vec1 * Vec2)) Acos,因为你想要角度和parens分组大小的产品。我不认为需要新的东西。

答案 1 :(得分:0)

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

向量的长度不是很大吗?你将它分配给变量vec1和vec2,然后调用getX和getY,就像它们在Vector中一样。

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

然后

返回acos(Dot /(Vec1 * Vec2))

不过这是功能 https://evanw.github.io/lightgl.js/docs/vector.html