2011-10-12 7 views
4

무한한 임의의 지형을 생성하려고합니다. 지형은 동일한 시드가 주어질 때마다 똑같이 생성되어야합니다.2D 잡음 생성을위한 파라 메트릭 무작위 함수

Java의 Random 함수를 사용하여 지형 격자에서 주어진 노드의 x 및 y 좌표의 다양한 기능을 사용하여 시드를 생성 해 보았습니다. x * y + x + y + seed, 20 * x + 30 * y 등

이 접근법의 문제점은 생성 된 숫자에 항상 명확한 패턴이 표시된다는 것입니다.

그래서 기본적으로 내가 원하는 무엇인가 : F (X, Y) = 난수

위의 기능을하고, 어떤 종류의 씨앗을 포함 할 수 있다면 도움이 될 것입니다 : F (X, Y를 , seed) = 난수

각 x, y 조합에 대해 여러 개의 숫자를 생성해야하지만 위의 기능을 수행하면 추가 숫자를 쉽게 파생시킬 수 있습니다. 이것들은 지형의 높이를 지시하고, 어떤 특징 (건물, 나무)이 나타날지 지시 할 것입니다.

Perlin Noise 또는 다른 방법에 대해 언급하지 마십시오. 내 문제는 잡음이 좋게 보이지 않고 안정적으로 "무작위"잡음을 얻는 것입니다.

감사합니다. Jamie.

+0

당신은 자바에 의해 생성 된 숫자의 명확한 패턴을 참조 무작위? 그 패턴이 무엇인지 정교하게 신경 써야합니까? – corsiKa

+0

지형에는 가로 및 세로로 반복되는 패턴이 있습니다. – JamieEclipse

+0

이러한 패턴의 예와 패턴을 생성 한 코드를 업로드 할 수 있습니까? 나는 그것에 상당히 관심이있다. 이것은 나의 취미 중 하나입니다. (내가 일했던 연구 회사에서했던 일이기도합니다.) – corsiKa

답변

5

해시 기능을 찾고 있습니다. 그것은 다음과 같습니다,

int hash32shift(int key) 
{ 
    key = ~key + (key << 15); // key = (key << 15) - key - 1; 
    key = key^(key >>> 12); 
    key = key + (key << 2); 
    key = key^(key >>> 4); 
    key = key * 2057; // key = (key + (key << 3)) + (key << 11); 
    key = key^(key >>> 16); 
    return key; 
} 

int noise(int x, int y, int seed) 
{ 
    return hash32shift(seed+hash32shift(x+hash32shift(y))); 
} 

그리고 :

http://www.concentric.net/~ttwang/tech/inthash.htm

다음은 사용 예입니다 : 그 중 하나를 시도

noise

+0

집에 도착하자마자 바로 시험해 보겠습니다. 덕분에 대단히 감사합니다. 나는 자바 연산자를 연구해야 할 것입니다. ">>>"의 존재는 제 마음을 날려 버렸습니다. – JamieEclipse

+0

난 그걸 랜덤 함수와 함께 사용 했으니, 이제는 각 노드가 일련의 난수를 처리 할 수있게되었습니다. : D 혼란을 막기 위해, 필자는 필자가 쓴 잘못된 사전 찾기 기능에 부분적으로 만 (완전히는 아님) 반복 된 것으로 생각된다. 그러나 그것은 반복이 아닌 대칭을 설명 할뿐입니다. – JamieEclipse

관련 문제