I'm a newbie in coding and I have been playing with Fractal tree and OOP from the Coding Train videos.
The tree is generated as object trunks with its child branches in constructor function.
class Branch {
constructor(begin, end) {
this.begin = begin;
this.end = end;
this.finished = false;
}
jitter() {
this.end.x += random(-1, 1);
this.end.y += random(-1, 1);
}
show() {
stroke(255);
line(this.begin.x, this.begin.y, this.end.x, this.end.y);
}
branchA() {
let dir = p5.Vector.sub(this.end, this.begin);
dir.rotate(PI / 6);
dir.mult(0.67);
let newEnd = p5.Vector.add(this.end, dir);
let b = new Branch(this.end, newEnd);
return b;
}
branchB() {
let dir = p5.Vector.sub(this.end, this.begin);
dir.rotate(-PI / 4);
dir.mult(0.67);
let newEnd = p5.Vector.add(this.end, dir);
let b = new Branch(this.end, newEnd);
return b;
}
}
// Fractal Trees - Object Oriented
// Coding Train / Daniel Shiffman
// https://thecodingtrain.com/challenges/15-object-oriented-fractal-trees
// https://youtu.be/fcdNSZ9IzJM
// Code from challenge: https://editor.p5js.org/codingtrain/sketches/JDT5wrxVj
let tree = [];
let leaves = [];
let count = 0;
function setup() {
createCanvas(400, 400);
let a = createVector(width / 2, height);
let b = createVector(width / 2, height - 100);
let root = new Branch(a, b);
tree[0] = root;
}
function mousePressed() {
for (let i = tree.length - 1; i >= 0; i--) {
if (!tree[i].finished) {
tree.push(tree[i].branchA());
tree.push(tree[i].branchB());
}
tree[i].finished = true;
}
count++;
if (count === 6) {
for (var i = 0; i < tree.length; i++) {
if (!tree[i].finished) {
let leaf = tree[i].end.copy();
leaves.push(leaf);
}
}
}
}
function draw() {
background(51);
for (var i = 0; i < tree.length; i++) {
tree[i].show();
tree[i].jitter();
}
for (var i = 0; i < leaves.length; i++) {
fill(255, 0, 100, 100);
noStroke();
ellipse(leaves[i].x, leaves[i].y, 8, 8);
leaves[i].y += random(0, 2);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"></script>
I've tried various attempts to no avail.
One that had best outcome was in the branch class show function
show ()
{
push();
translate(this.begin.x, this.begin.y);
rotate(cos(frameCount/360);
stroke(255);
line(0,0, this.end.x - this.begin.x, this.end.y - this.begin.y);
pop();
stroke(255);
}