什么你已经显示是不是真的正弦 - 正弦波的范围是-1和+1之间。您正在应用线性函数f(x) = (x+1)/2
来更改该范围。所以在另一个功能之间正弦和那个变换。
要更改形状,您需要一个非线性函数。所以,这里的三次方程,你可以尝试...
g(x) = Ax^3 + Bx^2 + Cx + D
D = 0
C = p
B = 3 - 3C
A = 1 - (B + C)
参数p
应给予0.0和9.0之间的值。如果它是1.0,g(x)是标识函数(输出是未修改的输入)。值在0.0到1.0之间时,它会倾向于“增加”正弦波(将其从0.0推到1.0或-1.0),这正是您所需要的。
我曾经“设计”这个函数来获得“分形波形”。在1.0和9.0之间(特别是在3.0和6.0之间)使用p
的值,这个公式的迭代应用是混乱的。我从R.M.Mai的人口变动建模混沌函数中偷了这个想法,但这是一个二次方 - 我想要对称的东西,所以我需要一个三次函数。这里并没有真正的相关性,并且在发生时有一个相当可笑的想法。虽然你当然会得到混沌波形,但是真正意义上的混淆是很大的问题 - 改变采样率并获得非常不同的声音。不过,没有迭代,也许这会给你你所需要的。
如果迭代次数足够多,p值介于0.0和1.0之间,则最终会产生一个方角波,并带有稍微圆角。
最有可能你只能选择一个介于0.0和1.0之间的p值,应用该函数一次,然后然后应用你的函数来改变范围,你会得到你想要的。
顺便说一句,已经有一条评论提示“缓动功能”的备忘单。 “缓动”是动画术语,计算机动画软件通常使用贝塞尔曲线来实现这一目的 - 即矢量图形软件经常使用的相同贝塞尔曲线。贝塞尔曲线具有二次和立方变体,立方体更常见。所以这样做可能没有那么不同。然而,立方贝塞尔宽松给你更多的控制 - 你可以独立于“缓出”来控制“缓入”,而我的功能只提供一个参数。
你说你想要的东西更像是'Y =((2 *的sin(x))^ 2)/ 4'不同于'Y = SIN(X)'? –
您可能对[缓动函数备忘单](http://easings.net/)感兴趣,它可以帮助您找到令人满意的陡峭曲线。然后,您可以查找该曲线的来源[here](http://www.robertpenner.com/easing/)。 – Kevin
任何切线/切线都可以。 – moonwave99