Диаграмма:
Направление шага (черная линия) определяется как (cos θ, sin θ)
. Направление смещения шага (маленькие синие линии) задается как (sin θ, -cos θ)
Повторяемость позиции задается:
s
определяет, на какой стороне черной линии находится следующий след, т. Е. -1 для левой ноги и +1 для правой.
Если вы знаете начальную позицию c0
и начальную ногу s0
, решение в закрытой форме задается как:
Это чередует обе ноги для каждого шага.
В вашем примере диаграммы параметры w = 60, d = 120, θ = 40°, c0 = (96, 438), s0 = -1
(начиная с левой ноги).
ОБНОВЛЕНИЕ: фрагмент кода JavaScript
this.startingPosX = Math.floor(Math.random() * 1000) + 20;
this.startingPosY = Math.floor(Math.random() * 560) + 20;
this.startingAngle = Math.floor(Math.random() * 340) + 20;
this.startingFoot = 1 - 2 * Math.round(Math.random()); // select which foot to start with
this.stepSize = 120;
this.stepWidth = 60;
footsteps(0);
footsteps(n) {
// should actually pre-calculate these outside but oh well
let a = this.startingAngle * Math.PI / 180;
let c = Math.cos(a), s = Math.sin(a);
// current foot
let d = this.startingFoot * (1 - 2 * (n % 2));
// apply equations
this.footprintX = Math.round(
this.startingPosX + // initial
this.stepSize * n * c + // step
this.stepWidth * 0.5 * d * s // foot offset
);
this.footprintY = Math.round(
this.startingPosY + // initial
this.stepSize * n * s - // step
this.stepWidth * 0.5 * d * c // foot offset
);
// draw the foot here
console.log(this.footprintX);
console.log(this.footprintY);
// increment the step counter for the next call
setInterval(function() { footsteps(n+1); }, 3000);
}