commit 1477a39c9b7cff4f99eba5f724c6806c54378685 Author: Fr3deric Date: Thu Feb 7 08:32:06 2019 +0100 initial commit diff --git a/baumgen.html b/baumgen.html new file mode 100644 index 0000000..dfcc7dd --- /dev/null +++ b/baumgen.html @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/baumgen.js b/baumgen.js new file mode 100644 index 0000000..8392d46 --- /dev/null +++ b/baumgen.js @@ -0,0 +1,214 @@ + +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