Haskell中的整数到噪声函数

时间:2015-04-22 13:45:09

标签: haskell noise perlin-noise

我正在尝试实现一个基本的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。

有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

问题源于您使用^ - 运算符。在C中它是按位独占分离(xor),而在Haskell中它是取幂。所以,你只需要将第四行改为

        n = (shiftR m 13) `xor` m

一切都应该没问题。

答案 1 :(得分:3)

您的错误是

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

(而不是幂函数(^)