0

下面的这个返回被定义为高斯衰减。我没有看到 e 或 2 的幂,所以我不确定这与高斯衰减有何关系,或者它是否是我用来在网格上获得良好平滑变形的错误类型的衰减:

Mathf.Clamp01 (Mathf.Pow (360.0, -Mathf.Pow (distance / inRadius, 2.5) - 0.01))

其中Mathf.Clamp01返回一个介于 0 和 1 之间的值。

inRadius是失真的大小,由下式distance确定:

        sqrMagnitude = (vertices[i] - 位置).sqrMagnitude;
        // 如果太远就提前退出
        if (sqrMagnitude > sqrRadius)
            继续;
        距离 = Mathf.Sqrt(sqrMagnitude);

vertices是网格顶点的列表,position是网格操作/变形的点。

我的问题是两个部分:

1)以上实际上是高斯衰减吗?它是指数的,但似乎没有关键的 e 或 2 的幂...(更新 - 我看到图形似乎以类似高斯的方式平滑地减小。也许这个函数不是问题 2 的原因以下)

2)我的网格变形不够平滑 - 鉴于上述参数,您会推荐不同的高斯衰减吗?

4

1 回答 1

0

不知道网格等,但让我们看看数学:

f=360^(-0.1- ((d/r)^2.5) ) 看起来与高斯函数足够相似,可以“脱落”。我将把指数分开来显示一个点: f= 360^( -(d/r)^2.5)*360^(-0.1)=(0.5551)*360^( -(d/r)^2.5)

if d-->+inf then f-->0 if d-->+0 then f-->(0.5551) 360 的指数总是负数(假设 'distance' 和 'inRadius' 总是正数)并且得到更大(更负)几乎立方(2.5的幂)与距离因此函数“下降”并且做得非常快。

结论:该函数不是高斯函数,因为它在负输入时表现不佳,可能还有其他原因。它确实表现出您正在寻找的“脱落”行为。改变 r 将改变衰减的速度。当 d==r 时,f=(1/360)*0.5551。该函数永远不会超过 0.5551 并低于零,因此代码中的“剪辑”是没有意义的。

我没有看到任何关于常数 360 的具体原因 - 改变它会稍微改变斜率。

干杯!

于 2011-10-30T01:30:44.450 回答