{"url":"https://api.github.com/gists/539589","forks_url":"https://api.github.com/gists/539589/forks","commits_url":"https://api.github.com/gists/539589/commits","id":"539589","node_id":"MDQ6R2lzdDUzOTU4OQ==","git_pull_url":"https://gist.github.com/539589.git","git_push_url":"https://gist.github.com/539589.git","html_url":"https://gist.github.com/mbostock/539589","files":{"perlin-worker.js":{"filename":"perlin-worker.js","type":"text/javascript","language":"JavaScript","raw_url":"https://gist.githubusercontent.com/mbostock/539589/raw/213f78691a63f5dde75ed605047972c80d22c6e0/perlin-worker.js","size":3290,"truncated":false,"content":"onmessage = function(e) {\n  var data = e.data.data = [],\n      n = Math.pow(2, 7 - e.data.zoom),\n      x0 = e.data.column * n,\n      y0 = e.data.row * n,\n      w = e.data.size.x,\n      h = e.data.size.y;\n\n  for (var y = 0, i = 0; y < h; y++) {\n    for (var x = 0; x < w; x++) {\n      data[i++] =\n      data[i++] =\n      data[i++] = 128 * (noise(x0 + x * n / w, y0 + y * n / h, 0) + 1);\n      data[i++] = 255;\n    }\n  }\n\n  postMessage(e.data);\n}\n\n// Derived from http://mrl.nyu.edu/~perlin/noise/\n// Copyright (c) 2002 Ken Perlin\n\nfunction noise(x, y, z) {\n  var X = Math.floor(x) & 255,                       // FIND UNIT CUBE THAT\n      Y = Math.floor(y) & 255,                       // CONTAINS POINT.\n      Z = Math.floor(z) & 255;\n  x -= Math.floor(x);                                // FIND RELATIVE X,Y,Z\n  y -= Math.floor(y);                                // OF POINT IN CUBE.\n  z -= Math.floor(z);\n  var u = fade(x),                                   // COMPUTE FADE CURVES\n      v = fade(y),                                   // FOR EACH OF X,Y,Z.\n      w = fade(z);\n  var A = p[X  ]+Y, AA = p[A]+Z, AB = p[A+1]+Z,      // HASH COORDINATES OF\n      B = p[X+1]+Y, BA = p[B]+Z, BB = p[B+1]+Z;      // THE 8 CUBE CORNERS,\n\n  return lerp(w, lerp(v, lerp(u, grad(p[AA  ], x  , y  , z   ),  // AND ADD\n                                 grad(p[BA  ], x-1, y  , z   )), // BLENDED\n                         lerp(u, grad(p[AB  ], x  , y-1, z   ),  // RESULTS\n                                 grad(p[BB  ], x-1, y-1, z   ))),// FROM  8\n                 lerp(v, lerp(u, grad(p[AA+1], x  , y  , z-1 ),  // CORNERS\n                                 grad(p[BA+1], x-1, y  , z-1 )), // OF CUBE\n                         lerp(u, grad(p[AB+1], x  , y-1, z-1 ),\n                                 grad(p[BB+1], x-1, y-1, z-1 ))));\n}\n\nfunction fade(t) { return t * t * t * (t * (t * 6 - 15) + 10); }\nfunction lerp(t, a, b) { return a + t * (b - a); }\nfunction grad(hash, x, y, z) {\n  var h = hash & 15;                      // CONVERT LO 4 BITS OF HASH CODE\n  var u = h<8 ? x : y,                    // INTO 12 GRADIENT DIRECTIONS.\n      v = h<4 ? y : h==12||h==14 ? x : z;\n  return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v);\n}\nvar p = [], permutation = [151,160,137,91,90,15,\n   131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,\n   190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,\n   88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,\n   77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,\n   102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,\n   135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,\n   5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,\n   223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,\n   129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,\n   251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,\n   49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,\n   138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n   ];\nfor (var i=0; i < 256 ; i++) p[256+i] = p[i] = permutation[i];\n","encoding":"utf-8"}},"public":true,"created_at":"2010-08-20T04:19:29Z","updated_at":"2015-09-05T19:35:02Z","description":"Polymaps / Procedural Perlin","comments":1,"user":null,"comments_enabled":true,"comments_url":"https://api.github.com/gists/539589/comments","owner":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"forks":[],"history":[{"user":null,"version":"ba2597bda34cdf4b4698f166a960e6a91d9a212f","committed_at":"2010-08-20T04:19:29Z","change_status":{"total":69,"additions":69,"deletions":0},"url":"https://api.github.com/gists/539589/ba2597bda34cdf4b4698f166a960e6a91d9a212f"}],"truncated":false}