Случайное блуждание с векторным объектом (полёт Леви)
После вчерашней попытки написать случайное блуждание я решил реализовать почти то же самое, но с векторным объектом. Насколько я знаю, использовать векторы для описания координат и скорости объектов — обычная практика, и в этом небольшом проекте «сделать, вернувшись с работы» это оказалось удачной идеей. Предыдущая версия случайного блуждания — здесь.
Сначала посмотрите на результат, пояснения ниже:
Код векторного объекта довольно прост — он описывает координаты на 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