我尝试将经典的Perlin Noise(src:http://mrl.nyu.edu/~perlin/doc/oscar.html#noise)移植到JavaScript中 - 用于科学目的。我不知道为什么,但我的代码生成了周期性模式而不是随机模式。
您可以在此处找到我的完整代码,其中包含绘制到画布的示例(向下剥离到一维):http://jsfiddle.net/YL77D/
我认为问题可以在“noise1”函数中找到:
sx = s_curve(rx0);
u = rx0 * g1[ p[ bx0 ] ];
v = rx1 * g1[ p[ bx1 ] ];
return lerp(sx, u, v);
如果我的x-seed是10.1,10.2,10.3等,我认为你和v应该是相同的数字(你应该基于10而v应该基于11 - 所以sx介于两者之间)。我对吗?但在我的代码中,你和v总是不同。
有什么想法吗?非常感谢你。
答案 0 :(得分:1)
一个问题可能是您使用Math.Random
的方式:
p[i] = p[j = Math.floor(Math.random() % B)];
在javascript Math.Random
中返回0到1之间的浮点值
C中的random
返回0到RAND_MAX之间的整数值。
p[i] = p[j = random() % B];