JavaScriptは雪のようなHexaflakeのフラクタルを実現します。


下記の関数を作成します。

  function drawHexagon(x,y,L)

  {

    ctx.beginPath();

    ctx.moveTo(x-sqrt3/2*L,y-L/2);

    ctx.lineTo(x-sqrt3/2*L,y+L/2);

    ctx.lineTo(x,y+L);

    ctx.lineTo(x+sqrt3/2*L,y+L/2);

    ctx.lineTo(x+sqrt3/2*L,y-L/2);

    ctx.lineTo(x,y-L);

    ctx.closePath();

    ctx.fillStyle = "#00FFFF";

    ctx.fill();

  }
      関数のsqrt 3の値はMath.sqrt(3)です。この関数の機能は、座標(x,y)を中心として、辺の長さをLとした正六辺形で塗りつぶします。

      以下の呼出文を作成します。

  var x=250;

  var y=250;

  var L=200;

  drawHexagon(x,y-2*L/3,L/3);

  drawHexagon(x,y,L/3);

  drawHexagon(x,y+2*L/3,L/3);

  drawHexagon(x-sqrt3/3*L,y+L/3,L/3);

  drawHexagon(x-sqrt3/3*L,y-L/3,L/3);

  drawHexagon(x+sqrt3/3*L,y+L/3,L/3);

  drawHexagon(x+sqrt3/3*L,y-L/3,L/3);
      下の図のように7つの正六辺形を描くことができます。この7つの正六辺形はちょうど(x,y)を中心とした辺長Lの大正六辺形に塗り込められています。

      Hexaflaakeフラクタルパターンの構造過程は、(x,y)を中心として、辺の長さをLとする正六辺形に描いて、色を塗りつぶします。この正六辺形の中に7つの点を見つけて、この7つの点を中心にそれぞれ7つの辺の長さをL/3とする正六辺形を描いて、色を塗りつぶして、元の辺の長さをLとする正六辺形に変えます。以上の操作を繰り返して、要求される階数に達するまでに、Hexaflaakeのフラクタルパターンを描画できます。下の図のように。

      Hexaflaakeフラクタルは再帰プロセスを採用して実現しやすく、下記のHTMLコードを作成します。

<!DOCTYPE html>

<head>

<title>Hexaflake  </title>

</head>

<body>

<canvas id="myCanvas" width="500" height="500" style="border:3px double #996633;">

</canvas>

<script type="text/javascript">

  var canvas = document.getElementById('myCanvas');

  var ctx = canvas.getContext('2d');

  var maxdepth =4;

  var sqrt3=Math.sqrt(3);

  function drawHexagon(x,y,L)

  {

    ctx.beginPath();

    ctx.moveTo(x-sqrt3/2*L,y-L/2);

    ctx.lineTo(x-sqrt3/2*L,y+L/2);

    ctx.lineTo(x,y+L);

    ctx.lineTo(x+sqrt3/2*L,y+L/2);

    ctx.lineTo(x+sqrt3/2*L,y-L/2);

    ctx.lineTo(x,y-L);

    ctx.closePath();

    ctx.fillStyle = "#00FFFF";

    ctx.fill();

  }

  function drawHexaflake(n,x,y,L)

  {

    if(n>0)

    {

      drawHexaflake(n-1,x,y-2*L/3,L/3);

      drawHexaflake(n-1,x,y,L/3);

      drawHexaflake(n-1,x,y+2*L/3,L/3);

      drawHexaflake(n-1,x-sqrt3/3*L,y+L/3,L/3);

      drawHexaflake(n-1,x-sqrt3/3*L,y-L/3,L/3);

      drawHexaflake(n-1,x+sqrt3/3*L,y+L/3,L/3);

      drawHexaflake(n-1,x+sqrt3/3*L,y-L/3,L/3);

    }

    else

      drawHexagon(x,y,L);

  }

  drawHexaflake(maxdepth,250,250,200);

</script>

</body>

</html>
       ブラウザでこのHTMLコードを含むhtmlファイルを開くと、ブラウザのウィンドウに描かれたHexaflakeのフラクタルが下図のように見えます。

      実行文:  

ctx.fillStyle="black";
ctx.fillRect(0,0,500,500);
      スクリーンの背景を黒に設定し、絵の六角形を白い色で塗りつぶすと、ブラウザのウィンドウに描かれたHexaflaakeのフラクタル模様が雪の花のように見える。

      Hexaflaakeのフラクタル生成過程を動的に展示し、下記のHTMLファイルを作成します。

<!DOCTYPE html>

<head>

<title>Hexaflake  </title>

</head>

<body>

<canvas id="myCanvas" width="500" height="500" style="border:3px double #996633;">

</canvas>

<script type="text/javascript">

  var canvas = document.getElementById('myCanvas');

  var ctx = canvas.getContext('2d');

  var depth =0;

  var sqrt3=Math.sqrt(3);

  function drawHexagon(x,y,L)

  {

    ctx.beginPath();

    ctx.moveTo(x-sqrt3/2*L,y-L/2);

    ctx.lineTo(x-sqrt3/2*L,y+L/2);

    ctx.lineTo(x,y+L);

    ctx.lineTo(x+sqrt3/2*L,y+L/2);

    ctx.lineTo(x+sqrt3/2*L,y-L/2);

    ctx.lineTo(x,y-L);

    ctx.closePath();

    ctx.fillStyle = "#FFFFFF";

    ctx.fill();

  }

  function drawHexaflake(n,x,y,L)

  {

    if(n>0)

    {

      drawHexaflake(n-1,x,y-2*L/3,L/3);

      drawHexaflake(n-1,x,y,L/3);

      drawHexaflake(n-1,x,y+2*L/3,L/3);

      drawHexaflake(n-1,x-sqrt3/3*L,y+L/3,L/3);

      drawHexaflake(n-1,x-sqrt3/3*L,y-L/3,L/3);

      drawHexaflake(n-1,x+sqrt3/3*L,y+L/3,L/3);

      drawHexaflake(n-1,x+sqrt3/3*L,y-L/3,L/3);

    }

    else

      drawHexagon(x,y,L);

  }

  function go()

  {

    ctx.fillStyle = "#000000";

    ctx.fillRect(0,0,500,500); 

    drawHexaflake(depth,250,250,200);

    depth++;

    if (depth>4)

    {

      depth=0;

    }

  }

  window.setInterval('go()',1500);

</script>

</body>

</html>
      ブラウザでこのHTMLコードを含むhtmlファイルを開き、ブラウザのウィンドウで下記の図のようなHexaflakeのフラクタルダイナミックな生成効果が現れます。

以上はJavaScriptが雪のようなHexaflakeのフラクタルの詳細を実現しました。JavaScript Hexaflaakeフラクタルのフラクタルに関する資料は他の関連記事に注目してください。