После вчерашней попытки написать случайное блуждание я решил реализовать почти то же самое, но с векторным объектом. Насколько я знаю, использовать векторы для описания координат и скорости объектов — обычная практика, и в этом небольшом проекте «сделать, вернувшись с работы» это оказалось удачной идеей. Предыдущая версия случайного блуждания — здесь.

Сначала посмотрите на результат, пояснения ниже:


Код векторного объекта довольно прост — он описывает координаты на canvas:

function Vector(x, y) {
  this.x = x;
  this.y = y;
}

Мне также понадобился случайный вектор заданной длины — чтобы описать следующий шаг блуждателя:

function randomNumber(min, max) {
  if (min > 0) return (max - min) * Math.random();
  else return (max - min) * Math.random() + min;
}
function randomSign() {
  let test = Math.round(Math.random() * 2);
  if (test == 1) return -1;
  else return 1;
}
Vector.prototype.random = function (length) {
  x = randomNumber(-length, length);
  y = Math.sqrt(Math.pow(length, 2) - Math.pow(x, 2)) * randomSign();
  return new Vector(x, y);
};

После этого оставалось лишь поместить начало отрезка в предыдущую точку (исходный вектор), прибавить к нему случайный вектор и нарисовать отрезок. Совсем просто. Полный код — на моём GitHub