Как мне временно умножить вектор в p5.js?

#javascript #vector #p5.js

Вопрос:

У меня есть объект под названием Boid, который имеет положение и вектор скорости (направление движения). При обновлении позиции я хочу применить фактор, который пользователь может контролировать. Однако следующий сценарий не работает:

 let speedFactor = 0.1; //ranges from 0 to 2  class Boid {  constructor(x, y) {  this.position = createVector(x, y);  this.velocity = p5.Vector.random2D();  }   update() {  this.position.add(this.velocity * speedFactor); // doesn't work  } }  

Я также пытался использовать такие вещи , как speedFactor = createVector(0.1, 0.1) или = [0.1, 0.1] , но это не работает.

Если я использую this.velocity.mult(speedFactor) , это повлияет на вектор скорости, чего я не хочу (например , потому что, если speedFactor == 0 , this.velocity все испортится). Я попытался создать копию вектора скорости , чтобы преодолеть это с помощью Object.assign({}, this.velocity) или JSON.parse(JSON.stringify(this.velocity)) , но почему-то это тоже не работает.

Большую часть времени я получаю ошибку p5.Vector.prototype.mult: x, y, or z arguments are either undefined or not a finite number .

Что было бы лучше всего сделать здесь?

Ответ №1:

Скопируйте вектор, затем умножьте его обычным mult методом

 let speedFactor = 0.1; //ranges from 0 to 2  class Boid {  constructor(x, y) {  this.position = createVector(x, y);  this.velocity = p5.Vector.random2D();  }   update() {  this.position.add(this.velocity.copy().mult(speedFactor));  } }