博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说 Canvas 的旋转功能
阅读量:1904 次
发布时间:2019-04-26

本文共 1225 字,大约阅读时间需要 4 分钟。

首先我们先来看看两个函数。

1 setTransform()

画布上的每个对象都拥有一个当前的变换矩阵。利用 setTransform() 我们可以缩放、旋转、移动以及倾斜当前对象。

setTransform() 方法会把当前的变换矩阵重置为单位矩阵,然后以相同的参数运行 transform()。

语法:context.setTransform(a,b,c,d,e,f);

参数 描述
a 水平缩放绘图
b 水平倾斜绘图
c 垂直倾斜绘图
d 垂直缩放绘图
e 水平移动绘图
f 垂直移动绘图

2 rotate()

rotate() 方法用于旋转当前的绘图。语法:context.rotate(angle);。angle 旋转弧度。所以如果传入的参数是角度,需要先将其转换为弧度,转换公式为弧度 = 角度 * Math.PI/180

3 示例

Steve Fulton 举了这样一个示例:

context.fillStyle = "black";context.fillRect(20, 20, 25, 25);context.setTransform(1, 0, 0, 1, 0, 0);var angleInRadians = 45 * Math.PI / 180;context.rotate(angleInRadians);context.fillStyle = "red";context.fillRect(100, 100, 50, 50);

运行结果:

这里首先绘制了一个黑色矩形,然后调用 setTransform() 方法,接着把画布旋转 45 度,最后绘制红色矩形。

注意:只有 setTransform() 方法调用之后的绘图才有效。所以之前所绘制的黑色矩形并没有被旋转!

因为没有指定旋转原点,所以默认原点在 (0,0) ,导致红色矩形旋转后,有一半的区域移到了画布之外。

4 指定原点

我们可以使用 translate(x,y) 方法来指定变换的原点。改写上面的示例:

const x = 100;const y = 100;const width = 50;const height = 50;context.translate(x + .5 * width, y + .5 * height);context.rotate(angleInRadians);context.fillStyle = "red";context.fillRect(-.5 * width, -.5 * height, width, height);

运行结果:

这里首先修改原点位置为 (125,125),即从此以后,原来的 (125,125) 变为坐标轴原点,即(0,0);接着,旋转 45 度;最后在 (-25,-25)坐标处绘制一个矩形。最后就会得到在 (-25,-25) 为起始点处,以 (0,0) 为原点旋转 45 度的矩形。

转载地址:http://hfdcf.baihongyu.com/

你可能感兴趣的文章
【H.264/AVC 句法和语义详解】(十一):Slice_Header的句法和语义
查看>>
【H.264/AVC 句法和语义详解】(十二):H264中的帧场编码模式详解
查看>>
【从零实现一个H.264码流解析器】(一):从码流中找到NALU
查看>>
PHP XML转数组
查看>>
PHP CURL请求
查看>>
关于那些加密解密的PHP方法--Star.hou
查看>>
elasticsearch PHP安装、使用
查看>>
Laravel命令行创建控制器、模型、脚本
查看>>
Python&NotePad++开发环境
查看>>
Paypal Webhook API创建
查看>>
laravel之中间件三步走--star.hou
查看>>
PHP Windows环境安装Solr扩展
查看>>
Paypal Express Checkout快速结账API心得--Star.Hou
查看>>
支付网关设计感悟(一)Star.Hou
查看>>
支付网关设计感悟(二)Star.Hou
查看>>
laravel文件上传excel - star.Hou
查看>>
git出现error: The requested URL returned error: 401 Unauthorized
查看>>
Mysql复制数据库--star.Hou
查看>>
Js关于光标对象与定位插入图片
查看>>
redis队列处理在PHP里的使用 star.Hou的红楼一梦
查看>>