paper.install(window); var baum = { length: 30, angle: Math.PI / 2, crown: { shape: "kite", length: 130, width: 0.3, bisect: 0.3, }, forks: [ { pos: 0.3, branch: { angle: 0.3, length: 30, crown: { shape: "kite", length: 50, width: 0.3, bisect: 0.3, }, forks: [ { pos: 0.6, branch: { angle: Math.PI/2.5, length: 40, crown: { shape: "kite", length: 70, width: 0.3, bisect: 0.3, }, }, } ], }, }, { pos: 0.5, branch: { angle: 3*Math.PI /4, length: 30, crown: { shape: "kite", length: 50, width: 0.3, bisect: 0.3, }, }, } ], }; function gen_branch(level=0, shape=null, invertAngle=false) { var baum = {}; var fac = 1; var lfac = 1; if(level > 0) { lfac = 1.2; //fac = 1 / (level*2); fac = 0.5; } baum.length = (20 + Math.random() * 20) * lfac; if(shape == null) { if(Math.random() < 0.5) { shape = "kite"; } else { shape = "triangle"; } } baum.crown = {shape: shape}; if(shape == "kite") { baum.crown.length = (70 + Math.random() * 30) * fac; baum.crown.width = 0.4 + Math.random() * 0.2; baum.crown.bisect = 0.3 + Math.random() * 0.1; } else if(shape == "triangle") { baum.crown.length = (70 + Math.random() * 30) * fac; baum.crown.width = 0.4 + Math.random() * 0.2; //baum.crown.bisect = 0.3 + Math.random() * 0.1; } if(level == 0) { baum.angle = Math.PI / 2; } else if(level % 2 == 1) { //if(Math.random() < 0.5) { if(invertAngle) { baum.angle = Math.PI / 4 + Math.random() * 0.45; } else { baum.angle = Math.PI - Math.PI / 4 - Math.random() * 0.45; } } else { baum.angle = Math.PI/2 + (Math.random() * 0.6 - 0.3); } if(level == 0) { baum.forks = []; for(var i=0; i