_strutNoise = random(10);
_strutFactor = noise(_strutNoise)*3 - 1;
pentagon = new FractalRoot(frameCount);
constructor(startAngle) {
for (let i=0; i<360; i+=72) {
let x = cx+(280*cos(radians(startAngle+i)));
let y = cy+(280*sin(radians(startAngle+i)));
this.pArray.push(new PointObj(x, y));
this.rootBranch = new Branch(0, 0, this.pArray);
this.rootBranch.drawMe();
constructor(lev, n, points) {
this.outerPoints = points;
this.midPoints = this.calcMidPoints();
this.projPoints = this.calcProjPoints();
if (this.level < _maxLevels) {
let child = new Branch(this.level+1, 0, this.projPoints);
this.myBranches.push(child);
for (let k=0; k<this.outerPoints.length; k++) {
let nextk = (k+4)%this.outerPoints.length;
let newPoints = new Array(this.outerPoints[k], this.midPoints[k], this.projPoints[k], this.projPoints[nextk], this.midPoints[nextk]);
child = new Branch(this.level+1, k+1, newPoints);
this.myBranches.push(child);
strokeWeight(5-this.level);
for (let i=0; i<this.outerPoints.length; i++) {
if (nexti === this.outerPoints.length) {
line(this.outerPoints[i].x, this.outerPoints[i].y, this.outerPoints[nexti].x, this.outerPoints[nexti].y);
for (let j=0; j<this.midPoints.length; j++) {
for (let k=0; k<this.myBranches.length; k++) {
this.myBranches[k].drawMe();
calcMidPoint(end1, end2) {
let mx = (end1.x + end2.x)/2;
let my = (end1.y + end2.y)/2;
let mp = new PointObj(mx, my);
for (let i=0; i<this.outerPoints.length; i++) {
if (nexti == this.outerPoints.length) {
let thisMP = this.calcMidPoint(this.outerPoints[i], this.outerPoints[nexti]);
let px = mp.x + ((op.x - mp.x) * _strutFactor);
let py = mp.y + ((op.y - mp.y) * _strutFactor);
let pp = new PointObj(px, py);
for (let i=0; i<this.midPoints.length; i++) {
let nexti = (i+3)%this.midPoints.length;
let thisPP = this.calcProjPoint(this.midPoints[i], this.outerPoints[nexti]);