Alex Wolfe | Gauntlet | Frieder Nake
import processing.opengl.*;
/*Alex Wolfe | Gauntlet*/
//Globals, adjust to edit nitpicky params
//Circles
int numCirc = 4;
int circMax = 100;
int circMin = 10;
//GridLines
int minRowSpace = 50;
int maxRowSpace = 100;
int minColSpace = 30;
int maxColSpace;
int minCols = 8;
int maxCols = 20;
int numrows, numcols;
int linewaver = 8;
int[] colSpace;
boolean[][] gridCheck;
//Lines
int minLines = 10;
int maxLines = 20;
RowLine[] grid;
void setup() {
size(600, 600, P2D);
background(255);
smooth();
strokeWeight(0.5);
strokeCap(ROUND);
noFill();
stroke(0);
//init colSpace grid
int j =0;
numcols = int(random(minCols, maxCols));
maxColSpace = width/numcols;
colSpace = new int[numcols];
for (int i=0; i<numcols-1; i++) {
colSpace[i] = j;
if (j<width) {
j = j+int(random(minColSpace, maxColSpace));
}
else {
j = j+int(random(min(minColSpace, width-j), max(minColSpace, width-j)));
}
}
colSpace[numcols-1] = width;
/*********init***************/
initGrid();
drawCircles();
for (int i=0; i<grid.length; i++) {
grid[i].drawLine();
}
gridCheck = new boolean[numrows][numcols];
drawLines();
/************DeBug************/
println("numrows = " + numrows + " numcols =" + numcols);
println("colSpace array");
for (int k = 0; k<colSpace.length; k++)
print(colSpace[k] + " ");
println();
println();
/* for(int i=0; i<grid.length; i++){
for( j=0; j<numcols; j++){
print("(" + grid[i].segPoints[j].x + ", " + grid[i].segPoints[j].y + " ), ");
}
println(" /" + i);*/
/****************************/
}
void mouseClicked() {
background(255);
initGrid();
numCirc = int(random(3, 7));
drawCircles();
for (int i=0; i<grid.length; i++) {
grid[i].drawLine();
}
drawLines();
}
void draw() {
}
void initGrid() {
int y = int(random(minRowSpace, maxRowSpace));
numrows = int(random(8, 12));
grid = new RowLine[numrows];
grid[0] = new RowLine(0);
for (int i=1; i<numrows-1; i++) {
grid[i] = new RowLine(y);
if (y<height) {
y = y+int(random(minRowSpace, maxRowSpace));
}
else {
y = y+int(random(min(minRowSpace, height-y), max(maxColSpace, height-y)));
}
}
grid[numrows-1] = new RowLine(height);
}
void drawLines() {
float flip;
for (int col=0; col<numcols-1; col++) {
for (int row=0; row<numrows-1; row++) {
flip = random(14);
if (flip <4)
drawVertLines(row, col);
else if (flip <8)
drawCrazyLines(row, col);
}
}
}
void drawCrazyLines(int row, int col)
{
int numLines = int(random(minLines, maxLines));
float p1x = grid[row].segPoints[col].x;
float p1y = grid[row].segPoints[col].y;
float p2x = grid[row].segPoints[col+1].x;
float p2y = grid[row].segPoints[col+1].y;
float p3x = grid[row+1].segPoints[col].x;
float p3y = grid[row+1].segPoints[col].y;
float p4x = grid[row+1].segPoints[col+1].x;
float p4y = grid[row+1].segPoints[col+1].y;
float slope1 = (p2y-p1y)/(p2x-p1x);
float slope2 = (p3y-p4y)/(p3x-p4x);
for (int i=0; i<numLines; i++) {
float x1= random(p1x, p2x);
float x2= random(p1x, p2x);
stroke(0);
line(x1, (slope1*(x1-p1x)+p1y), x2, slope2*(x2-p3x)+p3y);
}
}
void drawVertLines(int row, int col) {
int numLines = int(random(minLines, maxLines));
float p1x = grid[row].segPoints[col].x;
float p1y = grid[row].segPoints[col].y;
float p2x = grid[row].segPoints[col+1].x;
float p2y = grid[row].segPoints[col+1].y;
float p3x = grid[row+1].segPoints[col].x;
float p3y = grid[row+1].segPoints[col].y;
float p4x = grid[row+1].segPoints[col+1].x;
float p4y = grid[row+1].segPoints[col+1].y;
float slope1 = (p2y-p1y)/(p2x-p1x);
float slope2 = (p3y-p4y)/(p3x-p4x);
for (int i=0; i<numLines; i++) {
float x= random(p1x, p2x);
stroke(0);
line(x, (slope1*(x-p1x)+p1y), x, slope2*(x-p3x)+p3y);
}
}
Circle[] circles;
boolean good = false;
void drawCircles() {
circles = new Circle[numCirc];
for (int i=0; i< numCirc; i++) {
good = false;
while (circles[i] == null) {
circles[i] = createCircle(i);
}
}
for (int j=0; j<circles.length; j++)
ellipse(circles[j].x, circles[j].y, circles[j].rad, circles[j].rad);
}
Circle createCircle(int i) {
boolean fail = false;
float dim = random(circMin, circMax);
Circle test = new Circle(random(circMax, width-circMax), random(circMax, height-circMax), dim);
//circles[i] = test;
for (int j=0; j<i; j++) {
if (circleHitTest(test, circles[j])) {
return null;
}
}
return test;
}
boolean circleHitTest(Circle c1, Circle c2) {
float hitRad = c1.rad + c2.rad;
if ( dist(c1.x, c1.y, c2.x, c2.y) < hitRad)
return true;
else
return false;
}
class RowLine{
PVector[] segPoints;
int rowStart;
// RowLine prev, next;
public RowLine(int rowStart1){
segPoints = new PVector[numcols];
rowStart=rowStart1;
if( (rowStart == 0) || (rowStart == height))
initEdgeLine();
else
initLine();
}
void initLine(){
int x,y;
y= rowStart;
for(int i=0; i<numcols; i++){
segPoints[i] = new PVector(colSpace[i], y);
y= y + int(random(-linewaver, linewaver));
}
}
void initEdgeLine(){
int x,y;
y= rowStart;
for(int i=0; i<numcols; i++){
segPoints[i] = new PVector(colSpace[i], y);
}
}
void drawLine(){
stroke(0);
//smooth();
strokeWeight(0.5);
strokeJoin(MITER);
beginShape();
for(int i=0; i<segPoints.length; i++)
vertex(segPoints[i].x, segPoints[i].y);
endShape();
// for(int i=0; i<segPoints.length-1; i++){
//line(segPoints[i].x, segPoints[i].y, segPoints[i+1].x, segPoints[i+1].y);
// }
}
}
Comments Off on Alex Wolfe | Gauntlet | Frieder Nake