例JavaScriptのパターン:パターンと並進対称変換

1.1 6花の翻訳変換

        別の場所から採取された直線運動パターンを変換する変換手段。限り、元の並進距離のTx及びTyに結合された座標として、図1に示すように、あなたは、点P「(X」、Y「)の新たな場所に位置P(x、y)をしたい場合。

        即X '= X +送信    

             Y「= Y +あなた

  

図パン午前1時

        8行および翻訳変換によりパターニング64 6花の8列の合計を描画する、基本的なデータ6花のパターンを生成します。

        下の書き込みHTMLコード。

<!DOCTYPE HTML>

<ヘッド>

<タイトル> 6つの花の翻訳変換</ TITLE>

ます。<script type = "text / javascriptの">

  関数draw(ID)

  {

     VARキャンバス=のdocument.getElementById(ID)。

     (キャンバス== null)の場合

        falseを返します。

     VARコンテキスト= canvas.getContext( '2D');

     context.fillStyle = "#1 EEEEFF"。

     context.fillRect(0,0,320,320)。

     context.strokeStyle =「青」。

     context.lineWidth = 1。

     あなたがにMath.PI / 64 =でした。

     VAR X =新しいArray();

     VaRのY =新しいアレイ();

     = 40であり; R

     //は花柄6つの基本データを生成し、

     (; I <= 128; I ++ varがI = 0)するため

     {

          D = R / 2 *(0.8 + Math.sin(18 * I * DIG)/ 10)* 1.3。

          T = D *(0.5 + Math.sin(6 * I * DIG)/ 2)。

          X [I] = T * Math.cos(I * DIG)。

          Y [I] = T * Math.sin(I * DIG)。

     }

     //変換変換することにより、8行8列64 6花柄の合計を描きます

     (;行<= 8;行++ VAR行= 1)のために

        (; COL <= 8; COL ++ VAR COL = 1)のために

        {

          //計算翻訳pxとpyの量

          PX =(2 * COL-1)/ 2 * R。

          PY =(2 *行-1)/ 2 * R。

          ための式(I 0 =; I <= 128; I ++)

          {

             X 1 = X [I] + PX。

             Y1 = Y [I] + PY。

             (私は== 0)の場合

             {

                context.moveTo(X1、Y1);

                BX = X1; よる= Y1;

             }

             そうしないと

                context.lineTo(X1、Y1);

          }

        }

     context.lineTo(BX、によります)。

     context.closePath();

     context.stroke();

   }

</ SCRIPT>

</ head>の

<ボディのonload = "( 'myCanvas')を描きます;">

<キャンバスのid =「myCanvas」幅=「320」高さ=「320」>お使いのブラウザはキャンバスをサポートしていません!

</キャンバス>

</ BODY>

</ HTML>

       図に示すように、このHTMLブラウザがHTMLテキストファイルにHTMLコードを格納し、その後、HTMLファイルを開くために、64は、ブラウザウィンドウの6つの花のパターンを描画さ見ることができる2ショー。 

2 64 6花柄

1.2対称変換

        次のように対称的な変換式は次のとおりです。

X '= AX +によって  

Y '= CX + DY

異なる値についてとき、B、C、D、異なる対称変換を生成します。

(1)場合B = C = O、= -1、D = 1、y軸に対する反射パターン対称。

(2)B = C = 0、A = 1、D = -1、x軸に対して反射パターン対称場合。

(3)場合B = C = 0、A = D = -1、反射パターンに対して生成された対称の原点。

(4)に対して、B = C = 1、D = = 0、反射パターンY = X直線対称。

直線yに対して(5)B = C = -1、A = D = 0、= -x生成反射パターン対称。

図に示すように、各対称変換。   

 

図3の対称変換

        5を順次5線を描画端と端が接続されている5点と、円周60上の分割点の半径に取り込ま、正多角形を描画することができます。これは、選択されたモード、対称変換によれば、正多角形を有する画像です。

下の書き込みHTMLコード。

<!DOCTYPE HTML>

<ヘッド>

<タイトル>対称変換</ TITLE>

ます。<script type = "text / javascriptの">

  //配列に格納された基本パターンデータの定義

  VAR X =新しいアレイ(10)。

  VAR yは新しいアレイ(10)=。

  あなたは= 2 *にMath.PI / 5でした。

  (; I <= 5; I ++ varがI = 0)するため

  {

          X [I] = - 75 + 60 * Math.sin(I * DIG)。

          Y [I] = - 75 + 60 * Math.cos(I * DIG)。

   }

   関数draw()

   {

      var sele=document.frm.shape.selectedIndex;

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

      if (canvas==null)

        return false;

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

      context.fillStyle="#EEEEFF";

      context.fillRect(0,0,300,300);

      //绘制x轴、y轴(注意:我们不进行旋转,故y轴向下)    

      context.beginPath();

      context.moveTo(0,150);

      context.lineTo(285,150);

      context.moveTo(150,0);

      context.lineTo(150,285);

      context.strokeStyle = "blue";

      context.stroke();

      context.fillStyle = "blue";

      context.beginPath();

      context.moveTo(285,145);

      context.lineTo(295,150);

      context.lineTo(285,155);

      context.closePath();

      context.fill();

      context.beginPath();

      context.moveTo(145,285);

      context.lineTo(150,295);

      context.lineTo(155,285);

      context.closePath();                 

      context.fill();

      context.fillStyle="yellow";

      context.strokeStyle="red";

      context.lineWidth=1;

      context.save();

      context.translate(150,150);

      context.beginPath();

      context.moveTo(x[0],y[0]);

      for (n=1;n<=5;n++)

      {

         context.lineTo(x[n],y[n]);

      }

      context.closePath();

      context.stroke();

      context.fill();

      context.beginPath();

      context.moveTo(x[0],y[0]);

      context.lineTo(x[2],y[2]);

      context.strokeStyle="black";

      context.stroke();

      context.fillStyle="red";

      context.strokeStyle="yellow";

      context.beginPath();

      switch(sele)

      {

       case 1: b=c=0,a=1,d=-1; break;

       case 2: b=c=0,a=-1,d=1; break;

       case 3: b=c=0,a=d=-1; break;

       case 4: b=c=1,a=d=0; break;

       case 5: b=c=-1,a=d=0; break;

      }

      context.moveTo(a*x[0]+b*y[0],c*x[0]+d*y[0]);

      for (n=1;n<=5;n++)

      {

         context.lineTo(a*x[n]+b*y[n],c*x[n]+d*y[n]);

      }

      context.closePath();

      context.stroke();

      context.fill();

      context.beginPath();

      context.moveTo(a*x[0]+b*y[0],c*x[0]+d*y[0]);

      context.lineTo(a*x[2]+b*y[2],c*x[2]+d*y[2]);

      context.strokeStyle="black";

      context.stroke();

      context.restore();

  }

</script>

</head>

<body>

<form name="frm">对称方式选择:

<select name="shape" onchange="draw();">

<option>--请选择--</option>

<option>X轴对称</option>

<option>Y轴对称</option>

<option>原点对称</option>

<option>直线Y=X对称</option>

<option>直线Y=-X对称</option>

</select>

</form>

<br/>

<canvas id="myCanvas" width="300" height="300">您的浏览器不支持canvas!</canvas>

</body>

</html>

        将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中,出现“对称方式选择:”下拉列表框,提供5种对称方式的选择,改变选定的对称方式后,可以绘制出基本图案的相应对称变换图案。整个演示过程录屏后展示如图8所示。

 

图4  图形的对称变换 

おすすめ

転載: www.cnblogs.com/cs-whut/p/12084748.html