# John Whitney tribute

**URL:** <https://discourse.processing.org/t/john-whitney-tribute/47386>\
**Category:** Gallery\
**Created:** [October 17, 2025, 8:40am UTC](https://discourse.processing.org/t/john-whitney-tribute/47386 "2025-10-17T08:40:32Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![matheplica](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/matheplica/32/21035_2.png) [@matheplica](https://discourse.processing.org/u/matheplica)\
**Post date:** [October 17, 2025, 8:40am UTC](https://discourse.processing.org/t/john-whitney-tribute/47386/1 "2025-10-17T08:40:32Z")

</div>

Hi, I coded the a part of John Whitney works : Matrix3.

 ![matrix](https://canada1.discourse-cdn.com/flex036/uploads/processingfoundation1/original/3X/b/7/b7e0431f6abdbc2de3868c8d971e27d627fa6cf8.png)

John was a pioneer of computer graphics experiments, he worked with first analog computer in 60’s, 70’s.

You can find a lot of this work on youtube.

This thread can be a place to share code, thoughts, … related to John’s work.

Enjoy !

```auto
//first triangles part of Matrix3 by John Whitney
//coded by matheplica 
//16-10-2025
//press 'g' to start
import fip.*;
PShape[] tri = new PShape[16];
float[] theta = new float[tri.length];
float[] speed = new float[tri.length];
PShader[] shade = new PShader[2];
boolean go;
void setup() {
  size(640, 480, P2D);
  shade[0] = loadShader(FIP.gaussianBlur);
  shade[1] = loadShader(FIP.edgePreservingSmooth);
  for (int i=0; i<tri.length; i++) {
    tri[i] = createShape();
    tri[i].beginShape();
    for (float j=0; j<TAU; j+=TAU/3.0) {
      float x = sin(j)*(i+1)*7;
      float y = cos(j)*(i+1)*7;
      tri[i].vertex(x, y);
      theta[i] = HALF_PI;
      speed[i] = (i+1)*0.0005;
    }
    tri[i].endShape(CLOSE);
    tri[i].disableStyle();
  }
}
void draw() {
  noStroke();
  fill(0);
  rect(0, 0, width, height);
  noFill();
  strokeWeight(2);
  strokeJoin(ROUND);
  translate(width>>1, height>>1);
  for (int i=tri.length-1; i>0; i--) {
    if (go) theta[i]-=speed[i];
    float x2 = sin(theta[i])*120;
    float y2 = cos(theta[i])*120;
    stroke(255, 0, 0, 199);
    shape(tri[i], x2, y2);
  }
  for (int i=tri.length-1; i>0; i--) {
    float x1 = sin(-theta[i])*120;
    float y1 = cos(-theta[i])*120;
    stroke(255);
    shape(tri[i], x1, y1);
  }
  for (int i=0; i<2; i++) filter(shade[i]);
}
void keyPressed() {
  if (key=='g') go =! go;
}

```

---

<div class="post-metadata">

**Author:** ![quark](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/quark/32/26_2.png) [@quark](https://discourse.processing.org/u/quark)\
**Post date:** [October 17, 2025, 11:03am UTC](https://discourse.processing.org/t/john-whitney-tribute/47386/2 "2025-10-17T11:03:00Z")

</div>

I recommend watching this animation but you will need to install the FIP library via the contribution manager and press the `g` key to start the animation.

The effect of the filters seemed to soften the lines but I think I preferred the version without using them.

Anyway I enjoyed watching the triangles move, it was quite relaxing 😴
