3

我尝试将经典的 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 等。我认为 u 和 v 应该是相同的数字(u 应该基于 10,v 应该基于 11 - 所以 sx 介于两者之间)。我对吗?但在我的代码中,u 和 v 总是不同的。

有任何想法吗?非常感谢你。

4

1 回答 1

1

一个问题可能是您使用的方式Math.Random

p[i] = p[j = Math.floor(Math.random() % B)];

在 javascript中Math.Random返回一个介于 0 和 1 之间的浮点值。
random在 C 中返回一个介于 0 和 RAND_MAX 之间的整数值。

p[i] = p[j = random() % B];
于 2012-05-09T06:58:18.250 回答