출처는 아마도 논문 일 것입니다 : "On generation of random numbers, with the help of y = [(a + x) sin (bx)] mod 1", WJJ Rey, 22nd European Meeting of Statisticians and the 7th Vilnius Conference on Probability Theory and 수학적 통계, 1998 년 8 월
편집 :이 문서의 사본을 찾을 수없고 "TestU01"참조가 명확하지 않을 수 있으므로 다음은 의사 C의 TestU01에 설명 된 체계입니다.
#define A1 ???
#define A2 ???
#define B1 pi*(sqrt(5.0)-1)/2
#define B2 ???
uint32_t n; // position in the stream
double next() {
double t = fract(A1 * sin(B1*n));
double u = fract((A2+t) * sin(B2*t));
n++;
return u;
}
여기서 유일한 권장 상수 값은 B1입니다.
이것은 스트림 용입니다. 1D 해시 'n'으로 변환하면 정수 그리드가됩니다. 그래서 누군가가 이것을보고 't'를 간단한 함수 f (x, y)로 변환했다고 생각합니다. 위의 원래 상수를 사용하면 다음이 생성됩니다.
float hash(vec2 co){
float t = 12.9898*co.x + 78.233*co.y;
return fract((A2+t) * sin(t)); // any B2 is folded into 't' computation
}