var m, flou, m1, m2, m3, mt1, mt2, mt3, t0, t1, t2, t3, f0, f1, f2, f3, epsilon;
var background_controller;
createCanvas(windowWidth, windowHeight);
colorMode(HSB, 360, 255, 255, 255);
gui.add(acDef, 'hue' , 0, 360 ).listen();
gui.add(acDef, 'ncycles' , 1, 5 ).step(1).listen();
gui.add(acDef, 'max_hue_offset' , 0, 180 ).listen();
gui.add(acDef, 'symmetry' ).listen();
var controller = gui.add(acDef, 'black_background').listen();
controller.onFinishChange(function(value) {initiate();});
var controllerbw = gui.add(acDef, 'blackandwhite' ).listen();
controllerbw.onFinishChange(function(value) {initiate();});
var controllerfv = gui.add(acDef, 'functions_variation',.01,.3 ).listen();
controllerfv.onFinishChange(function(value) {initiate();});
gui.add(acDef,'randomize');
var controllerA = gui.add(acDef, 'text');
controllerA.onFinishChange(function(value) {initpimg();initiate();});
pimg = createGraphics(w, h);
pimg.text("WORD",width/5,height/2);
m1 = random(1) > .5 ? random(.1, 3) : -random(.1, 3);
m2 = random(1) > .5 ? random(.1, 3) : -random(.1, 3);
m3 = random(1) > .5 ? random(.1, 3) : -random(.1, 3);
f0=random(-.0000005, .0000005);
epsilon = random(.0001, 0.01);
var bril=acDef.black_background?255:100;
for (var i=0; i<ncycles; i++) {
if (acDef.blackandwhite) {
cycles[i]=new Cycle(0, 0,bril+5*i, 8);
cycles[i]=new Cycle(acDef.hue+int(random(-acDef.max_hue_offset, acDef.max_hue_offset)), 255, bril+5*i, 8);
for (var i=0; i<ncycles; i++) {
} else if (key == 's' || key == 'S') {
} else if (key == 'r' || key == 'R') {
} else if (key == 'y' || key == 'Y') {
} else if (key == 'k' || key == 'K') {
blackandwhite=!blackandwhite;
for (var i=0; i<ncycles; i++) {
cycles[i].sat =blackandwhite?random(50,200): random(150,255);
function mouseDragged() {
if(mouseX<w-1.2*gui.width ||mouseY>1.2*gui.width){
var d = dist(mouseX, mouseY, pmouseX, pmouseY);
for (var i = 0; i < d; i++) {
pimg.point(pmouseX + int(i * (mouseX - pmouseX) / d), pmouseY + int(i * (mouseY - pmouseY) / d));
function mouseWheel(event) {
flou += .001 * event.delta;
function mouseReleased() {
pimg.pixels=pixels.slice();
for (var i = 0; i < cycles.length; i++) {
else if(mouseX<w-1.2*gui.width ||mouseY>1.2*gui.width)initiate();
save("svimg" + day() + "_" + month() + "_" + hour() + "_" + minute() + "_" + second() + ".png");
function getImgPixelBrightness(x, y, img) {
var pos = 4 * (floor(x) + floor(y) * img.width);
var loadJS = function(filename){
var script = document.createElement("script");
script.setAttribute("type","text/javascript");
script.setAttribute("src", filename);
document.getElementsByTagName("head")[0].appendChild(script);
loadJS("https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.5/dat.gui.min.js");
document.oncontextmenu = function() { return false; }
document.onmousedown = function() { return false; }