Найти формулу обратного преобразования
Есть такая функция:
(timeFraction) => {
return timeFraction < 0.5
? 4 * timeFraction * timeFraction * timeFraction
: (timeFraction - 1) *
(2 * timeFraction - 2) *
(2 * timeFraction - 2) +
1;
}
принимает она число от 0 до 1 и отдает тоже число от 0 до 1
Вот пример для 0.3: (0.3) => 0.108
Как сделать функцию обратной операции: (0.108) => 0.3?
Ответы (1 шт):
Автор решения: Exploding Kitten
→ Ссылка
// прямая функция
let f = (timeFraction) => {
return timeFraction < 0.5
? 4 * timeFraction * timeFraction * timeFraction
: (timeFraction - 1) *
(2 * timeFraction - 2) *
(2 * timeFraction - 2) +
1;
};
// обратная
let ff = t => {
return t < 0.5
? Math.cbrt(t / 4)
: Math.cbrt((t - 1) / 4) + 1
};
var x = f(0.3);
var reverse = ff(x);
console.log(x);
console.log(reverse);
x = f(0.6);
reverse = ff(x);
console.log(x);
console.log(reverse);
С первой частью условия все достаточно просто, её можно преобразовать на лету, а вот вторую можно представить как уравнение и решить:
y = (x - 1) * (2x - 2) * (2x - 2) + 1
y = 4 * (x - 1) ^ 3 + 1
(y - 1) / 4 = (x - 1)^3
cbrt((y - 1) / 4) = x - 1
cbrt((y - 1) / 4) + 1 = x