我有一个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);
};
答案 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