The Martin Grids

Some further explorations in a code-based response to art. Last year I stumbled across the Agnes Martin retrospective at Tate Modern. I wasn’t aware of her work at all, but one of the joys of Tate membership is encountering surprising things that you wouldn’t normally seek out. I went back again and again, and subsequently read everything I could about her. I can’t really fully explain why her stark abstraction and pale colour palette has got so under my skin, but I haven’t stopped thinking about it since. I don’t mind saying that I got seriously emotional, particularly in the room that contained The Islands.

The mathematical precision of her grid paintings clearly lend themselves well to a programmatic response, and I wanted to explore this a bit in code. As luck would have it, I recently found that the peerless Joshua Davis (who has been a massive influence on my digital life since has made his Hype for Processing tutorials in generative art available through Gumroad.

I’ll save some specific thoughts about Hype (a framework that I used to use in Flash for music-reactive visuals) for another post as I explore it further, but for now, it’s reintroduced me to Processing as a language, which will, finally, now replace Flash for me as my creative technology tool of choice. There are some barriers to entry – mostly in the translation model which is exactly what Hype sorts out for you. For this task though, I wanted to try and stay away from helpers but have a pretty stark method of producing random grids. Nothing remotely complex about any of this stuff, it’s drawing API 101. What excites me, however, is the ability to reduce the process to it’s most fundamental quality. As I’ve read more and more about Agnes Martin’s life and practise, I’ve been hugely struck by her own quest for an ordered simplicity in describing her perception of the world and how it’s translated into her art. As someone who has had a difficult couple of years, this appeals hugely to me. In fact the very basis for my finding a minor creative renaissance in myself at the moment (musically mostly, but also in my appreciation of art) has been in a careful curation of my mental environment, removing harmful things and managing the remainder into some kind of order.

Agnes Martin grid paintings
Agnes Martin, Untitled

I’d like to extend this response to Martin’s grids into a more procedural practise, humanising the lines and introducing additional elements outside the mathematical constructs which are her artistic work at it’s most reductive. As she moved through her body of work, an emotional element enters into it, mostly through the use of a muted pastel palette. It’s this aspect that I found most appealing about her. We tend to think of ordering a busy, noisy mind (whether through therapies or drugs) as a removal of those hurtful, uncontrollable emotional elements. Where as I have found, both in my own experience, and how I perceive Martin’s work, that the abstraction of that noise into an ordered form – the grid, a schedule, a structure – gives space for an honest opening up of emotional responses. And perhaps a more authentic creativity as well.

Examples of Martin grid outputs:

Martin Grid #3

Martin Grid #3

Martin Grid #5

Martin Grid #5

Gallery – 10 outputs of the Martin Grids

Code (Processing):

int pad;
boolean frame = true;
int cols;
int rows;
int gridCanvasWidth;
int gridCanvasHeight;
int tStart;
int picNum;

void setup() {
background(235, 235, 235);
pad = 10;
tStart = millis();
gridCanvasWidth = width - (pad*2);
gridCanvasHeight = height - (pad*2);


void draw() {

// draw the grid every 5 seconds
int timer = millis()-tStart;
tStart = millis();


// press S to save a png
void keyReleased(){
if(key == 's' || key == 'S')
void drawGrid() {
// function for drawing the Martin Grid on the basis of a random selection of columns and rows
cols = (int)random(2,70);
rows = (int)random(2,50);
float spacerX = (float)gridCanvasWidth/cols;
float spacerY = (float)gridCanvasHeight/rows;
float tracker = pad;
stroke(150, 150, 150);
// columns
for (int i = 1; i < cols; ++i) { tracker = pad + (i*spacerX); line(tracker, pad, tracker, height - pad); } tracker = pad; //rows for (int i = 0; i < rows-1; ++i) { tracker += spacerY; line(pad, tracker, width-pad, tracker); } if(frame == true) { stroke(20, 20, 20); rect(pad, pad, gridCanvasWidth, gridCanvasHeight); } }

About Andrew

I am a technical director, creative technologist and digital strategist who has been working in the web industry for 15 years. An early online user from the days of Prestel and BBS systems, I am a self-taught technologist and developer who has been immersed in the creative possibilities of digital technology from childhood. My career path has taken many turns, from the heady dot-com agency days, through the corporate world and the variety of experience which freelance brings. Throughout, my goal has been to help organizations and brands realise the potential that the art and science of being digital can achieve, and to help them create opportunities to better use the most important emerging medium of our time. I am a strong advocate for digital as a multi-disciplinary medium, with an enviable record in building and retaining teams, and in the importance of the creative disciplines of collaboration, vision, practicing and failing in order to push things forward.

Leave a Reply

Your email address will not be published. Required fields are marked *