倾斜的矩形如何绘制出来,求助Canvas代码?

倾斜是物体在水平或垂直方向上受到力矩作用而产生的形状变化。在Canvas中,要实现倾斜效果,通常需要通过设置矩阵来完成,因为Canvas渲染上下文没有提供直接的方法来产生倾斜效果。当矩形在水平方向上受到力矩作用时,它会变成一个平行四边形。这个效果看起来是这样的:

示例效果与源代码:

运行效果

上图中灰色矩形为原矩形,其中心点收到了水平方向的力矩作用,因此产生的结果是根据中心点的倾斜,其源代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html>
<html>

<head>
<title>变形操作(skew)</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="图形系统开发实战:基础篇 示例">
<meta name="author" content="hjq">
<meta name="keywords" content="canvas,ladder,javascript">
<script src="./js/helper.js"></script>
</head>

<body style="overflow: hidden; margin:10px;">
<canvas id="canvas" width="700" height="300" style="border:solid 1px #CCCCCC;"></canvas>
</body>
<script>
// 从页面中获取画板对象
let canvas = document.getElementById('canvas');
// 从画板中获取“2D渲染上下文”对象
let ctx = canvas.getContext('2d');
// 绘制背景网格线
drawGrid('lightgray', 10, 10);


let x = 150,
y = 50,
width = 400,
height = 200;

// 绘制普通矩形
ctx.lineWidth = 4;
ctx.strokeStyle = "#A2A2A2";
ctx.strokeRect(x, y, width, height);

// 绘制倾斜的矩形
let cx = x + width / 2,
cy = y + height / 2;
// 按矩形中心点倾斜
ctx.translate(cx, cy);
ctx.transform(1, 0, toRadians(45), 1, 0, 0);
ctx.translate(-cx, -cy);
ctx.strokeStyle = "blue";
ctx.strokeRect(x, y, width, height);

</script>

</html>

尝试一下 »