/* built with Studio Sketchpad: * https://sketchpad.cc * * observe the evolution of this sketch: * https://studio.sketchpad.cc/sp/pad/view/ro.YGqQFSiIX7v/rev.16 * * authors: * GoToLoop * license (unless otherwise specified): * creative commons attribution-share alike 3.0 license. * https://creativecommons.org/licenses/by-sa/3.0/ */ /** * Moving Dots (v2.27) * by Josem.93 (2013/Aug) * mod GoToLoop * * http://forum.processing.org/topic/interaction-among-objects-in-an-array * http://forum.processing.org/topic/gradual-movement-within-a-for-loop * * http://studio.processingtogether.com/sp/pad/export/ro.9s0026dE7B8v-/latest */ final static int NUM = 30, FPS = 60; final static Dot[] dots = new Dot[NUM]; boolean isPaused; void setup() { size(800, 600); frameRate(FPS); noSmooth(); stroke(Dot.COLOUR); fill(Dot.COLOUR); for (int i = 0; i != NUM; dots[i++] = new Dot()); } void draw() { background(-1); for (int i = 0; i != NUM; connectPoints(i++)) dots[i].script(); } void mousePressed() { if (isPaused = !isPaused) noLoop(); else loop(); } void keyTyped() { mousePressed(); } final static void connectPoints(int i) { for (int z = i; ++z != NUM;) if ( dots[i].isNear(dots[z]) ) dots[i].drawLine(dots[z]); } class Dot { final static short DIM = 5, MIN_DIST = 30, MAX_SPD = 5; final static color COLOUR = 0100; float x, y; float spx = random(-MAX_SPD, MAX_SPD); float spy = random(-MAX_SPD, MAX_SPD); Dot() { x = width>>1; y = height>>1; } void script() { move(); display(); } void move() { if ((x += spx) > width | x < 0) spx *= -1; if ((y += spy) > height | y < 0) spy *= -1; } void display() { ellipse(x, y, DIM, DIM); } boolean isNear(Dot other) { //return dist(x, y, other.x, other.y) < MIN_DIST; return sq(other.x - x) + sq(other.y - y) < MIN_DIST*MIN_DIST; //return abs(other.x - x) < MIN_DIST && abs(other.y - y) < MIN_DIST; } void drawLine(Dot other) { line(x, y, other.x, other.y); } }