This repository has been archived on 2022-03-12. You can view files and clone it, but cannot push or open issues or pull requests.
2021-04-02 02:24:13 +03:00

36 lines
1.2 KiB
JavaScript

import { cond, sub, pow, divide, multiply, add, block, set, lessThan, proc, abs } from '../base';
const VELOCITY_EPS = 5;
function decay(clock, state, config) {
const lastTime = cond(state.time, state.time, clock);
const deltaTime = sub(clock, lastTime); // v0 = v / 1000
// v = v0 * powf(deceleration, dt);
// v = v * 1000;
// x0 = x;
// x = x0 + v0 * deceleration * (1 - powf(deceleration, dt)) / (1 - deceleration)
const kv = pow(config.deceleration, deltaTime);
const kx = divide(multiply(config.deceleration, sub(1, kv)), sub(1, config.deceleration));
const v0 = divide(state.velocity, 1000);
const v = multiply(v0, kv, 1000);
const x = add(state.position, multiply(v0, kx));
return block([set(state.position, x), set(state.velocity, v), set(state.time, clock), cond(lessThan(abs(v), VELOCITY_EPS), set(state.finished, 1))]);
}
const procDecay = proc((clock, time, velocity, position, finished, deceleration) => decay(clock, {
time,
velocity,
position,
finished
}, {
deceleration
}));
export default ((clock, {
time,
velocity,
position,
finished
}, {
deceleration
}) => procDecay(clock, time, velocity, position, finished, deceleration));
//# sourceMappingURL=decay.js.map