Дерево Пифагора

С Википедии

 

  Дерево Пифагора
  
    // функция рисует под углом angle линию из указанной точки длиной ln
    function drawLine(x, y, ln, angle)
    {
      context.moveTo(x, y);
      context.lineTo(Math.round(x + ln * Math.cos(angle)), Math.round(y - ln * Math.sin(angle)));
    }
    // Функция рисует дерево
    function drawTree(x, y, ln, minLn, angle)
    {
      if (ln > minLn)
      {
        ln = ln * 0.75;
        drawLine(x, y, ln, angle);
        x = Math.round(x + ln * Math.cos(angle));
        y = Math.round(y - ln * Math.sin(angle));
        drawTree(x, y, ln, minLn, angle + Math.PI / 4);
        drawTree(x, y, ln, minLn, angle - Math.PI / 6);
        // если поставить угол Math.PI/4 , то выйдет классическое дерево
      }
    }
    // Инициализация переменных
    function init()
    {
      var canvas  = document.getElementById("tree");
      var x       = 100 + (canvas.width / 2);
      var y       = 170 + canvas.height;  // положении ствола
      var ln      = 120;                  // начальная длина линии
      var minLn   = 5;                    // минимальная длина линии
 
      canvas.width  = 480; // Ширина холста
      canvas.height = 320; // высота холста
 
      context             = canvas.getContext("2d");
      context.fillStyle   = "#ddf"; // цвет фона
      context.strokeStyle = "#020"; //цвет линий
      context.fillRect(0, 0, canvas.width, canvas.height);
      context.lineWidth = 2; // ширина линий
      context.beginPath();
      drawTree(x, y, ln, minLn, Math.PI / 2);
      context.stroke();
    }
 
    window.onload = init;