当前位置: 首页 > 知识库问答 >
问题:

使正弦波变陡?

阎祖鹤
2023-03-14

我写了一个小函数,它给出了一个基于正弦波的值,当我在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个答案

聂煜
2023-03-14

你所显示的并不是正弦的-正弦的范围在-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),这是你似乎需要的。

顺便说一句,已经有一个评论建议“放松功能”的备忘单。“缓和”是一个来自动画的术语,计算机动画软件经常为此使用贝塞尔曲线--与矢量图形软件经常使用的贝塞尔曲线相同。Bezier曲线有二次型和三次型,其中三次型更为常见。所以它所做的可能并没有什么不同。然而,立方Bezier宽松给了您更多的控制-您可以控制“轻松进入”独立于“轻松出去”,其中我的函数只提供一个参数。

 类似资料:
  • 我试图在y有最高值时显示x位置。在if语句中,我试图将y值与120进行比较,但它似乎从来都不是真的,所以它没有使用文本函数显示我的x位置。我也试着取整y值,但结果仍然不是我想要的。有人能帮我吗?

  • 我正在做一个项目,我想通过组合不同的正弦波来产生(简单的)声音。我使用的是arduino mkrZero,因为它内置了I2S接口,似乎有足够的处理能力来满足我的需求。 教程代码工作得很好,我从扬声器中得到了一个简单的方波音调。 现在我修改了生成正弦波的代码,有一个sin函数的查找表,使其足够快: 如果我稍微修改一下代码,然后写 而不是 一切都破裂了,扬声器发出的声音听起来像是可怕的尖叫 //阻塞

  • 本文向大家介绍使用HTML5绘制正弦波,包括了使用HTML5绘制正弦波的使用技巧和注意事项,需要的朋友参考一下 要使用HTML5绘制正弦波,请使用SVG。 使用以下近似正弦波的一半。我使用了三次贝塞尔近似。

  • 用C/C++编写了一个三维正弦波发生器 代码:

  • 我如何建立一个方程来产生扫频正弦波。我是信号处理新手,在网上找不到太多关于生成扫描正弦波的话题。请告诉我一些我可以用来生成方程式并在代码中使用的源代码。非常感谢。

  • 我试图生成一组点,当绘制成一个图表示1个周期的正弦波。要求是: 1个周期的正弦波 下限=29491 上限=36043 点数=100 振幅=3276 零偏移量=32767 代码: 我正在生成并存储一个文件中的点。当这些点被绘制出来时,我得到了下面的图。 但我只需要一个循环。我怎么能这么做?