9. November 2010
Konzept Ich wollte ein Ornament in Processing erstellen welches sich von Rendering zu Rendering unterscheidet, allerdings in Y- und X- Richtung duplizierbar bleibt (Pattern). Die Grundidee war es horizontale und vertikale Linien zu Zeichnen die sich wiederrum in Segmente unterteilen... pro Segment wird ein zufälliger Wert für die Y-Achse bei Horizontalen Linien undein zufälliger Wert für die X-Achse bei Vertikalen Linien gewählt. So erhält man bei jedem neuen Rendering ein neues Ornament welches als Pattern kombinierbar mit den anderen bleibt:/* * ORNAMENT * * Predefined dockingPoints where the ornament starts and ends on the x-axe and * y-axe to provide the functionality of reproducing this ornament itselfs on * the y-axe and x-axe with a clear flow into each other * * @name ORNAMENT * @author Sebastian Pape <sebastian.pape@zhdk.ch> * @version 0.9 */ import processing.pdf.*; /* * SEGMENTS * * The spreaf of possible segments for each line * */ int segmentsMin = 2; int segmentsMax = 8; /* * DOCKING POINTS * * The docking poits array defines points where the ornament starts and end * seperated in y-axe and x-axe * */ ArrayList dockingPointsXAxe = new ArrayList(); void fillDockingPointsXAxe() { dockingPointsXAxe.add(15); dockingPointsXAxe.add(50); dockingPointsXAxe.add(180); dockingPointsXAxe.add(250); dockingPointsXAxe.add(320); dockingPointsXAxe.add(460); dockingPointsXAxe.add(500); dockingPointsXAxe.add(560); } ArrayList dockingPointsYAxe = new ArrayList(); void fillDockingPointsYAxe() { dockingPointsYAxe.add(25); dockingPointsYAxe.add(60); dockingPointsYAxe.add(145); dockingPointsYAxe.add(222); dockingPointsYAxe.add(324); dockingPointsYAxe.add(445); dockingPointsYAxe.add(488); dockingPointsYAxe.add(571); } /* * SETUP */ void setup() { size(600,600,PDF,"ornament.pdf"); // def. fenstergroesse //size(600, 600); smooth(); // aktiviere antialiasing strokeWeight(10); // linienbreite strokeJoin(BEVEL); fillDockingPointsXAxe(); fillDockingPointsYAxe(); noLoop(); } /* * DRAW */ void draw() { background(255); // def. hintergrundfarbe drawLines(); exit(); } /* * DRAW LINES */ void drawLines() { // horizontal lines for (int i = 0; i <= dockingPointsXAxe.size()-1; i++) { drawLine(0,((Integer)dockingPointsXAxe.get(i)).intValue()); } // vertical lines for (int i = 0; i <= dockingPointsYAxe.size()-1; i++) { drawLine(((Integer)dockingPointsXAxe.get(i)).intValue(), 0); } } /* * DRWAW LINE */ void drawLine(int startPointX, int startPointY) { float segments = round(random(segmentsMin, segmentsMax)); // first point to check if the current line is a horizontal or vertical line float firstX = startPointX; float firstY = startPointY; // last point for the for drawing lines during the for loop float lastX = firstX; float lastY = firstY; for(int i = 1; i <= segments; i++) { // set the current point float currentX = width / segments * i; float currentY = 100 + (height - 200) * random(1); if(i == segments) { // let the last drawn part ends where the line begins currentX = firstX; if(currentX == 0) { currentX = width; } currentY = firstY; if(currentY == 0) { currentY = height; } } // draw line line(lastX, lastY, currentX, currentY); // set last point lastX = currentX; lastY = currentY; } }