Shiffman의 Nature of Code에서 연습을하면 Processing의 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();
}
을 만들려고 그리고 난 내 코드를 실행하면, 내가 교과서에서 솔루션 보았다이
같은 이미지를 생성합니다. 교과서의 해결책과 해결책은 교과서가 바깥 쪽 루프를 반복 할 때마다 으로 다시 ySpace
을 다시 초기화하는 것을 제외하면 거의 동일합니다. 나는 교과서의 코드를 실행하면
// 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 ;
}
그러나 코드는 이미지가 나오지 않는, ySpace
외부 루프에서 다시 초기화되어이
왜 같은 훨씬 부드러운 이미지를 생성 그 때보다 훨씬 더 부드럽게? 즉, 교과서의 코드가 내 코드보다 훨씬 부드러운 이미지를 만드는 이유는 무엇입니까?
for 루프가 완료되면 내 코드의 ySpace
이 교과서 코드의 ySpace
보다 상당히 클 것으로 나타났습니다. 그러나 그것이 내 코드의 이미지가 매끄럽지 않은 이유인지는 확실하지 않습니다. 나의 이해에서, noise (x, y)는 2d Perlin Noise를 생성합니다. 픽셀에 적용될 때 픽셀은 주변 픽셀과 비슷한 색이어야하지만 코드에서 발생하지는 않습니다.
여기에 어떤 질문이 있는지 잘 모릅니다. 알고리즘의 기본 매개 변수를 변경했으며 결과가 수정되지 않은 알고리즘과 일치하지 않을 때 놀라게됩니다. 이 책의 코드는 "첫 번째 루프 내에서"ySpace를 초기화하지 않습니다. "- *** ***은 외부 루프의 _ 반복 전체에서 값을 0으로 초기화합니다. –
좋아, 내 실수를 바로 잡기 위해 내 게시물을 편집했습니다. 'ySpace'의 재 초기화가 교과서의 이미지가 내 것보다 훨씬 더 부드러운 이유입니까? –