如何使用HTML5创建变换矩阵?


在下面的文章中,我们将学习如何使用HTML5创建变换矩阵。HTML5 canvas提供了可以直接修改变换矩阵的方法。变换矩阵最初必须是单位变换。然后可以使用变换方法对其进行调整。

使用transform()方法

可以使用transform()方法更改当前上下文的变换矩阵。换句话说,transform()方法允许您缩放、旋转、移动和倾斜当前上下文。

注意 - 只有在调用transform()方法后创建的图形才会受到变换的影响。

语法

以下是transform()方法的语法

ctx.transform(m11, m12, m21, m22, dx, dy)

使用setTransform()方法

在setTransform(a1, b1, c1, d1, e1, f1)方法将当前变换重置为单位矩阵后,将使用相同的参数调用transform(a1, b1, c1, d1, e1, f1)函数。

语法

以下是setTransform()方法的语法。

ctx.setTransform(m11, m12, m21, m22, dx, dy)

让我们来看下面的例子,以便更好地理解HTML5中的变换矩阵

示例1

在下面的示例中,我们使用transform()方法生成一个矩形。

<!DOCTYPE html>
<html>
<body>
   <canvas id="tutorial" width="300" height="400"></canvas>
   <script>
      var canvas = document.getElementById("tutorial");
      if (canvas.getContext){
         var ctx = canvas.getContext('2d');
         ctx.beginPath();
         ctx.lineWidth = "4";
         
         var cos=Math.cos(45*Math.PI / 180);
         var sin=Math.cos(45*Math.PI / 180);
         
         ctx.transform(cos, sin, -sin, cos, 160, 20);
         ctx.strokeStyle = "green";
         ctx.strokeRect(60, 60, 160, 160);
         ctx.stroke();
      }
   </script>
</body>
</html>

当脚本执行时,它将生成一个输出,通过触发transform方法在网页上绘制矩形。

示例2

在下面的示例中,我们使用了transform()和setTransform()方法。

<!DOCTYPE HTML>
<html>
<head>
   <script>
      function drawShape(){
         // get the canvas element using the DOM
         var canvas = document.getElementById('mycanvas');

         // Make sure we don't execute when canvas isn't supported
         if (canvas.getContext){

            // use getContext to use the canvas for drawing
            var ctx = canvas.getContext('2d');
            var sin = Math.sin(Math.PI/6);
            var cos = Math.cos(Math.PI/6);
            ctx.translate(200, 200);
            var c = 0;
            for (var i=0; i <= 12; i++) {
               c = Math.floor(255 / 12 * i);
               ctx.fillStyle = "rgb(" + c + "," + c + "," + c + ")";
               ctx.fillRect(0, 0, 100, 100);
               ctx.transform(cos, sin, -sin, cos, 0, 0);
            }
            ctx.setTransform(-1, 0, 0, 1, 200, 200);
            ctx.fillStyle = "rgba(100, 100, 255, 0.5)";
            ctx.fillRect(50, 50, 100, 100);
         } 
         else {
            alert('You need Safari or Firefox 1.5+ to see this demo.');
         }
      }
   </script>
</head>
   <body onload="drawShape();">
   <canvas id = "mycanvas" width = "400" height = "400"></canvas>
</body>
</html>

运行上面的脚本后,它将生成一个使用transform()和setTransform()方法在网页上生成的输出。

示例3

在下面的示例中,我们创建了一个数学表达式Σ n = 1。

<!DOCTYPE html>
<html>
<body onload="tutorial();">
   <canvas id = "mytutorial" width = "400" height = "450"></canvas>
   <script>
      function tutorial() {
         const ctx = document.getElementById('mytutorial').getContext('2d');
         const sin = Math.sin(Math.PI / 6);
         const cos = Math.cos(Math.PI / 6);
         ctx.translate(100, 100);
         let c = 0;
         for (let i = 0; i <= 10; i++) {
            c = Math.floor(255 / 12 * i);
            ctx.fillStyle = `rgb(88, 214, 141 )`;
            ctx.fillRect(0, 0, 100, 10);
            ctx.transform(cos, sin, -sin, cos, 0, 0);
         }
         ctx.setTransform(-1, 0, 0, 1, 100, 100);
         ctx.fillStyle = 'rgb(211, 84, 0,0.5 )';
         ctx.fillRect(0, 50, 100, 100);
      }
   </script>
</body>
</html>

当用户尝试执行脚本时,它将显示一个使用transform()和setTransform()方法在网页上生成的输出。

更新于:2022年12月16日

浏览量:231

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.