String [] letters = { "L", "A", "N", "G", "U", "A", "G", "E" }; String logicalnot = "!="; float[] letrx = new float[letters.length]; float[] letry0 = new float[letters.length]; float[] letry1 = new float[letters.length]; float[] letry2 = new float[letters.length]; float[] letry3 = new float[letters.length]; float[] letry4 = new float[letters.length]; float lognotx; float lognoty; float textHeight; PFont f; float speed = 2.0; float offset = .05; void setup() { size(300, 300); smooth(); f = createFont("serif", 60); textFont(f); textHeight = textAscent() + textDescent(); for (int i=0; i < letters.length; i++) { if (i == 0) { letrx[i] = width + 20; letry0[i] = height + 20 + textHeight; letry1[i] = height + 20 + textHeight * 2; letry2[i] = height + 20 + textHeight * 3; letry3[i] = height + 20 + textHeight * 4; letry4[i] = height + 20 + textHeight * 5; } else { letrx[i] = letrx[i-1] + textWidth(letters[i-1]) + textWidth(logicalnot); letry0[i] = letry0[i-1] + textHeight*2; letry1[i] = letry1[i-1] + textHeight*2; letry2[i] = letry2[i-1] + textHeight*2; letry3[i] = letry3[i-1] + textHeight*2; letry4[i] = letry4[i-1] + textHeight*2; } } } void draw() { background(255); for (int i=0; i < letters.length; i++) { // vertical 0 textAlign(CENTER); fill(205); text(letters[i], 0, letry0[i]); text(logicalnot, 0, letry0[i] + textHeight); letry0[i] -= speed; if (letry0[i] + textHeight < -textHeight*2 -10) { letry0[i] = letry0[(i + letters.length -1) % letters.length] + textHeight*2; } // verticanl 1 text(letters[i], width*.25, letry1[i]); text(logicalnot, width*.25, letry1[i] + textHeight); letry1[i] -= speed*1.05; if (letry1[i] + textHeight + offset < -textHeight*2 -10) { letry1[i] = letry1[(i + letters.length -1) % letters.length] + textHeight*2; } // vertical 2 text(letters[i], width*.5, letry2[i]); text(logicalnot, width*.5, letry2[i] + textHeight); letry2[i] -= speed*1.1; if (letry2[i] + textHeight + offset < -textHeight*2 -10) { letry2[i] = letry2[(i + letters.length -1) % letters.length] + textHeight*2; } // vertical 3 text(letters[i], width*.75, letry3[i]); text(logicalnot, width*.75, letry3[i] + textHeight); letry3[i] -= speed*1.15; if (letry3[i] + textHeight + offset < -textHeight*2 -10) { letry3[i] = letry3[(i + letters.length -1) % letters.length] + textHeight*2; } // vertical 4 text(letters[i], width, letry4[i]); text(logicalnot, width, letry4[i] + textHeight); letry4[i] -= speed*1.2; if (letry4[i] + textHeight + offset < -textHeight*2 -10) { letry4[i] = letry4[(i + letters.length -1) % letters.length] + textHeight*2; } // horizontal textAlign(LEFT); fill(0); text(letters[i], letrx[i], height/2); text(logicalnot, letrx[i] + textWidth(letters[i]), height/2); letrx[i] -= speed*.9; if (letrx[i] + textWidth(letters[i]) < -textWidth(logicalnot) + -textWidth(letters[i]) + -10) { letrx[i] = letrx[(i + letters.length -1) % letters.length] + textWidth(letters[(i + letters.length -1) % letters.length]) + textWidth(logicalnot); } } }