public PerlinNoise2D(uint m, uint n, byte count = 4, float maxAmpl = 1) { Debug.Assert(m >= count); uint newM = _DownTo2Based(m); uint newN = _DownTo2Based(n); _scaleX = (float)newM / (float)m; _scaleY = (float)newN / (float)n; _octaves = new CoherentNoise2D[count]; uint freqX = newM / count; uint freqY = newN / count; for (uint i = 0; i < count; i++) { m = freqX * (i + 1); n = freqY * (i + 1); _octaves[i] = new CoherentNoise2D(m, n); } _amplitude = maxAmpl; }
/// <summary> /// 长宽最好为2^n+1 /// <param name="minFreq">x方向最小倍频</param> /// </summary> public PerlinNoise2D(uint m, uint n, uint minFreq, float maxAmpl = 1) { // 缩放到标准2^n minFreq = _DownTo2Based(minFreq); uint newM = _DownTo2Based(m); uint newN = _DownTo2Based(n); _scaleX = (float)newM / (float)m; _scaleY = (float)newN / (float)n; _octaves = new CoherentNoise2D[newM / minFreq]; uint freqX = minFreq; uint freqY = minFreq * newN / newM; // 不同频率的相关噪声 for (uint i = 0; i < newM / minFreq; i++) { m = freqX * (i + 1); n = freqY * (i + 1); _octaves[i] = new CoherentNoise2D(m, n); } _amplitude = maxAmpl; }
/// <summary> /// �������Ϊ2^n+1 /// <param name="minFreq">x������С��Ƶ</param> /// </summary> public PerlinNoise2D(uint m, uint n, uint minFreq, float maxAmpl = 1) { // ���ŵ���2^n minFreq = _DownTo2Based(minFreq); uint newM = _DownTo2Based(m); uint newN = _DownTo2Based(n); _scaleX = (float)newM / (float)m; _scaleY = (float)newN / (float)n; _octaves = new CoherentNoise2D[newM / minFreq]; uint freqX = minFreq; uint freqY = minFreq * newN / newM; // ��ͬƵ�ʵ�������� for (uint i = 0; i < newM / minFreq; i++) { m = freqX * (i + 1); n = freqY * (i + 1); _octaves[i] = new CoherentNoise2D(m, n); } _amplitude = maxAmpl; }