如何使用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()方法在网页上生成的输出。
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP