{"id":"37fe84f2128e7899","slug":"lightning","trashed":false,"description":"","likes":8,"publish_level":"public","forks":0,"fork_of":{"id":"b3ad93b0b880e329","slug":"silk","title":"Silk","owner":{"id":"a0f089998233f3de","avatar_url":"https://avatars.observableusercontent.com/avatar/47eb3610746e88cd3ab7c308d8db187ae1345ffb3726fb5f8b10c709de8d8c78","login":"josephg","name":"Seph Gentle","bio":"","home_url":"https://josephg.com","type":"team","tier":"starter_2024"},"version":103},"has_importers":false,"update_time":"2018-12-25T00:21:13.715Z","first_public_version":null,"paused_version":null,"publish_time":"2018-12-24T22:43:54.475Z","publish_version":243,"latest_version":243,"thumbnail":"18ff4d5befe6d1efb80776018f9f46f8bd9b9ff7992b655f001ed19e0444cf50","default_thumbnail":"18ff4d5befe6d1efb80776018f9f46f8bd9b9ff7992b655f001ed19e0444cf50","roles":[],"sharing":null,"owner":{"id":"a0f089998233f3de","avatar_url":"https://avatars.observableusercontent.com/avatar/47eb3610746e88cd3ab7c308d8db187ae1345ffb3726fb5f8b10c709de8d8c78","login":"josephg","name":"Seph Gentle","bio":"","home_url":"https://josephg.com","type":"team","tier":"starter_2024"},"creator":{"id":"227a0e683597b0ad","avatar_url":"https://avatars.observableusercontent.com/avatar/47eb3610746e88cd3ab7c308d8db187ae1345ffb3726fb5f8b10c709de8d8c78","login":"josephg","name":"Seph Gentle","bio":"","home_url":"https://josephg.com","tier":"public"},"authors":[{"id":"227a0e683597b0ad","avatar_url":"https://avatars.observableusercontent.com/avatar/47eb3610746e88cd3ab7c308d8db187ae1345ffb3726fb5f8b10c709de8d8c78","name":"Seph Gentle","login":"josephg","bio":"","home_url":"https://josephg.com","tier":"public","approved":true,"description":""}],"collections":[],"files":[],"comments":[],"commenting_lock":null,"suggestion_from":null,"suggestions_to":[],"version":243,"title":"Lightning","license":null,"copyright":"","nodes":[{"id":0,"value":"md`# Lightning`","pinned":false,"mode":"js","data":null,"name":null},{"id":10,"value":"chart = chartOf(paths, {watermark: true, optimize:true, name:'lightning'})","pinned":false,"mode":"js","data":null,"name":null},{"id":28,"value":"viewof seed = html`<input type=range min=0 max=1000 step=1 value=300>`","pinned":false,"mode":"js","data":null,"name":null},{"id":65,"value":"viewof periodx = html`<input type=range min=0 max=1 step=0.0001 value=0.001>`","pinned":false,"mode":"js","data":null,"name":null},{"id":148,"value":"viewof periody = html`<input type=range min=0 max=1 step=0.001 value=0.5>`","pinned":false,"mode":"js","data":null,"name":null},{"id":164,"value":"viewof xdamp = html`<input type=range min=0 max=1 step=0.001 value=0.03>`","pinned":false,"mode":"js","data":null,"name":null},{"id":54,"value":"viewof iter = html`<input type=range min=0 max=1000 step=5 value=500>`","pinned":false,"mode":"js","data":null,"name":null},{"id":188,"value":"viewof scale = html`<input type=range min=0.5 max=10 step=0.05 value=1>`","pinned":false,"mode":"js","data":null,"name":null},{"id":173,"value":"viewof centre = html`<input type=range min=0 max=500 step=1 value=50>`","pinned":false,"mode":"js","data":null,"name":null},{"id":81,"value":"viewof num = html`<input type=range min=0 max=500 step=10 value=50>`","pinned":false,"mode":"js","data":null,"name":null},{"id":100,"value":"viewof rotmul = html`<input type=range min=0 max=10 step=0.1 value=0.5>`","pinned":false,"mode":"js","data":null,"name":null},{"id":234,"value":"viewof xmul = html`<input type=range min=-4 max=4 step=0.01 value=1>`","pinned":false,"mode":"js","data":null,"name":null},{"id":229,"value":"viewof offx = html`<input type=range min=-500 max=500 step=1 value=0>`","pinned":false,"mode":"js","data":null,"name":null},{"id":231,"value":"viewof offy = html`<input type=range min=-500 max=500 step=1 value=0>`","pinned":false,"mode":"js","data":null,"name":null},{"id":4,"value":"paths = {\n  noise.seed(seed)\n  const TAU = Math.PI * 2\n\n  const PERIODX = periodx\n  const PERIODY = periody\n  const particles = []\n  const NUM=num\n  const ITER=iter\n  const ROTMULT = rotmul\n  const SCALE = scale\n\n  for (let i = 0; i < NUM; i++) {\n    particles.push({\n      x: centre,//(i/NUM * W - W/2) * 0.8,//Math.random() * W,\n      // y: 0,// + Math.random() * 50,\n      a: Math.PI * 2 * i / NUM,\n    })\n  }\n\n  const abs = x => x < 0 ? -x : x\n\n  const paths = particles.map(initial => {\n    let pa = []\n\n    let p = {x:initial.x, a:initial.a}\n    for (let i = 0; i < ITER; i++) {\n      const n = noise.simplex2(p.x * PERIODX, Math.sin(p.a) * PERIODY) * ROTMULT\n      p.x += xmul * Math.cos(n)\n      p.a += Math.sin(n) * xdamp\n\n      pa.push([\n        Math.sin(p.a + Math.PI / 2) * p.x * SCALE + offx,\n        Math.cos(p.a + Math.PI / 2) * p.x * SCALE + offy\n      ])\n    }\n\n    return pa\n  })\n\n\n  return paths\n}","pinned":true,"mode":"js","data":null,"name":null},{"id":7,"value":"import {W, H, chartOf, lerp, download} from '@josephg/plotter-sketchpad'","pinned":false,"mode":"js","data":null,"name":null},{"id":40,"value":"noise = require('https://bundle.run/simplenoise@1.0.1')","pinned":false,"mode":"js","data":null,"name":null}],"resolutions":[],"schedule":null,"last_view_time":null}