【问题标题】:Using reduce to sum array of p5.Vector objects使用 reduce 对 p5.Vector 对象数组求和
【发布时间】:2022-01-08 12:40:05
【问题描述】:

以下代码在reduce行中抛出错误:

let vectors

function setup() {
    createCanvas(400,400);
    vectors = [];
    vectors.push(createVector(100,100));
    vectors.push(createVector(100,0));
    vectors.push(createVector(0,100));
    let s = vectors.reduce(p5.Vector.add, createVector(0,0));//error!
    console.log(s.x,s.y);
}

function draw() {
    vectors.forEach(v => line(0,0,v.x,v.y));
}

错误似乎出现在向量add 方法的p5.js 代码中。错误信息开始:​​

p5.js says: There's an error as "set" could not be called as a function (on line 91666 in p5.js [https://cdn.jsdelivr.net/npm/p5@vv1.4.0/lib/p5.js:91666:22]).

这个错误似乎最令人困惑的是,如果有问题的行被替换为:

let s = vectors.reduce((u,v) => p5.Vector.add(u,v), createVector(0,0));

这对于我的预期应用程序来说已经足够了,但我想了解错误,而不是仅仅找到一种笨拙的方法来回避它。因此,我的问题是——为什么尝试直接使用 reduce 与 p5.Vector.add 失败但将其包装在匿名函数中会成功?

【问题讨论】:

    标签: javascript processing p5.js


    【解决方案1】:

    看起来p5.Vector.Add 可以接受第三个可选参数:

    p5.Vector.add(v1, v2, [target])

    在该示例中,它这样定义目标:

    p5.Vector:接收结果的向量(可选)

    在您的原始版本中,您将reduce 函数中的参数传递给p5.Vector.Add。但是,reduce 的第三个参数是 currentIndex,一个整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2021-12-02
      • 2019-10-28
      • 2020-11-15
      相关资源
      最近更新 更多