返回接近sin / cosin曲线的值的简单方法,不使用三角函数?

时间:2017-01-15 20:43:56

标签: javascript math trigonometry

提前为难以解释的问题道歉,答案可能只是" " ...

我有一个值 .CoursesCard { width 32% margin 10px 1% float left padding-top 20% display inline-block background white box-shadow 0px 3px 20px #555 background-repeat no-repeat background-size cover cursor pointer &.hover{ box-shadow 0px 3px 22px #333 } .CardOverlay { width 100% height auto padding 10px 0 background rgba(33,51,66,0.8) color #fff background-repeat no-repeat background-size cover cursor pointer &.hover { box-shadow 0px 3px 22px #333 } h3{ font-size 18px font-weight 500 margin-bottom 5px margin-left 10px } p.lastChecked{ font-size 13px font-weight 100 margin-bottom 5px margin-left 10px } p.onlineUsers{ font-size 14px font-weight 400 margin-left 10px display block } }

我希望增加幅度,比如2:-1 >= n <= 1

我也想调整它的阶段,比如.5:2*n

我怎样才能这样做,当n增加到1时,它会翻转符号并减少自身,例如:当n增加到1.1时,结果实际上是.9。

我知道这可以用trig来完成,但是我很难增加它的幅度并改变它的相位 - 当我做完两件事时我得到了这个表达式:

2*n + .5

对于那个表达式,我仍然需要执行额外的计算/舍入来获得我的最终值;表达变得复杂臃肿。

我想知道是否有更简单的方法来获得所需的范围/值,完全避免触发?我想象一个类似于模数的运算符,除了&#而不是# 34;复位&#34;到0,它的价值降低......

2 个答案:

答案 0 :(得分:1)

您可以在一个句点的情况下明确写出公式,并对基本周期之外的值使用递归。

E.g。

function notTrig(x) {
  switch (true) {
    case (x >= 0 && x < 1):
      return x
    case (x >= 1 && x < 2):
      return 2 - x
    default:
      notTrig(x - 2)
  }
}

这应该给你一个平均1/2,幅度1/2和2期的锯齿信号。你还需要处理负片:左边的问题练习; - )

编辑:在我滥用术语&#34;锯齿波&#34;之后,我发生了这种情况。以上。我所描述的功能是连续的,我应该使用的术语是&#34;三角波。&#34;也就是说,我对@ calipoop的答案非常满意。

答案 1 :(得分:1)

事实证明,三角波解决了我的问题。它提供类似于正弦的振荡值(不容易),它避免了Math.trig并简化了我的公式。我扩展了this SO答案以及wikipedia formulas中给出的公式。

Triangle wave with period 4 and amplitude 2

Fried Brice的回答表明锯齿在正确的轨道上 - 但是三角波更适合我,而单线公式让我的眼睛感觉更好。