2D矢量检查幅度

时间:2016-12-11 17:23:28

标签: javascript vector

我正在创建一个矢量对象,其功能如下:

Vector.prototype.limitTo = function (pScalar) {

    this.normalise();
    this.multiply(pScalar);
    if (this.magnitude() > pScalar) {
        this.magnitude = 30;
    }
    return new Vector(this.getX(), this.getY(), this.getZ());

};

在此我试图使其符合此规范:

“你的Vector对象应该有一个'limitTo'函数,它接受一个标量数作为它的参数。该函数应该返回一个新构造的Vector对象,该对象的方向与'this'向量相同,但是如果它的大小超过给定的参数值然后它的大小减小到等于最大值.Vector的方向应该不受影响,只有幅度可以改变。如果Vector的幅度没有超过最大值,那么它不应该是改变的“。

茉莉花的测试:

describe("Limit To", function () {
    var limitedVector, magnitude;

    it("Magnitude not exceeding limit", function () {
        limitedVector = vector.limitTo(60);
        magnitude = limitedVector.magnitude();
        expect(magnitude).toEqual(50);
    });

    it("Magnitude exceeding limit", function () {
        limitedVector = vector.limitTo(30);
        magnitude = limitedVector.magnitude();
        expect(magnitude).toEqual(30);
    });
});

我的数量不超过限制,但是我无法获得超限测试。

1 个答案:

答案 0 :(得分:0)

您没有包含您的方法,但为方法属性分配数字似乎是错误的。很可能你想要

Vector.prototype.limitTo = function (pScalar) {
  return this.normalise().multiply(Math.min(his.magnitude(), pScalar));
};

如果this.normalise()就位,请先复制矢量。