ツナドーナツ・技術メモ帳

色々なものを作る過程で分からなかったことなどを書いていきます

シダのフラクタルを描く

コメント後で書きます

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>シダを描く</title>
</head>
<body>
  <canvas id="canvas" width="640" height="480"></canvas>
  <script>

  function drawLoopArc() {
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext('2d');
    var width = canvas.width;
    var height = canvas.height;
    var scaleX = 60;
    var scaleY = 45;
    var x1 = 1.0;
    var y1 = 0.0;
    var x2 = 0.0;
    var y2 = 0.0;
    var size = 2;
    var pi = Math.PI * 2;

    function drawArc(){
      //ctx.beginPath();
      //ctx.arc(x1 * width, height - (height * y1), size, 0, pi, true);
      console.log("x1:", x1 * width, "y1:", y1 * height);
      ctx.fillRect(320 + (x1 * scaleX), height - (scaleY * y1), size, size);
    }

    function rand(){
      var r;
      r = Math.floor(Math.random() * 100);
      return r;
    }

    function processing() {
      if(rand() % 100 < 1){
        x2 = 0.0;
        y2 = 0.16 * y1;
        x1 = x2;
        y1 = y2;
        drawArc();
      }else if(rand() % 100 <= 7){
        x2 = -0.15 * x1 + 0.28 * y1;
        y2 = 0.26 * x1 + 0.24 * y1 + 0.44;
        x1 = x2;
        y1 = y2;
        drawArc();
      }else if(rand() % 100 <= 14){
        x2 = 0.2 * x1 - 0.26 * y1;
        y2 = 0.23 * x1 + 0.22 * y1 + 1.6;
        x1 = x2;
        y1 = y2;
        drawArc();
      }else{
        x2 = 0.85 * x1 + 0.04 * y1;
        y2 = -0.04 * x1 + 0.85 * y1 + 1.6;
        x1 = x2;
        y1 = y2;
        drawArc();
      }
    }

    for(var i = 0;i < 10000;i++){
      processing();
    }
  }
  drawLoopArc();
  </script>
</body>
</html>