213
edits
|  (Created page with "== 17.10.2011 Processing sketches ==  === P01 Shapes and Relations ===  <source lang="java"> /*  P01 Shapes and Relations    This example illustrates how to formulate properties ...") | |||
| (9 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| == 17.10. | == 17.10.2014 Processing sketches == | ||
| === P01 Shapes and Relations === | === P01 Shapes and Relations === | ||
| Line 126: | Line 126: | ||
| } | } | ||
| </source> | |||
| <br /><br /> | |||
| == 07.11.2014 Processing sketches == | |||
| === P03 Nested Rects === | |||
| <source lang="java"> | |||
| /* | |||
|  P03 Nested Rectangles with a while loop | |||
|  Demonstration of how to make a repetetive structure using  | |||
|  a while-loop. Here the variable "rectSize" is decreased in  | |||
|  every step and the coordinate system is rotated a little bit | |||
|  as well. The while-loop is executed as long as the value  | |||
|  of rectSize is larger than zero (rectSize > 0). | |||
| */ | |||
| size(1000,600); | |||
| // variable with the start size of the rectangles structure | |||
| int rectSize = 500; | |||
| // variable to specify the amount the rectangles are shrinked in each step | |||
| int difference = 30; | |||
| background(255); | |||
| // since all shapes are aligned centered, the center rect mode is used | |||
| rectMode(CENTER); | |||
| noFill(); | |||
| // set the origin of the coordinate system to the center of the stage | |||
| translate(width/2, height/2); | |||
| // continue the following statements within the while-loop as long as the value | |||
| // of the variable "rectSize" is larger than 0 | |||
| while(rectSize > 0){ | |||
|   //draw a rectangle with the actual size of "rectSize" | |||
|   rect(0,0,rectSize,rectSize); | |||
|   // for the next loop: decrease the value of "rectSize" by the value of "difference"   | |||
|   rectSize = rectSize - difference; | |||
|   // rotate the coordinate system by 4 degrees | |||
|   rotate(radians(4)); | |||
| } | |||
| </source> | |||
| <br /><br /> | |||
| === P04 For Loop === | |||
| <source lang="java"> | |||
| /* | |||
|  P04 For-Loop for repeating structures | |||
|  Draw a number of rectangles in a horizontal line and dynamically | |||
|  change the spacing between them according to the y-position of the | |||
|  mouse. | |||
| */ | |||
| // Variable to specify the total numbers of rectangles to be drawn | |||
| int numRects = 10; | |||
| void setup(){ | |||
|   size(1000,600); | |||
|   noFill(); | |||
| } | |||
| void draw(){ | |||
|   // Calculate the distance between each rectangle by | |||
|   // dividing the current mouse position by 10 (or multiply it with 0.1)  | |||
|   float distance = mouseX * 0.1; | |||
|   // Reset the background to white | |||
|   background(255); | |||
|   // Move the coordinate system to the vertical center | |||
|   translate(0, height * 0.5); | |||
|   // Repeat the for-loop for the times of "numRects"   | |||
|   for(int i=0; i < numRects ; i++  ){ | |||
|     // Draw a rectangle at the current origin of the cordinate system (0,0) | |||
|     rect(0,0,10,10); | |||
|     // Move the coordinate system to the right by the number of pixels specified in "distance" | |||
|     translate( distance ,0); | |||
|   } | |||
| } | |||
| </source> | |||
| <br /><br /> | |||
| === P05 2D Grid === | |||
| <source lang="java"> | |||
| /* | |||
|  P05 2D GRID | |||
|  Example to demsonstrate the usage of two nested for loops | |||
|  to create a two dimensional grid pattern. The number of  | |||
|  rows and colums is calculated at the startup so that it | |||
|  matches given space (half of the screen size) and the  | |||
|  specified spacing between each grid element (defined by | |||
|  the variable "gridSpacing") | |||
| */ | |||
| // Define the spacing of the grid elements  | |||
| float gridSpacing = 10; | |||
| // Inititalize variables to store the number of rows and colums | |||
| float numCols; | |||
| float numRows; | |||
| void setup(){ | |||
|   size(600,600); | |||
|   // Dynamically calculate the number of colums and rows accoding to the given | |||
|   // stage size and the grid size. | |||
|   numCols = (width * 0.5) / gridSpacing; | |||
|   numRows = (height * 0.5) / gridSpacing; | |||
| } | |||
| void draw(){ | |||
|   background(255); | |||
|   // Leave a quater of the stage blank as spacing around the  | |||
|   // grid structure.  | |||
|   translate(width * 0.25, height * 0.25); | |||
|     // Use two for loops to interate the colums and rows: | |||
|     for(float i=0; i < numCols; i+= 1 ){ | |||
|       for(float j=0; j < numRows; j+= 1){ | |||
|         // Change the appearance of dots for  | |||
|         // even and odd rows | |||
|         if( j % 2 == 0){ | |||
|           stroke(0); | |||
|           noFill(); | |||
|         }else{ | |||
|           fill(255,0,0); | |||
|           noStroke(); | |||
|         } | |||
|         // Calculate the actual position of the individual dot: | |||
|         float x = i * gridSpacing; | |||
|         float y = j * gridSpacing; | |||
|         // Draw the ellipse | |||
|         ellipse(x, y, 5, 5); | |||
|       }    | |||
|     } | |||
| } | |||
| </source> | |||
| <br /><br /> | |||
| == 21.11.2014 Processing sketches == | |||
| === P06 Strings and Chars === | |||
| <source lang="java"> | |||
| /* | |||
|  P06 Strings and Chars | |||
|  This example illustrates how to work with Strings (a collection of characters) | |||
|  and how to display text on the screen. Also it shows how to access single characters | |||
|  of a string by using the charAt() function.  | |||
|  */ | |||
| // Initialize a new string variable and assign the phrase "HELLO" to it | |||
| String word = "HELLO"; | |||
| // Variable to count the current character position  | |||
| int index = 0; | |||
| void setup() { | |||
|   size(1000, 600); | |||
|   // Set the size for any text that is drawn to 36px | |||
|   textSize(36); | |||
|   // Reduce the frame rate of the draw() loop to 2 frames per second | |||
|   frameRate(2); | |||
| } | |||
| void draw() { | |||
|   background(0); | |||
|   // Make sure that the index never exceeds the bounds of the word  | |||
|   if (index >= word.length() ) { | |||
|     index = 0; | |||
|   } | |||
|   // Display the character at the current position (index) at the center of the screen | |||
|   text(word.charAt(index), width*0.5, height*0.5); | |||
|   // Increment the index by 1 | |||
|   index++; | |||
| } | |||
| </source> | |||
| <br /><br /> | |||
| === P07 Array Layout === | |||
| <source lang="java"> | |||
| /* | |||
|  P07 Array Layout | |||
|  This sketch shows how Arrays can be used to structure a set of numbers. | |||
|  Also it uses a for-loop to iterate the Array and to access each individual | |||
|  number of it to draw an ellipse with the respective diameter. | |||
| */ | |||
| // Initialize an Array to specify the individual diameters of ellipses in the grid. | |||
| // Note that the way of writing the numbers in a 3x3 grid is only for better readibility. | |||
| // One could also write {9,2,2,2,9,2,2,2,9} | |||
| int[] diameters = {  9,2,2, | |||
|                      2,9,2, | |||
|                      2,2,9 }; | |||
| // Variable to define the spacing between the elements in the grid | |||
| int spacing = 50; | |||
| void setup(){ | |||
|   size(1000,600); | |||
|   noFill(); | |||
|   // Print the total numbers of elements in the diameters array to the console  | |||
|   println(diameters.length); | |||
| } | |||
| void draw(){ | |||
|   background(255); | |||
|   // Align the grid structure to the center | |||
|   translate(width * 0.5 - (spacing * 1.5), height * 0.5 - (spacing * 1.5)); | |||
|   // Loop over the diameters array | |||
|   for(int i=0; i < diameters.length; i++){ | |||
|     // Calculate the modulo of the division of the counter (i) by the total  | |||
|     // number of colums (3) to get the current column:  | |||
|     int x = (i % 3) * spacing; | |||
|     // Calculate the actual row by dividing the counter by the total number  | |||
|     // of columns (3) and rounding it down with floor() | |||
|     int y = floor(i / 3) * spacing;  | |||
|     // Draws the individual ellipse with the respective diameter | |||
|     // specified in the diameters array. | |||
|     ellipse(x, y, diameters[i], diameters[i]); | |||
|   } | |||
| } | |||
| </source> | |||
| <br /><br /> | |||
| === P08 Grid By Image === | |||
| Make sure you have the [[Media:layout_pixels_example.png]] file in the data folder of the sketch! | |||
| <source lang="java"> | |||
| /* | |||
|  P08 Grid By Image | |||
|  Example of how to load an image file into processing and how to access each  | |||
|  pixel of the image. The color information of the pixels of the loaded image | |||
|  are used to modify the grid layout. | |||
|  NOTICE: Make sure the image "layout_pixels_example.png" is placed in the "data" folder of | |||
|  this sketch! | |||
| */ | |||
| // Initialize a variable to store an image | |||
| PImage img; | |||
| // Define a variable to specify the spacing of the elements | |||
| int spacing = 10; | |||
| void setup() { | |||
|   size(1000, 600); | |||
|   // Load the actual image file from the data folder and | |||
|   // assign it to the img variable | |||
|   img = loadImage("layout_pixels_example.png"); | |||
|   // How many pixels did we load? | |||
|   println(img.pixels.length); | |||
| } | |||
| void draw() { | |||
|   background(0); | |||
|   // Only show the actual image if a keyboard key is pressed | |||
|   if(keyPressed){ | |||
|     image(img, 0, 0); | |||
|   } | |||
|   // Two nested for-loops to draw ellipses all over the window | |||
|   // with a certain spacing | |||
|   for (int x=0; x < width; x+= spacing) { | |||
|     for (int y=0; y < height; y+= spacing) { | |||
|       // Extract the color of the x and y pixel position of the image   | |||
|       color c = img.get(x, y); | |||
|       // Only actually draw an ellipse when the current brightness of the | |||
|       // extracted color is very dark (brightness == 0) | |||
|       if (brightness(c) == 0 ) { | |||
|         ellipse(x, y, 5, 5); | |||
|       } | |||
|     } | |||
|   } | |||
| } | |||
| </source> | |||
| <br /><br /> | |||
| == 28.11.2014 Processing sketches == | |||
| === P09 Interval timer === | |||
| Make sure you have the files [[Media:interval_pixels_example_A.png]], [[Media:interval_pixels_example_B.png]] and [[Media:interval_pixels_example_C.png]] in the data folder of the sketch! | |||
| <source lang="java"> | |||
| /* | |||
|  P09 Interval timer | |||
|  A refinement of the "Grid by image" example with multiple changing  | |||
|  images. The millis() function is utilized to create an interval | |||
|  timer which changes the actual image from the image sequence stored | |||
|  in an array. The mouse x position changes the size of the grid dynamically. | |||
|  Therefor the map() function is used to scale the range of the screen | |||
|  width to the desired range for controlling the grid size. | |||
|  */ | |||
| float gridSize = 10; | |||
| // Array of images (of type PImage) with the size  | |||
| // of 3 is initializied  | |||
| PImage[] images = new PImage[3]; | |||
| // Counter for the current index of the image sequence | |||
| int imageCounter = 0; | |||
| // Variable to define the timer interval in milliseconds | |||
| int timerInterval = 400; | |||
| // Helper variable to store the last time the interval time has passed | |||
| int lastMillis = 0; | |||
| void setup() { | |||
|   size(1000, 600); | |||
|   // Assign individual images from the data folder | |||
|   // to the array positions | |||
|   images[0] = loadImage("interval_pixels_example_A.png"); | |||
|   images[1] = loadImage("interval_pixels_example_B.png"); | |||
|   images[2] = loadImage("interval_pixels_example_C.png"); | |||
| } | |||
| void draw() { | |||
|   background(0); | |||
|   // The millis() function returns the number of milliseconds  | |||
|   // (thousandths of a second) since starting the program.  | |||
|   // When lastMillis is substracted from millis(), we get the  | |||
|   // milliseconds which have been past since the last timer execution.  | |||
|   if( millis() - lastMillis > timerInterval ){ | |||
|     // Now count up the imageCounter by 1 | |||
|     imageCounter++; | |||
|     // Make sure it stays within the bounds of the images array | |||
|     imageCounter = imageCounter % images.length; | |||
|     // It is important to set lastMillis to the actual number  | |||
|     // of milliseconds, otherwise the if condition does not  | |||
|     // work repetitively.   | |||
|     lastMillis = millis(); | |||
|   } | |||
|   // Helper variable to store the actual image from the array. | |||
|   PImage currentImg = images[imageCounter]; | |||
|   // Only show the background image when a keyboard key is pressed | |||
|   if(keyPressed){ | |||
|     image(currentImg, 0, 0); | |||
|   } | |||
|   // Dynamically scale the gridSize according to the mouse  | |||
|   // x position | |||
|   gridSize = map(mouseX, 0, width, 5, 30); | |||
|   // Loop through the columns and rows of the grid | |||
|   // as in the previous example | |||
|   for (int x=0; x < width; x+= gridSize) { | |||
|     for (int y=0; y < height; y+= gridSize) { | |||
|       color c = currentImg.get(x, y); | |||
|       if (brightness(c) < 255 ) { | |||
|         ellipse(x, y, 5, 5); | |||
|       } | |||
|     } | |||
|   } | |||
| } | |||
| </source> | |||
| <br /><br /> | |||
| === P10 Linear movement and direction === | |||
| <source lang="java"> | |||
| /* | |||
|  P10 Linear movement and direction | |||
|  The famous "bouncing ball"illustrates how steady movement  | |||
|  is achived by adding a constant number (speed) to the actual | |||
|  position of an ellipse. The horizontal or vertical direction  | |||
|  is changed when the ellipse hits an edge of the sketch window. | |||
|  */ | |||
| float rad = 60.0; | |||
| float xpos, ypos;         | |||
| float xspeed = 2.8;  | |||
| float yspeed = 2.2;   | |||
| int xdirection = 1;   | |||
| int ydirection = 1;  | |||
| void setup()  | |||
| { | |||
|   size(640, 360); | |||
|   noStroke(); | |||
|   frameRate(30); | |||
|   ellipseMode(RADIUS); | |||
|   xpos = width/2; | |||
|   ypos = height/2; | |||
| } | |||
| void draw()  | |||
| { | |||
|   background(102); | |||
|   xpos = xpos + ( xspeed * xdirection ); | |||
|   ypos = ypos + ( yspeed * ydirection ); | |||
|   if (xpos > width-rad || xpos < rad) { | |||
|     xdirection *= -1; | |||
|   } | |||
|   if (ypos > height-rad || ypos < rad) { | |||
|     ydirection *= -1; | |||
|   } | |||
|   ellipse(xpos, ypos, rad, rad); | |||
| } | |||
| </source> | |||
| <br /><br /> | |||
| === P11 Polar dots === | |||
| <source lang="java"> | |||
| /* | |||
|  P11 Polar dots | |||
|  Illustrates how circular shapes and movements are created by using | |||
|  polar coordinates (angle and radius) and how to convert these to cartesian | |||
|  coordinates (x and y) by using sine and cosine functions (sin() and cos()). | |||
|  */ | |||
| // Radius | |||
| float r; | |||
| // Radius offset | |||
| float rOffset = 1.0; | |||
| // Angle and speed | |||
| float angle = 0.0; | |||
| float angleSpeed = 0.02; | |||
| void setup() { | |||
|   size(1000, 600); | |||
|   ellipseMode(CENTER); | |||
|   // Set r according to the sketch height | |||
|   r = height * 0.25; | |||
|   background(255); | |||
| } | |||
| void draw() { | |||
|   // Dynamically scale the radius with the mouse x position | |||
|   rOffset = map(mouseX, 0, width, 0.0, 1.5); | |||
|   // Draw a semi-transparent rectangle across the whole window | |||
|   // to let the backround smoothly fade out. | |||
|   fill(255,10); | |||
|   rect(0,0,width,height); | |||
|   // Move to the center | |||
|   translate(width/2, height/2); | |||
|   // Convert polar to cartesian coordinates | |||
|   // and scale the actual radius | |||
|   float x = (r * rOffset) * cos(angle); | |||
|   float y = (r * rOffset) * sin(angle); | |||
|   // Draw the moving red ellipse to the actual position | |||
|   noStroke(); | |||
|   fill(200,0,0); | |||
|   ellipse(x, y, 17, 17); | |||
|   // Draw the steady circle | |||
|   stroke(0,10); | |||
|   noFill(); | |||
|   ellipse(0,0,r*2,r*2); | |||
|   // Increase the current value of angle by the value of angleSpeed | |||
|   angle += angleSpeed; | |||
| } | |||
| </source> | </source> | ||
| <br /><br /> | <br /><br /> | ||
edits