使用 reduce 对 p5.Vector 对象数组求和

4
以下代码在使用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));
}

错误似乎出现在p5.js中向量add方法的代码中。错误消息如下: p5.js说:存在错误,无法将“set”作为函数调用(位于p5.js [https://cdn.jsdelivr.net/npm/p5@vv1.4.0/lib/p5.js:91666:22]的第91666行)。 最令人困惑的是,如果将有问题的行替换为以下内容,则代码可以正常运行:
let s = vectors.reduce((u,v) => p5.Vector.add(u,v), createVector(0,0));

这对于我的预期应用程序已经足够,但我想要理解错误而不仅仅是找到一个绕过它的笨方法。我的问题是:为什么直接使用p5.Vector.add尝试reduce会失败,但将其包装在匿名函数中却成功了?

1个回答

4
看起来,p5.Vector.Add 似乎可以使用第三个可选参数: p5.Vector.add(v1, v2, [target]) 在这个例子中,它将目标定义为:

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

在原版本中,您将 reduce 函数中的参数传递到 p5.Vector.Add 中。然而,reduce 的第三个参数是整数 currentIndex。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接