【问题标题】:How to calculate linear (not sin) output out of increasing value如何计算增加值的线性(非罪)输出
【发布时间】:2019-08-17 12:55:16
【问题描述】:

我有一个递增的值 1 到 10000。我可以把它放在一个 sin 函数中,以获得像 sin 输出这样的值。

现在我想要一个线性输出,当我将此值作为输入时,它会给出如下输出:实际上这些值必须在 0..1 范围内

0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .8 .7 .6 .5 .4 .3 .2 .1 0

我怎样才能做到这种快速的数学方法

实际上,我想要一段零,然后突然爆发到 1,然后又平静下来到 0。我想如果我得到上面的版本,我可以把它放在一个缓动函数中来得到这个结果:

0 0 0 0 0 0 .1 .2 .4 .8 .9 1 .9 .8 .4 .2 .1

【问题讨论】:

标签: javascript game-physics


【解决方案1】:

执行此操作的一种非性能缓慢的方法是:

const linear = (() => {
  const res = [];
  for (let i = 0; i < 100; i++) {
    res.push(i / 100);
  }
  for (let i = 100; i > 0; i--) {
    res.push(i / 100);
  }


  return t => res[Math.round(t) % res.length];
})();

const easing = t => {
  return .04 * t / (--t) * Math.sin(25 * t);
};

easing(linear(t))一样使用它

【讨论】:

  • 这应该在问题中:它准确地显示了您正在寻找的内容,而当前的问题是矛盾和模糊的。
  • 顺便说一句,我很确定使这个“非性能”和“缓慢”的原因是 easing 函数,而不是 linear 函数。所以这个问题一开始可能是错误的。
  • 我正在寻找最佳实践,我的问题应该有一个名称和已知的解决方案@ruakh。
  • 我不知道你为什么用@ruakh. 结束你的最后一条评论;据我所知,您的评论与我的任何一个都无关?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2022-11-14
  • 1970-01-01
  • 2010-11-23
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多