コード
import generativedesign.*;
import processing.pdf.*;
import java.util.Calendar;
boolean savePDF = false;
int colorCount = 20;
float[] hue = new float[colorCount];
float[] sat = new float[colorCount];
float[] bri = new float[colorCount];
void setup() {
size(960, 540);
colorMode(HSB, 360, 100, 100);
noStroke();
}
void draw() {
if (savePDF) {
beginRecord(PDF, timestamp()+".pdf");
noStroke();
colorMode(HSB, 360, 100, 100, 100);
}
float temp = 0;
for (int i = 0; i < colorCount; i++) {
if (i%3 == 0) {
temp = random(360);
hue[i] = temp;
sat[i] = 100;
bri[i] = random(100);
} else if (i%3 == 1) {
hue[i] = (temp + 120)%360;
sat[i] = random(100);
bri[i] = 100;
} else {
hue[i] = (temp + 240)%360;
sat[i] = random(100);
bri[i] = 100;
}
}
int counter = 0;
int rowCount = (int)random(5, 40);
float rowHeight = (float)height / (float)rowCount;
for (int i = 0; i < rowCount; i++) {
int partCount = i+1;
float[] parts = new float[0];
for (int j = 0; j < partCount; j++) {
if (random(1) < 0.075) {
int fragments = (int) random(2, 10);
partCount = partCount + fragments;
for (int k = 0; k < fragments; k++) {
parts = append(parts, random(2));
}
} else {
parts = append(parts, random(2, 20));
}
}
float sumPartsTotal = 0;
for (int j = 0; j < partCount; j++) {
sumPartsTotal += parts[j];
}
float sumPartsNow = 0;
for (int j = 0; j < parts.length; j++) {
int index = counter%colorCount;
color c = color(hue[index], sat[index], bri[index]);
fill(c);
sumPartsNow += parts[j];
float x = map(sumPartsNow, 0, sumPartsTotal, 0, width);
float y = rowHeight*i;
float w = map(parts[j], 0, sumPartsTotal, 0, -width);
float h = rowHeight;
rect(x, y, w, h);
counter++;
}
}
if (savePDF) {
savePDF = false;
endRecord();
}
noLoop();
}
void mousePressed() {
redraw();
}
void keyReleased() {
if (key == 's' || key == 'S') saveFrame(timestamp()+"_##.png");
if (key == 'p' || key == 'P') savePDF = true;
if (key == 'c' || key == 'C') {
color[] colors = new color[colorCount];
for (int i=0; i<colorCount; i++) {
colors[i] = color(hue[i], sat[i], bri[i]);
}
GenerativeDesign.saveASE(this, colors, timestamp()+".ase");
}
}
String timestamp() {
Calendar now = Calendar.getInstance();
return String.format("%1$ty%1$tm%1$td_%1$tH%1$tM%1$tS", now);
}
リファレンス