Reach

FOR INTERACTIVE SKETCH, CLICK HERE.
^the program runs too slow on this page…

Reach series, 2018-current.
Rendered with code in Processing.

Source Code (slow load on mobile)
ArrayList blips = new ArrayList();
 float rows = .5;
 float cols = 50;
 float segLength = 2;
 float numBlips = (rows+1)*(cols+1);
 float maxBlips = numBlips;
 float xplot;
 float yplot;
 float xmargin;
 float ymargin;
 float xMargin = 0;
 float yMargin = 0;
 void setup() {
   size(320, 500);
   xmargin = xMargin;
   ymargin = yMargin;
   for (int j = 0; j <= cols; j++) {     for (int i = 0; i <= rows; i++) {       xplot = i((width-(xmargin2))/rows);       yplot = j((height-(ymargin2))/cols);       if (xplot>width)xplot=0;
       blips.add(new Blip((int((rows+1)*j)+(i+1)), xplot+xmargin, yplot+ymargin));
     }
   }
 }
 void draw() {
   background(255);
   strokeWeight(1);
   stroke(0);
   for (int i = 0; i < blips.size(); i++) { 
     Blip blip = blips.get(i);        
     blip.display();
   }
 }
 class Blip {
   int numSegments = 200; 
   float[] x = new float[numSegments];
   float[] y = new float[numSegments];
   float[] angle = new float[numSegments];
   float targetX, targetY;
   int id;
   float startx = random(0, width);
   float starty = random(0, height);  
   float d;
 Blip(int idint, float xPlot, float yPlot) {
     id = idint;
     xplot = xPlot;
     yplot = yPlot;
     x[x.length-1] = xplot;   // Set base x-coordinate
     y[x.length-1] = yplot;  // Set base y-coordinate
     //reOrder();
   }
   void reOrder() {
     id-=1;
   }  
   void display() { 
     reachSegment(0, mouseX, mouseY);
     for (int i=1; i=1; i--) {
       positionSegment(i, i-1);
     } 
     for (int i=0; i<x.length; i++) {
       segment(x[i], y[i], angle[i]);
     }
   }
 void reachSegment(int i, float xin, float yin) {
     float dx = xin - x[i];
     float dy = yin - y[i];
     angle[i] = atan2(dy, dx);  
     targetX = xin - cos(angle[i]) * segLength;
     targetY = yin - sin(angle[i]) * segLength;
   }
 void positionSegment(int a, int b) {
     x[b] = x[a] + cos(angle[a]) * segLength;
     y[b] = y[a] + sin(angle[a]) * segLength;
   }
 void segment(float x, float y, float a) {
     pushMatrix();
     translate(x, y);   
     rotate(a);
     line(0, 0, segLength, 0);
     popMatrix();
   }
 }

Seriously, don’t open the code on your phone.