Math 使正弦波更陡?

Math 使正弦波更陡?,math,trigonometry,Math,Trigonometry,我写了一个小函数,当我在0和1之间加一个浮点数时,它会给出一个基于正弦波的值。我用它来做游戏中的事情 public static class Utilities { public static float SineMe(float prop) { float output = (prop*180f)-90f; output = Mathf.Sin(output*Mathf.Deg2Rad); output = (output+

我写了一个小函数,当我在0和1之间加一个浮点数时,它会给出一个基于正弦波的值。我用它来做游戏中的事情

public static class Utilities 
{
    public static float SineMe(float prop)
    {
        float output = (prop*180f)-90f;

        output = Mathf.Sin(output*Mathf.Deg2Rad);

        output = (output+1f)/2f;

        return output;
    }
}
它很好用。。但我想知道有没有一种数学方法来改变正弦波,所以我可以让它变陡还是变浅? 在下图中,蓝色曲线是正弦波,我想知道是否可以使它更像绿线


您已经显示的不是真正的正弦-正弦的范围在-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),这似乎是您所需要的

我曾经“设计”过这个函数,作为获得“分形波形”的一种方法。使用
p
的值在1.0和9.0之间(特别是在3.0和6.0之间),该公式的迭代应用是混乱的。我从R.M.May的人口波动混沌函数模型中吸取了这个想法,但这是一个二次函数——我想要对称的东西,所以我需要一个三次函数。在这里不太相关,这是一个相当令人敬畏的想法。虽然你肯定会得到混乱的波形,但这意味着混叠会带来巨大的问题——改变采样率,你会得到完全不同的声音。不过,如果没有迭代,也许这会给你你所需要的

如果在p介于0.0和1.0之间的情况下迭代足够多的时间,则最终会得到一个带有略微圆角的方波

最有可能的情况是,您可以选择一个介于0.0和1.0之间的p值,应用该函数一次,然后应用您的函数来更改范围,您将得到所需的值

顺便说一句,已经有评论建议使用“放松功能”的备忘单。“缓和”是来自动画的一个术语,计算机动画软件经常使用贝塞尔曲线来实现这一目的——与矢量图形软件经常使用的贝塞尔曲线相同。贝塞尔曲线有二次曲线和三次曲线,三次曲线更常见。因此,这可能并没有什么不同。但是,立方贝塞尔松弛给了您更多的控制-您可以独立于“放松”来控制“放松”,我的函数只提供一个参数。

x=[0..1]
时,您可以使用
y(x)=1-(1-x)^n
函数作为变换函数

您只需将
x
替换为
sinus
的绝对值,并将
sinus
的符号报告给结果。这样,您可以通过增加
n
来调整窦斜率。所以你想要的是:


我在寻找一个类似的函数,不是整个正弦函数,而是周期的一半。 我碰到了后勤部门:

f(x) = L / (1 + e^(-k(x-x0)))

where
e = the natural logarithm base (also known as Euler's number),
x0 = the x-value of the sigmoid's midpoint,
L = the curve's maximum value, and
k = the steepness of the curve.

适用于我

您可以对正弦函数进行根运算,使其更陡峭(仅适用于正值)。根越高,正弦越陡

我发现了一个更陡峭的正弦波(0..1)的巧妙技巧

如果需要(-1..1):

那怎么办

sign(sin(x))*sqrt(abs(sin(x))


你是说你想要的东西比
y=sin(x)
更像
y=((2*sin(x))^2)/4
?你可能会对这条曲线感兴趣,它可以帮助你找到令人满意的陡度曲线。然后你可以查找曲线的来源。任何切线/切线都可以。@Kevin,非常感谢你的页面太棒了,现在我也知道了“缓和”这个词
f(x) = cos(sin(x)^3)^10
2 * (f(x) - 0.5)
sign(sin(x))*sqrt(abs(sin(x))