HTML|HTML canvas中translate()与rotate()的理解
首先,当我们在页面上初始化canvas时,相当于在上面放了一块画布,这块画布我们可以理解为上面有一个坐标系(如下图),左上角是原点,往右是X轴的正方向,往下是Y轴的正方向,我们在画布上绘制的内容都是基于这个坐标系完成,但是有时候我们需要对绘制的内容进行调整,例如将上面的一个图形旋转某个角度,或者在画布正中心画一个图形,我们就可以通过translate和rotate将坐标系进行移动之后再进行绘制.
还有,rotate的旋转是以原点为基准进行旋转,,这一点很重要
1.png 功能与参数介绍
函数 | 参数 | 描述 |
---|---|---|
translate | dx,dx | 将坐标系在X轴和Y轴移动的距离 |
rotate | angle | 坐标系旋转的角度,顺时针为正,,逆时针为负 |
save | 保存当前坐标系的状态 | |
restore | 恢复上一次坐标系状态 |
文章图片
2.png
文章图片
3.png
可以看到此时是基于左上角进行绘制的,如果我们用translate将它向右和向下移动200px和100px呢
文章图片
4.png
文章图片
5.png
【HTML|HTML canvas中translate()与rotate()的理解】可以看到,画布位置没有改变,我们移动的只是坐标系,如果我们继续在上面绘制图形,仍然是以现在这个位置的坐标系为准,如果我们只想在这个位置画一次之后就恢复坐标系原始位置,我们应该在移动之前调用save()保存状态,绘制后调用restore()恢复.
6.png
如果我们想将最开始的矩形以自身中心旋转90°呢,想看代码和效果图
文章图片
7.png
文章图片
8.png
emmmm...没有计算好,导致有点跑偏,但是它还是以自己为中心转了90°,但是没事,不影响理解rorate和translate这两个函数配合的理解。
首先看红色框中的第一行代码,执行后坐标系是这样的
文章图片
9.png
第二行代码旋转后是这样的
文章图片
10.png
注意看此时X轴和Y轴已经改变,以及正方向的方向。第三行代码执行后如下
11.png
- 为什么会往右上方跑呢?因为我们translate中的参数是负数,而此时坐标轴的正值方向是左边和下边,所以是往右边和上边跑
- 为什么原点会跑出画布之外?因为X轴移动的距离是width/2,而竖直方向空间不足,就继续往上走了。
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理