/* Structure 1 Every possible pairing of these sixteen curves: ix = 1.0 - x [x^2][1.0-x^2][ix^2][1.0-ix^2] [x^3][1.0-x^3][ix^3][1.0-ix^3] [x^4][1.0-x^4][ix^4][1.0-ix^4] [x^5][1.0-x^5][ix^5][1.0-ix^5] Use the additive numeric values from each curve to set the value of a series of horizontal lines from values of white to black. Ported to p5.js by Casey Reas 14 July 2016 p5.js 0.5.2 Restored by Casey Reas <http://reas.com> 22 June 2016 Processing v.3.1.1 <http://processing.org> Implemented by Casey Reas 10 April 2004 Processing v.68 <http://processing.org> */ var x = 0.0; var numnubs = 120; var nubs = []; var dir = 1; function setup() { createCanvas(900, 360); noStroke(); fill(102); colorMode(RGB, 2.0); background(2.0, 2.0, 2.0); frameRate(30.0); noSmooth(); var pat1 = 1; var pat2 = 2; for (var i = 0; i < numnubs; i++) { nubs[i] = new Nub(0, i * 3, width, 3, pat1, pat2); pat2++; if (pat2 > 16) { pat1 = pat1 + 1; pat2 = pat1 + 1; } } } function draw() { x += (0.005 * dir); if (x >= 1.0 || x <= 0.0) { dir = dir * -1; } for (var i = 0; i < 120; i++) { nubs[i].update(x); nubs[i].display(); } } function Nub(x, y, w, h, pat1, pat2) { this.x = x; this.y = y; this.w = w; this.h = h; this.pat1 = pat1; this.pat2 = pat2; this.val = 0; this.ix = 0.2; this.update = function(n) { this.val = 0; this.ix = 1.0 - n; // Inverse of X if (this.pat1 == 1 || this.pat2 == 1) { this.val += n * n; } if (this.pat1 == 2 || pat2 == 2) { this.val += 1.0 - n * n; } if (this.pat1 == 3 || this.pat2 == 3) { this.val += this.ix * this.ix; } if (this.pat1 == 4 || this.pat2 == 4) { this.val += 1.0 - this.ix * this.ix; } if (this.pat1 == 5 || this.pat2 == 5) { this.val += n * n * n; } if (this.pat1 == 6 || this.pat2 == 6) { this.val += 1.0 - n * n * n; } if (this.pat1 == 7 || this.pat2 == 7) { this.val += this.ix * this.ix * this.ix; } if (this.pat1 == 8 || this.pat2 == 8) { this.val += 1.0 - this.ix * this.ix * this.ix; } if (this.pat1 == 9 || this.pat2 == 9) { this.val += n * n * n * n; } if (this.pat1 == 10 || this.pat2 == 10) { this.val += 1.0 - n * n * n * n; } if (this.pat1 == 11 || this.pat2 == 11) { this.val += this.ix * this.ix * this.ix * this.ix; } if (this.pat1 == 12 || this.pat2 == 12) { this.val += 1.0 - this.ix * this.ix * this.ix * this.ix; } if (this.pat1 == 13 || this.pat2 == 13) { this.val += n * n * n * n * n; } if (this.pat1 == 14 || this.pat2 == 14) { this.val += 1.0 - n * n * n * n * n; } if (this.pat1 == 15 || this.pat2 == 15) { this.val += this.ix * this.ix * this.ix * this.ix * this.ix; } if (this.pat1 == 16 || this.pat2 == 16) { this.val += 1.0 - this.ix * this.ix * this.ix * this.ix * this.ix; } } this.display = function() { fill(this.val); rect(this.x, this.y, this.w, this.h); } }