gpt4 book ai didi

math - 使正弦波更陡峭?

转载 作者:行者123 更新时间:2023-12-03 22:32:54 27 4
gpt4 key购买 nike

我写了一个小函数,当我放入一个介于 0 和 1 之间的浮点数时,它会根据正弦波给出一个值。我将它用于 lerp游戏中的事情。

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;
}
}

它工作正常......但我想知道是否有一种数学方法可以改变正弦波,这样我就可以让它在中间“更陡”或“更浅”?
下图中蓝色曲线是正弦波,我想知道我是否可以使它更像绿线。

enter image description here

最佳答案

您已经显示的并不是真正的正弦 - 正弦的范围在 -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 值,应用该函数一次,然后应用你的函数来改变范围,你就会得到你想要的。

顺便说一句,已经有评论建议使用“缓动功能”备忘单。 “缓动”是动画的一个术语,计算机动画软件通常为此目的使用贝塞尔曲线 - 矢量图形软件经常使用的贝塞尔曲线。贝塞尔曲线有二次和三次变体,三次更常见。所以它所做的可能没有什么不同。然而,三次贝塞尔缓动给你更多的控制——你可以独立于“缓出”控制“缓入”,我的函数只提供一个参数。

关于math - 使正弦波更陡峭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22070187/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com