柏林噪声:网格单元之间的尖锐轮廓(Matlab)
我相信这个问题与我无关 我试图在Matlab中实现2D经典柏林噪声。我一直在利用这本书作为参考。然而,我的程序给了我“非平滑”的噪音,正如你在下面看到的。局部插值(在每个网格单元内)工作正常,但网格单元之间存在连续性问题。在我看来,噪音几乎就在那里,除了尖锐度,我无法确定其原因。如果您查看等高线图,网格单元之间存在一些匹配,因此我不会(或者我不相信我会)为噪声计算选择错误的网格点 这是我的密码。在这一点上,我的目标不是速度或效率(速度非常慢) 是什么导致沿网格的不连续性? ============================================== 修正码 (感谢MarkV) 应改为柏林噪声:网格单元之间的尖锐轮廓(Matlab),matlab,noise,perlin-noise,Matlab,Noise,Perlin Noise,我相信这个问题与我无关 我试图在Matlab中实现2D经典柏林噪声。我一直在利用这本书作为参考。然而,我的程序给了我“非平滑”的噪音,正如你在下面看到的。局部插值(在每个网格单元内)工作正常,但网格单元之间存在连续性问题。在我看来,噪音几乎就在那里,除了尖锐度,我无法确定其原因。如果您查看等高线图,网格单元之间存在一些匹配,因此我不会(或者我不相信我会)为噪声计算选择错误的网格点 这是我的密码。在这一点上,我的目标不是速度或效率(速度非常慢) 是什么导致沿网格的不连续性? ========
我觉得你好像在这里换了B&C
% calculate influence of gradient vectors by using dot product
s = dot(A, [gradients(xi, yi, 1), gradients(xi, yi, 2)] );
t = dot(C, [gradients(xi, yf, 1), gradients(xi, yf, 2)] ); % use C
u = dot(B, [gradients(xf, yi, 1), gradients(xf, yi, 2)] ); % use B
v = dot(D, [gradients(xf, yf, 1), gradients(xf, yf, 2)] );
你说得对。真不敢相信我自己没找到这个。谢谢我已经在问题中添加了正确的代码。
% calculate influence of gradient vectors by using dot product
s = dot(A, [gradients(xi, yi, 1), gradients(xi, yi, 2)] );
t = dot(B, [gradients(xi, yf, 1), gradients(xi, yf, 2)] );
u = dot(C, [gradients(xf, yi, 1), gradients(xf, yi, 2)] );
v = dot(D, [gradients(xf, yf, 1), gradients(xf, yf, 2)] );
% calculate influence of gradient vectors by using dot product
s = dot(A, [gradients(xi, yi, 1), gradients(xi, yi, 2)] );
t = dot(B, [gradients(xf, yi, 1), gradients(xf, yi, 2)] );
u = dot(C, [gradients(xi, yf, 1), gradients(xi, yf, 2)] );
v = dot(D, [gradients(xf, yf, 1), gradients(xf, yf, 2)] );
% calculate influence of gradient vectors by using dot product
s = dot(A, [gradients(xi, yi, 1), gradients(xi, yi, 2)] );
t = dot(C, [gradients(xi, yf, 1), gradients(xi, yf, 2)] ); % use C
u = dot(B, [gradients(xf, yi, 1), gradients(xf, yi, 2)] ); % use B
v = dot(D, [gradients(xf, yf, 1), gradients(xf, yf, 2)] );