diff --git a/lindenmayer-system/lindenmeyer-system.html b/lindenmayer-system/lindenmeyer-system.html index 8a2df2a..8e62c9b 100644 --- a/lindenmayer-system/lindenmeyer-system.html +++ b/lindenmayer-system/lindenmeyer-system.html @@ -182,6 +182,70 @@ function sierpinski() { } + /************************************************ + * some other tree + ************************************************/ + + function other_tree(num_defects) { + project.clear(); + if(typeof num_defects == 'undefined') { num_defects = 0 }; + var r = generate( + 'iIjX'.split(''), + [ + ['X'.split(''), 'F[-lfX][cfX][+rfX]'.split('')], + //['F'.split(''), 'FF'.split('')], + //['L'.split(''), 'LL'.split('')], + //['C'.split(''), 'CC'.split('')], + //['R'.split(''), 'RR'.split('')], + ], + 8 + ); + + var n = 0; + while(n < num_defects) { + var rnd = Math.floor(Math.random()*r.length); + if((r[rnd] != '[') & (r[rnd] != ']')) { + r[rnd] = '*'; + if(Math.random() > 0.9) { + if(Math.random() < 0.5) { + r.splice(rnd, 0, '+'); + } else { + r.splice(rnd, 0, '-'); + } + } + n += 1; + } + } + + console.log(r); + var p = draw( + r, + { + 'F': draw_forward(), + 'f': draw_forward(0.5), + + 'l': draw_stepsize_mul(0.7), + 'c': draw_stepsize_mul(0.8), + 'r': draw_stepsize_mul(0.7), + + 'i': draw_set_dir(Math.PI), + 'I': draw_angle_init(25/180 * Math.PI), + 'j': draw_set_turn_noise(1), + + '*': draw_angle_add((Math.random() - 0.5) * 0.01), + '-': draw_angle_turn(-1), + '+': draw_angle_turn(1), + '[': draw_state_push(), + ']': draw_state_pop(), + } + ); + p.scale(60); + p.translate(new Point(200, 200)); + p.strokeWidth = 1; + p.strokeColor = '#ff00ff'; + } + + /************************************************ * ************************************************/ @@ -190,6 +254,7 @@ globals.dragon_curve = dragon_curve; globals.sierpinski2 = sierpinski2; globals.sierpinski = sierpinski; globals.barnsley_fern = barnsley_fern; +globals.other_tree = other_tree; globals.get_svg = function() { return project.exportSVG({asString: true}); @@ -247,6 +312,10 @@ window.onload = function() { window.globals.barnsley_fern(150); }); + document.getElementById('other-tree').addEventListener('click', function() { + window.globals.other_tree(); + }); + } @@ -260,6 +329,7 @@ window.onload = function() { +