• API
• FAQ
• Tools
• Archive
daily pastebin goal
84%
SHARE
TWEET

# Untitled

a guest May 23rd, 2018 128 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1.
2. /**********************************************************************************/
3. /**********************************************************************************/
4.
5. /*
6.  * A speed-improved perlin and simplex noise algorithms for 2D.
7.  *
8.  * Based on example code by Stefan Gustavson (stegu@itn.liu.se).
9.  * Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).
10.  * Better rank ordering method by Stefan Gustavson in 2012.
11.  * Converted to Javascript by Joseph Gentle.
12.  *
13.  * Version 2012-03-09
14.  *
15.  * This code was placed in the public domain by its original author,
16.  * Stefan Gustavson. You may use it as you see fit, but
18.  *
19.  */
20.
21. (function(global){
22.   var module = global.Noise = {};
23.
24.   function Grad(x, y, z) {
25.     this.x = x; this.y = y; this.z = z;
26.   }
27.
28.   Grad.prototype.dot2 = function(x, y) {
29.     return this.x*x + this.y*y;
30.   };
31.
32.   Grad.prototype.dot3 = function(x, y, z) {
33.     return this.x*x + this.y*y + this.z*z;
34.   };
35.
39.
40.   var p = [151,160,137,91,90,15,
41.   131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,
42.   190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,
43.   88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,
44.   77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,
45.   102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,
46.   135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,
47.   5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,
48.   223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,
49.   129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,
50.   251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,
51.   49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,
52.   138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180];
53.   // To remove the need for index wrapping, double the permutation table length
54.   var perm = new Array(512);
55.   var gradP = new Array(512);
56.
57.   // This isn't a very good seeding function, but it works ok. It supports 2^16
58.   // different seed values. Write something better if you need more seeds.
59.   module.seed = function(seed) {
60.     if(seed > 0 && seed < 1) {
61.       // Scale the seed out
62.       seed *= 65536;
63.     }
64.
65.     seed = Math.floor(seed);
66.     if(seed < 256) {
67.       seed |= seed << 8;
68.     }
69.
70.     for(var i = 0; i < 256; i++) {
71.       var v;
72.       if (i & 1) {
73.         v = p[i] ^ (seed & 255);
74.       } else {
75.         v = p[i] ^ ((seed>>8) & 255);
76.       }
77.
78.       perm[i] = perm[i + 256] = v;
80.     }
81.   };
82.
83.   module.seed(Date.now());
84.   //module.seed(0);
85.
86.   /*
87.   for(var i=0; i<256; i++) {
88.     perm[i] = perm[i + 256] = p[i];
90.   }*/
91.
92.   // Skewing and unskewing factors for 2, 3, and 4 dimensions
93.   var F2 = 0.5*(Math.sqrt(3)-1);
94.   var G2 = (3-Math.sqrt(3))/6;
95.
96.   var F3 = 1/3;
97.   var G3 = 1/6;
98.
99.   // 2D simplex noise
100.   module.simplex2 = function(xin, yin) {
101.     var n0, n1, n2; // Noise contributions from the three corners
102.     // Skew the input space to determine which simplex cell we're in
103.     var s = (xin+yin)*F2; // Hairy factor for 2D
104.     var i = Math.floor(xin+s);
105.     var j = Math.floor(yin+s);
106.     var t = (i+j)*G2;
107.     var x0 = xin-i+t; // The x,y distances from the cell origin, unskewed.
108.     var y0 = yin-j+t;
109.     // For the 2D case, the simplex shape is an equilateral triangle.
110.     // Determine which simplex we are in.
111.     var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords
112.     if(x0>y0) { // lower triangle, XY order: (0,0)->(1,0)->(1,1)
113.       i1=1; j1=0;
114.     } else {    // upper triangle, YX order: (0,0)->(0,1)->(1,1)
115.       i1=0; j1=1;
116.     }
117.     // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and
118.     // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where
119.     // c = (3-sqrt(3))/6
120.     var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords
121.     var y1 = y0 - j1 + G2;
122.     var x2 = x0 - 1 + 2 * G2; // Offsets for last corner in (x,y) unskewed coords
123.     var y2 = y0 - 1 + 2 * G2;
124.     // Work out the hashed gradient indices of the three simplex corners
125.     i &= 255;
126.     j &= 255;
130.     // Calculate the contribution from the three corners
131.     var t0 = 0.5 - x0*x0-y0*y0;
132.     if(t0<0) {
133.       n0 = 0;
134.     } else {
135.       t0 *= t0;
136.       n0 = t0 * t0 * gi0.dot2(x0, y0);  // (x,y) of grad3 used for 2D gradient
137.     }
138.     var t1 = 0.5 - x1*x1-y1*y1;
139.     if(t1<0) {
140.       n1 = 0;
141.     } else {
142.       t1 *= t1;
143.       n1 = t1 * t1 * gi1.dot2(x1, y1);
144.     }
145.     var t2 = 0.5 - x2*x2-y2*y2;
146.     if(t2<0) {
147.       n2 = 0;
148.     } else {
149.       t2 *= t2;
150.       n2 = t2 * t2 * gi2.dot2(x2, y2);
151.     }
152.     // Add contributions from each corner to get the final noise value.
153.     // The result is scaled to return values in the interval [-1,1].
154.     return 70 * (n0 + n1 + n2);
155.   };
156.
157.
158.
159. })(this);
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top