gpt4 book ai didi

java - 为什么这张柏林噪声图像比另一张更平滑?

转载 作者:行者123 更新时间:2023-12-01 08:55:46 27 4
gpt4 key购买 nike

希夫曼的练习 Nature of Code要求我使用处理的 noise() 创建柏林噪声功能。这是我用来创建 Perlin Noise 的代码

 float xSpace = 0; // Signifies "space" between noise() values on the x coordinate.
float ySpace = 0; // Signifies "space" between noise() values on the y coordinate.


void setup(){
size(500,500);
background(0);
loadPixels();

for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
float bright = map(noise(xSpace,ySpace),0,1,0,255);
pixels[(y * width) + x] = color(bright);
//Each pixel in the pixels[] array is a color element.
ySpace = ySpace + 0.01;
}
xSpace = xSpace + 0.01 ;
}
updatePixels();
}

当我运行代码时,它会创建一个像这样的图像

mySolution

我看了课本上的解决方案。教科书的解决方案和我的解决方案几乎相同,只是教科书在每次外循环迭代时都会将 ySpace 重新初始化回 0

// Textbook's solution

for(int x = 0; x < width; x++) {
ySpace = 0;
for(int y = 0; y < height; y++) {
float bright = map(noise(xSpace,ySpace),0,1,0,255);
pixels[(y * width) + x] = color(bright);
ySpace = ySpace + 0.01;
}
xSpace = xSpace + 0.01 ;
}

但是,当我运行教科书的代码时,代码创建了一个像这样平滑得多的图像

textbookSolution

为什么当在外循环中重新初始化 ySpace 时,图像会比未初始化时平滑得多?换句话说,为什么教科书的代码创建的图像比我的代码平滑得多?

我注意到,一旦 for 循环完成,我的代码中的 ySpace 将明显大于教科书代码中的 ySpace。但我不确定这是否是我的代码图像不那么流畅的原因。根据我的理解,噪声(x,y)创建 2d 柏林噪声。当应用于像素时,该像素应该与其周围的像素具有相似的颜色,但它看起来不像在我的代码中发生的情况。

最佳答案

noise() 函数本质上采用 2D 坐标(或 3D 坐标,或单个数字,但在您的情况下为 2D 坐标)并返回基于该坐标的随机数。距离较近的坐标将生成距离较近的随机数。

考虑到这一点,想想你的代码在做什么以及教科书在做什么。教科书根据窗口中的位置输入 x,y 坐标,这是有道理的,因为这是绘制结果随机值的地方。

但是无论如何,您的代码都会不断增加 y 坐标。如果您只有一列不断下降的像素,但您试图循环遍历屏幕上的像素,这可能是有意义的。

关于java - 为什么这张柏林噪声图像比另一张更平滑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42046881/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com