const WIDTH = 800; const HEIGHT = 600; const CELL_SIZE = 40; const NX = Math.floor(WIDTH / CELL_SIZE); const NY = Math.floor(HEIGHT / CELL_SIZE); createCanvas(WIDTH, HEIGHT); clear(0, 0, 0); console.clear(); function ngon(x, y, r, n, phase) { beginPath(); for(let i = 0; i < n+1; ++i) { let phi = TWO_PI/n*(i%n); let ox = r*Math.cos(phi + phase); let oy = -r*Math.sin(phi + phase); if(i == 0) moveTo(x+ox, y+oy); else lineTo(x+ox, y+oy); console.log(x+ox, y+oy); } closePath(); } strokeColor(rgbToString(255, 255, 255)); lineThickness(1); const RADIUS = 20; const OFFSET_X = 100; const OFFSET_Y = 100; function coordsToPosition(i, j, r) { return { x: r*i*0.866025403784, // sin(PI/3) y: -(i%2==1 ? r/2 : 0) + 1.5*r*(j-j%2) + (j%2 == 1 ? ((1+i%2)*r) : 0) }; } function coordsToPhase(i, j) { return (i+j)%2==0 ? TWO_PI - PI/6 : PI/6; } fillColor(rgbToString(255, 255, 255)); for(let j = 0; j < 10; ++j) { for(let i = 0; i < 30; ++i) { let pos = coordsToPosition(i, j, RADIUS); let phase = coordsToPhase(i, j); ngon(OFFSET_X+pos.x, OFFSET_Y+pos.y, RADIUS, 3, phase); fill(); } }
Editor je nyní spuštěn v režimu pouze pro čtení. Scripty můžete s příslušným oprávněním vytvářet a editovat z  uživatelské sekce.