/* built with Studio Sketchpad: * https://sketchpad.cc * * observe the evolution of this sketch: * https://studio.sketchpad.cc/sp/pad/view/ro.WeasXAM039e/rev.5 * * authors: * GoToLoop * license (unless otherwise specified): * creative commons attribution-share alike 3.0 license. * https://creativecommons.org/licenses/by-sa/3.0/ */ /** * Conglomerate of Points (v2.01) * Janosch & GoToLoop (2016-Feb-01) * * forum.Processing.org/two/discussion/14709/simple-p3-sketch-to-p5-js * studio.ProcessingTogether.com/sp/pad/export/ro.9lMOG-RZX8JDk * * p5js.ProcessingTogether.com/sp/pad/export/ro.CYuAGs4xyhzhKu * CodePen.io/anon/pen/ZQjQmK?editors=0010#0 */ static final float EASE = .07; static final int QTY = 10, DIAM = 10, FAR = 0xFF, NEAR = 20, AWAY = 150; final PVector[] points = new PVector[QTY], tPoints = new PVector[QTY]; void setup() { size(1000, 650, 1/2 != 1/2.? FX2D : JAVA2D); smooth(4); frameRate(60); strokeWeight(.5); colorMode(RGB, FAR); ellipseMode(CENTER); for (int i = 0; i < QTY; ++i) { points[i] = new PVector(random(width), random(height)); tPoints[i] = new PVector(random(width), random(height)); } } void draw() { background(243, 239, 232); for (int i = 0; i < QTY; ++i) { final float xdist = tPoints[i].x - points[i].x; final float ydist = tPoints[i].y - points[i].y; final float x = points[i].x += EASE * .5 * xdist; final float y = points[i].y += EASE * .5 * ydist; for (int j = i + 1; j < QTY; ++j) { final float dst = dist(x, y, points[j].x, points[j].y); if (dst < FAR) { stroke(205, 106, 104, FAR - dst); line(x, y, points[j].x, points[j].y); } } final float distance = .5 * (xdist*xdist + ydist*ydist); noStroke(); fill(205, 106, 104, 200 - distance*EASE); ellipse(x, y, DIAM, DIAM); if (distance <= NEAR) { points[i].set(tPoints[i]); tPoints[i].x = mouseX + random(-AWAY, AWAY); tPoints[i].y = mouseY + random(-AWAY, AWAY); } } }