2017-02-04 4 views
0

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(); 
} 

을 만들려고 그리고 난 내 코드를 실행하면, 내가 교과서에서 솔루션 보았다이

mySolution

같은 이미지를 생성합니다. 교과서의 해결책과 해결책은 교과서가 바깥 쪽 루프를 반복 할 때마다 으로 다시 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 외부 루프에서 다시 초기화되어이

textbookSolution

왜 같은 훨씬 부드러운 이미지를 생성 그 때보다 훨씬 더 부드럽게? 즉, 교과서의 코드가 내 코드보다 훨씬 부드러운 이미지를 만드는 이유는 무엇입니까?

for 루프가 완료되면 내 코드의 ySpace이 교과서 코드의 ySpace보다 상당히 클 것으로 나타났습니다. 그러나 그것이 내 코드의 이미지가 매끄럽지 않은 이유인지는 확실하지 않습니다. 나의 이해에서, noise (x, y)는 2d Perlin Noise를 생성합니다. 픽셀에 적용될 때 픽셀은 주변 픽셀과 비슷한 색이어야하지만 코드에서 발생하지는 않습니다.

+1

여기에 어떤 질문이 있는지 잘 모릅니다. 알고리즘의 기본 매개 변수를 변경했으며 결과가 수정되지 않은 알고리즘과 일치하지 않을 때 놀라게됩니다. 이 책의 코드는 "첫 번째 루프 내에서"ySpace를 초기화하지 않습니다. "- *** ***은 외부 루프의 _ 반복 전체에서 값을 0으로 초기화합니다. –

+0

좋아, 내 실수를 바로 잡기 위해 내 게시물을 편집했습니다. 'ySpace'의 재 초기화가 교과서의 이미지가 내 것보다 훨씬 더 부드러운 이유입니까? –

답변

1

noise() 함수는 기본적으로 2D 좌표 (또는 3D 좌표 또는 단일 숫자이지만 사용자의 경우 2D 좌표)를 취해 그 좌표에 따라 임의의 숫자를 반환합니다. 서로 가깝게있는 좌표는 서로 가깝게있는 난수를 생성합니다.

당신의 코드가 무엇을하고 있고 무엇을하고 있는지 생각해보십시오. 교과서는 창에서의 위치를 ​​기준으로 x,y 좌표로 입력합니다. 결과는 임의의 값이 그려지는 곳에서 의미가 있습니다.

그러나 코드는 y 좌표를 계속 증가시킵니다. 이것은 계속 떨어지는 하나의 픽셀 열만있는 경우에 효과적 일 수 있지만 화면의 픽셀을 반복하려고합니다.

관련 문제