Fix line length and styling

This commit is contained in:
Divay Prakash 2018-11-17 20:15:36 +05:30
parent e3dcdb24d1
commit 60adaef06e

View File

@ -7,11 +7,15 @@ contributors:
## Introduction
Processing is a programming language for creation of digital arts and multimedia content, allowing non-programmers to
learn fundamentals of computer programming in a visual context.
While the language is based on Java language,
its syntax has been largely influenced by both Java and Javascript syntaxes. [See more here](https://processing.org/reference/)
The language is statically typed, and also comes with its official IDE to compile and run the scripts.
Processing is a programming language for creation of digital arts and
multimedia content, allowing non-programmers to learn fundamentals of computer
programming in a visual context.
While the language is based on Java language, its syntax has been largely
influenced by both Java and Javascript syntaxes. [See more here](https://processing.org/reference/)
The language is statically typed, and also comes with its official IDE to
compile and run the scripts.
```
/* ---------
@ -32,21 +36,26 @@ The language is statically typed, and also comes with its official IDE to compil
---------------------------------------
*/
// In Processing, your program's entry point is a function named setup() with a void return type.
// In Processing, the program entry point is a function named setup() with a
// void return type.
// Note! The syntax looks strikingly similar to that of C++.
void setup() {
// This prints out the classic output "Hello World!" to the console when run.
println("Hello World!"); // Another language with a semi-column trap, ain't it?
println("Hello World!"); // Another language with a semi-column trap, aint it?
}
// Normally, we put all the static codes inside the setup() method as the name suggest since it only runs once.
// Normally, we put all the static codes inside the setup() method as the name
// suggest since it only runs once.
// It can range from setting the background colours, setting the canvas size.
background(color); // setting the background colour
size(width,height,[renderer]); // setting the canvas size with optional parameter defining renderer
size(width,height,[renderer]); // setting the canvas size with optional
// parameter defining renderer
// You will see more of them throughout this document.
// If you want to run the codes indefinitely, it has to be placed in draw() method.
// draw() must exist if you want the code to run continuously and obviously, there can only be one draw() method.
// If you want to run the codes indefinitely, it has to be placed in draw()
// method.
// draw() must exist if you want the code to run continuously and obviously,
// there can only be one draw() method.
int i = 0;
void draw() {
// This block of code loops forever until stopped
@ -55,22 +64,25 @@ void draw() {
}
// Now that we know how to write the working script and how to run it,
// we will proceed to explore what data types and collections are supported in Processing.
// we will proceed to explore what data types and collections are supported in
// Processing.
/* ------------------------
Datatypes & collections
------------------------
*/
// According to Processing References, Processing supports 8 primitive datatypes as follows.
// According to Processing References, Processing supports 8 primitive
// datatypes as follows.
boolean booleanValue = true; // Boolean
byte byteValueOfA = 23; // Byte
char charValueOfA = 'A'; // Char
color colourValueOfWhiteM = color(255, 255, 255); // Colour (Specified using color() method)
color colourValueOfWhiteM = color(255, 255, 255); // Colour (Specified using
// color() method)
color colourValueOfWhiteH = #FFFFFF; // Colour (Specified using hash value)
int intValue = 5; // Integer (Number without decimals)
long longValue = 2147483648L; // "L" is added to the number to mark it as a long
long longValue = 2147483648L; // "L" is added to number to mark it as a long
float floatValue = 1.12345; // Float (32-bit floating-point numbers)
double doubleValue = 1.12345D; // Double (64-bit floating-point numbers)
@ -80,13 +92,15 @@ double doubleValue = 1.12345D; // Double (64-bit floating-point numbers)
// they need to be converted into "int" and "float" datatypes respectively,
// using (int) and (float) syntax before passing into a function.
// There is a whole bunch of default composite datatypes available for use in Processing.
// There is a whole bunch of default composite datatypes available for use in
// Processing.
// Primarily, I will brief through the most commonly used ones to save time.
// String
// While char datatype uses '', String datatype uses "" - double quotes.
String sampleString = "Hello, Processing!";
// String can be constructed from an array of char datatypes as well. We will discuss array very soon.
// String can be constructed from an array of char datatypes as well. We will
// discuss array very soon.
char source = {'H', 'E', 'L', 'L', 'O'};
String stringFromSource = new String(source); // HELLO
// As in Java, strings can be concatenated using the "+" operator.
@ -94,27 +108,29 @@ print("Hello " + "World!"); // Hello World!
// Array
// Arrays in Processing can hold any datatypes including Objects themselves.
// Since arrays are similar to objects, they must be created with the keyword "new".
// Since arrays are similar to objects, they must be created with the keyword
// "new".
int[] intArray = new int[5];
int[] intArrayWithValues = {1, 2, 3}; // You can also populate with data.
// ArrayList
// Functions are similar to those of array; arraylists can hold any datatypes.
// The only difference is arraylists resize dynamically,
// as it is a form of resizable-array implementation of the Java "List" interface.
// The only difference is arraylists resize dynamically, as it is a form of
// resizable-array implementation of the Java "List" interface.
ArrayList<Integer> intArrayList = new ArrayList<Integer>();
// Object
// Since it is based on Java, Processing supports object-oriented programming.
// That means you can basically define any datatypes of your own and manipulate them to your needs.
// That means you can basically define any datatypes of your own and manipulate
// them to your needs.
// Of course, a class has to be defined before for the object you want.
// Format --> ClassName InstanceName
SomeRandomClass myObject // then instantiate later
//or
SomeRandomClass myObjectInstantiated = new SomeRandomClass();
// Processing comes up with more collections (eg. - Dictionaries and Lists) by default,
// for the simplicity sake, I will leave them out of discussion here.
// Processing comes up with more collections (eg. - Dictionaries and Lists) by
// default, for the simplicity sake, I will leave them out of discussion here.
/* ------------
Maths
@ -129,7 +145,8 @@ SomeRandomClass myObjectInstantiated = new SomeRandomClass();
3.0 / 2 // 1.5
3.0 % 2 // 1.0
// Processing also comes with a set of functions that simplify mathematical operations.
// Processing also comes with a set of functions that simplify mathematical
// operations.
float f = sq(3); // f = 9.0
float p = pow(3, 3); // p = 27.0
int a = abs(-13) // a = 13
@ -138,18 +155,21 @@ int r2 = round(3.7); // r2 = 4
float sr = sqrt(25); // sr = 5.0
// Vectors
// Processing provides an easy way to implement vectors in its environment using PVector class.
// It can describe a two or three dimensional vector and
// Processing provides an easy way to implement vectors in its environment
// using PVector class. It can describe a two or three dimensional vector and
// comes with a set of methods which are useful for matrices operations.
// You can find more information on PVector class and its functions here.
// (https://processing.org/reference/PVector.html)
// Trigonometry
// Processing also supports trigonometric operations by supplying a set of functions.
// sin(), cos(), tan(), asin(), acos(), atan() and also degrees() and radians() for convenient conversion.
// However, those functions take angle in radians as the parameter so it has to be converted beforehand.
// Processing also supports trigonometric operations by supplying a set of
// functions. sin(), cos(), tan(), asin(), acos(), atan() and also degrees()
// and radians() for convenient conversion.
// However, those functions take angle in radians as the parameter so it has
// to be converted beforehand.
float one = sin(PI/2); // one = 1.0
// As you may have noticed, there exists a set of constants for trigonometric uses;
// As you may have noticed, there exists a set of constants for trigonometric
// uses;
// PI, HALF_PI, QUARTER_PI and so on...
/* -------------
@ -169,14 +189,14 @@ if (author.getAppearance().equals("hot")) {
int i = 3;
String value = (i > 5) ? "Big" : "Small"; // "Small"
// Switch-case structure can be used to check multiple conditions more concisely.
// Switch-case structure can be used to check multiple conditions concisely.
int value = 2;
switch(value) {
case 0:
print("Nought!"); // This doesn't get executed.
print("Nought!"); // This does not get executed.
break; // Jumps to the next statement
case 1:
print("Getting there..."); // This again doesn't get executed.
print("Getting there..."); // This again does not get executed.
break;
case 2:
print("Bravo!"); // This line gets executed.
@ -204,12 +224,14 @@ while(j > 0) {
loop(); // allows the draw() method to run forever while
noLoop(); // only allows it to run once.
redraw(); // runs the draw() method once more.
exit(); // This stops the program. It is useful for programs with draw() running continuously.
exit(); // This stops the program. It is useful for programs with draw()
// running continuously.
```
## Drawing with Processing
Since you will have understood the basics of the language by now, we will now look into the best part of Processing; DRAWING.
Since you will have understood the basics of the language by now, we will now
look into the best part of Processing - DRAWING.
```
/* ------
@ -235,12 +257,15 @@ triangle(x1, y1, x2, y2, x3, y3);
// Rectangle
rect(a, b, c, d, [r]); // With optional parameter defining the radius of all corners
rect(a, b, c, d, [tl, tr, br, bl]); // With optional set of parameters defining radius of each corner
// Draws a rectangle with {a, b} as a top left coordinate and c and d as width and height respectively.
rect(a, b, c, d, [tl, tr, br, bl]); // With optional set of parameters defining
// radius of each corner
// Draws a rectangle with {a, b} as a top left coordinate and c and d as width
// and height respectively.
// Quad
quad(x, y, x2, y2, x3, y3, x4, y4);
// Draws a quadrilateral with parameters defining coordinates of each corner point.
// Draws a quadrilateral with parameters defining coordinates of each corner
// point.
// Ellipse
ellipse(x, y, width, height);
@ -251,19 +276,23 @@ arc(x, y, width, height, start, stop, [mode]);
// While the first four parameters are self-explanatory,
// start and end defined the angles the arc starts and ends (in radians).
// Optional parameter [mode] defines the filling;
// PIE gives pie-like outline, CHORD gives the chord-like outline and OPEN is CHORD without strokes
// PIE gives pie-like outline, CHORD gives the chord-like outline and OPEN is
// CHORD without strokes
// Curves
// Processing provides two implementation of curves; using curve() and bezier().
// Since I plan to keep this simple I won't be discussing any further details.
// Since I plan to keep this simple I wont be discussing any further details.
// However, if you want to implement it in your sketch, here are the references:
// (https://processing.org/reference/curve_.html)(https://processing.org/reference/bezier_.html)
// (https://processing.org/reference/curve_.html)
// (https://processing.org/reference/bezier_.html)
// 3D Shapes
// 3D space can be configured by setting "P3D" to the renderer parameter in size() method.
// 3D space can be configured by setting "P3D" to the renderer parameter in
// size() method.
size(width, height, P3D);
// In 3D space, you will have to translate to the particular coordinate to render the 3D shapes.
// In 3D space, you will have to translate to the particular coordinate to
// render the 3D shapes.
// Box
box(size); // Cube with same length defined by size
@ -272,27 +301,32 @@ box(w, h, d); // Box with width, height and depth separately defined
// Sphere
sphere(radius); // Its size is defined using the radius parameter
// Mechanism behind rendering spheres is implemented by tessellating triangles.
// That said, how much detail being rendered is controlled by function sphereDetail(res)
// That said, how much detail being rendered is controlled by function
// sphereDetail(res)
// More information here: (https://processing.org/reference/sphereDetail_.html)
// Irregular Shapes
// What if you wanted to draw something that's not made available by Processing's functions?
// You can use beginShape(), endShape(), vertex(x,y) to define shapes by specifying each point.
// More information here: (https://processing.org/reference/beginShape_.html)
// You can also use custom made shapes using PShape class.(https://processing.org/reference/PShape.html)
// What if you wanted to draw something thats not made available by Processing
// functions?
// You can use beginShape(), endShape(), vertex(x,y) to define shapes by
// specifying each point. More information here:
// (https://processing.org/reference/beginShape_.html)
// You can also use custom made shapes using PShape class:
// (https://processing.org/reference/PShape.html)
/* ---------------
Transformations
---------------
*/
// Transformations are particularly useful to keep track of the coordinate space
// and the vertices of the shapes you have drawn.
// Particularly, matrix stack methods; pushMatrix(), popMatrix() and translate(x,y)
// Transformations are particularly useful to keep track of the coordinate
// space and the vertices of the shapes you have drawn. Particularly;
// matrix stack methods; pushMatrix(), popMatrix() and translate(x,y)
pushMatrix(); // Saves the current coordinate system to the stack
// ... apply all the transformations here ...
popMatrix(); // Restores the saved coordinate system
// Using them, the coordinate system can be preserved and visualized without causing any conflicts.
// Using them, the coordinate system can be preserved and visualized without
// causing any conflicts.
// Translate
translate(x, y); // Translates to point{x, y} i.e. - setting origin to that point
@ -312,37 +346,46 @@ scale(s); // Scale the coordinate system by either expanding or contracting it.
*/
// Colours
// As I have discussed earlier, the background colour can be configured using background() function.
// You can define a color object beforehand and then pass it to the function as an argument.
// As I have discussed earlier, the background colour can be configured using
// background() function. You can define a color object beforehand and then
// pass it to the function as an argument.
color c = color(255, 255, 255); // WHITE!
// By default, Processing uses RGB colour scheme but it can be configured to HSB using colorMode().
// Read here: (https://processing.org/reference/colorMode_.html)
// By default, Processing uses RGB colour scheme but it can be configured to
// HSB using colorMode(). Read more here:
// (https://processing.org/reference/colorMode_.html)
background(color); // By now, the background colour should be white.
// You can use fill() function to select the colour for filling the shapes.
// It has to be configured before you start drawing shapes so the colours gets applied.
// It has to be configured before you start drawing shapes so the colours gets
// applied.
fill(color(0, 0, 0));
// If you just want to colour the outlines of the shapes then you can use stroke() function.
stroke(255, 255, 255, 200); // stroke colour set to yellow with transparency set to a lower value.
// If you just want to colour the outlines of the shapes then you can use
// stroke() function.
stroke(255, 255, 255, 200); // stroke colour set to yellow with transparency
// set to a lower value.
// Images
// Processing can render images and use them in several ways. Mostly stored as PImage datatype.
// Processing can render images and use them in several ways. Mostly stored as
// PImage datatype.
filter(shader); // Processing supports several filter functions for image manipulation.
texture(image); // PImage can be passed into arguments for texture-mapping the shapes.
```
If you want to take things further, there are more things Processing is powered for. Rendering models, shaders and whatnot.
There's too much to cover in a short documentation, so I will leave them out here. Shoud you be interested, please check out the references.
If you want to take things further, there are more things Processing is powered
for. Rendering models, shaders and whatnot. There's too much to cover in a
short documentation, so I will leave them out here. Shoud you be interested,
please check out the references.
```
// Before we move on, I will touch a little bit more on how to import libraries
// so you can extend Processing's functionality to another horizon.
// so you can extend Processing functionality to another horizon.
/* -------
Imports
-------
*/
// The power of Processing can be further visualized when we import libraries and packages into our sketches.
// The power of Processing can be further visualized when we import libraries
// and packages into our sketches.
// Import statement can be written as below at the top of the source code.
import processing.something.*;
```
@ -351,12 +394,15 @@ import processing.something.*;
Down To Code? Let's get our hands dirty!
Let us see an example from openprocessing to visualize how much Processing is capable of within few lines of code.
Let us see an example from openprocessing to visualize how much Processing is
capable of within few lines of code.
Copy the code below into your Processing IDE and see the magic.
```
// Disclaimer: I did not write this program since I currently am occupied with internship and
// this sketch is adapted from openprocessing since it shows something cool with simple codes.
// Disclaimer: I did not write this program since I currently am occupied with
// internship and this sketch is adapted from openprocessing since it shows
// something cool with simple codes.
// Retrieved from: (https://www.openprocessing.org/sketch/559769)
float theta;
@ -407,11 +453,12 @@ void branch(float len) {
}
```
Processing is easy to learn and is particularly useful to create multimedia contents (even in 3D) without
having to type a lot of codes. It is so simple that you can read through the code and get a rough idea of
the program flow.
However, that does not apply when you introduce external libraries, packages and even your own classes.
(Trust me! Processing projects can get real humongous...)
Processing is easy to learn and is particularly useful to create multimedia
contents (even in 3D) without having to type a lot of codes. It is so simple
that you can read through the code and get a rough idea of the program flow.
However, that does not apply when you introduce external libraries, packages
and even your own classes. (Trust me! Processing projects can get real humongous...)
## Some useful resources