// PerlinNoise.h: CPerlinNoise クラスのインターフェイス // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_PERLINNOISE_H__2A0F6681_C030_46CF_9363_B43D85BF5181__INCLUDED_) #define AFX_PERLINNOISE_H__2A0F6681_C030_46CF_9363_B43D85BF5181__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 //******************* //* for Perlin Noise //******************* #define pn_B 0x100 #define pn_BM 0xff #define pn_N 0x1000 #define pn_NP 12 /* 2^N */ #define pn_NM 0xfff #define random genrand_int31 // random -> Mersenne Twister #define pn_s_curve(t) ( t * t * (3. - 2. * t) ) #define pn_lerp(t, a, b) ( a + t * (b - a) ) #define pn_setup(i,b0,b1,r0,r1)\ t = vec[i] + pn_N;\ b0 = ((int)t) & pn_BM;\ b1 = (b0+1) & pn_BM;\ r0 = t - (int)t;\ r1 = r0 - 1.; //******************************** //* for Mersenne Twister MT19937 //******************************** /* Period parameters */ #define mt_N 624 #define mt_M 397 #define mt_MATRIX_A 0x9908b0dfUL /* constant vector a */ #define mt_UPPER_MASK 0x80000000UL /* most significant w-r bits */ #define mt_LOWER_MASK 0x7fffffffUL /* least significant r bits */ class CPerlinNoise { public: CPerlinNoise(); CPerlinNoise(unsigned long seed); virtual ~CPerlinNoise(); double Turbulence1d(double x,int oct) ; double Turbulence2d(double x,double y,int oct) ; double Turbulence3d(double x,double y,double z,int oct) ; //******************* //* for Perlin Noise //******************* protected: int p[pn_B + pn_B + 2]; double g3[pn_B + pn_B + 2][3]; double g2[pn_B + pn_B + 2][2]; double g1[pn_B + pn_B + 2]; int start ; void init(void); double noise1(double arg) ; double noise2(double vec[2]) ; double noise3(double vec[3]) ; void normalize2(double v[2]) ; void normalize3(double v[3]) ; //******************************** //* for Mersenne Twister MT19937 //******************************** unsigned long mt[mt_N]; /* the array for the state vector */ int mti ; /* mti==mt_N+1 means mt[mt_N] is not initialized */ void init_genrand(unsigned long s) ; void init_by_array(unsigned long init_key[], int key_length) ; unsigned long genrand_int32(void) ; long genrand_int31(void) ; double genrand_real1(void) ; double genrand_real2(void) ; double genrand_real3(void) ; double genrand_res53(void) ; }; #endif // !defined(AFX_PERLINNOISE_H__2A0F6681_C030_46CF_9363_B43D85BF5181__INCLUDED_)