Типичная случайная прогулка не заботится об изменении направления.Каждая итерация генерирует новое направление.Но если вы представите точку, анимированную во время случайного блуждания, она будет в основном прыгать.Итак, цель состоит в том, чтобы получить более плавную кривую в зависимости от ранее вычисленных точек.
Как настроить функцию случайного блуждания, чтобы иметь более плавные изменения направления?
Моя главнаяИдея состоит в том, чтобы иметь метод, который генерирует новую точку с координатами x и y, но следит за предыдущим шагом и уменьшает размер следующего шага (const radius
), если поворот (изменение направления) приближается к 180 °.
Поэтому я использую D3js , чтобы случайным образом сделать новый шаг в любом направлении x и y.В конце я получу массив всех прошлых шагов, ограниченный максимальным количеством шагов.Радиус указывает, как долго должен выполняться средний шаг по осям x и y '.
const history = [];
const steps = 10;
const radius = 1;
let point = {
x: 0,
y: 0,
radians: null
};
for (let i = 0; i < steps; i++) {
console.log(point);
history.push(point);
const previousPoint = Object.assign({}, point);
point.x += radius * d3.randomNormal(0, 1)();
point.y += radius * d3.randomNormal(0, 1)();
point.radians = Math.atan2(
point.y - previousPoint.y,
point.x - previousPoint.x
);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.8.0/d3.js"></script>