This is how many trees there are(or at least how many there were in 2016).
I decided to do a data visualization of the percentage of land area covered by forest per country. The taller the tree, the bigger the percentage.
First I created a branch object, which I made into an array in my tree function, which I then make an array of in my draw function.
ArrayList<Tree> trees; float count = 0; int data[]; Tree tree; void setup() { // I want to do three things, //one create one tree for each point of data, //two, make each tree's height dependent on the value of the data point //three, be able to switch between data sets with a keypress. (less important) size(1200, 400); trees = new ArrayList<Tree>(); //if (mousePressed){ String[] forest = loadStrings("2016_data.txt"); //} //else { // String[] forest = loadStrings("1990_data.txt"); //} int[] data = new int[forest.length]; for(int i = 0; i < forest.length; i++){ data[i] = int(forest[i]); } for (int i = 0; i < data.length; i++) { int x = int(random(20, width-20)); int y = int(random(height+4,height-4)); tree = new Tree(data[i], x, height );//enter height and position of tree trees.add(tree); } //float trunk = 50; //float trunk = data.length; } void draw() { background(10, 20, 15); for (Tree tree : trees) { tree.update(); tree.show(); fill(120,200, 110); textSize(20); text("How many trees are there?", 30, 20); } }
class Tree { ArrayList<Branch> branches; int trunk, x, y, count; Tree(int trunk, int x, int y) { branches = new ArrayList<Branch>(); this.trunk = trunk; this.x = x; this.y = y; this.count = 0; PVector a = new PVector (x, y); PVector b = new PVector (x, y-trunk); Branch root = new Branch(a, b); branches.add(root); } void update() { if (count < 9) { for (int i = branches.size() -1; i >= 0; i--) { Branch current = branches.get(i); //if the current Branch has no children: add them if (!current.finished) { branches.add(current.branchA()); branches.add(current.branchB()); } //now that Branch has children current.finished = true; } //new Level added count ++; } } void show() { for (int i = 0; i < branches.size(); i++) { branches.get(i).update(); } } }
class Branch{ PVector start; PVector end; boolean finished = false; Branch(PVector start,PVector end){ this.start = start; this.end = end; } void update() { stroke(random(150,200),random(200,255),random(100,150)); line(start.x, start.y, end.x, end.y); } Branch branchA(){ PVector direction = PVector.sub(end, start); direction.rotate(PI / random(4,20)); direction.mult(0.75); PVector newEnd = PVector.add(end, direction); Branch b = new Branch(end, newEnd); return b; } Branch branchB(){ PVector dir = PVector.sub(end, start); dir.rotate(- PI / random(4,20)); dir.mult(0.75); PVector newEnd = PVector.add(end, dir); Branch b = new Branch(end, newEnd); return b; } }