I like the simplicity of this one. The key line is if ((x & (y-x)) == 0). int patSize = 190; int xOffset = 30, yOffset = 30; void settings() { // to use variables within size() size(patSize+xOffset*2,patSize+yOffset*2); } void setup() { noLoop(); } void draw() { stroke(200, 20, 100); for (int y = 0; y != patSize; ++y) { for (int x = 0; x != patSize; ++x) { if ((x & (y-x)) == 0) point(x + (patSize/2) + xOffset -.5*y, y + yOffset); // -.5*y term rotates } } }