【问题标题】:integer to noise function in HaskellHaskell中的整数到噪声函数
【发布时间】:2015-06-30 05:27:21
【问题描述】:

我正在尝试实现一个基本的 perlin 噪声函数(我知道有一个库可以做到这一点,我只是想尝试我自己的),我对用于生成确定性噪声的整数到噪声函数有一些问题来自整数输入。

我试图实现的功能在那里定义: http://libnoise.sourceforge.net/noisegen/index.html#continuousnoise

到目前为止,我的代码如下所示:

noise2d :: (Int32, Int32) -> Double
noise2d (x, y) =
    let m = x + y * 57
        n = (shiftR m 13) ^ m
        j = (n * (n * n * 15731 + 789221) + 1376312589) .&. 0x7fffffff
    in  1.0 - (fromIntegral j / 1073741824.0)

代码可以编译,但对于任何输入,我都会得到相同的结果,因为 n 被评估为 0。

有更好的方法吗?

【问题讨论】:

    标签: haskell noise perlin-noise


    【解决方案1】:

    你的错误是

    n = (shiftR m 13) `xor` m
                      ^^^^^
    

    (代替幂函数(^)

    【讨论】:

      【解决方案2】:

      问题源于您使用^-operator。在 C 中,它是按位异或(xor),而在 Haskell 中,它是求幂。所以,你只需要把第四行改成

              n = (shiftR m 13) `xor` m
      

      一切都会好起来的。

      【讨论】:

      • 是的,就是这样!看来我需要补习一下我的 C 了,谢谢!
      猜你喜欢
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      相关资源
      最近更新 更多