两个向量之间的角度 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
我有一个 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