HTML canvas中translate()与rotate()的理解
首先,当我们在页面上初始化canvas时,相当于在上面放了一块画布,这块画布我们可以理解为上面有一个坐标系(如下图),左上角是原点,往右是X轴的正方向,往下是Y轴的正方向,我们在画布上绘制的内容都是基于这个坐标系完成,但是有时候我们需要对绘制的内容进行调整,例如将上面的一个图形旋转某个角度,或者在画布正中心画一个图形,我们就可以通过translate和rotate将坐标系进行移动之后再进行绘制.
还有,rotate的旋转是以原点为基准进行旋转,,这一点很重要
功能与参数介绍
函数 | 参数 | 描述 |
---|---|---|
translate | dx,dx | 将坐标系在X轴和Y轴移动的距离 |
rotate | angle | 坐标系旋转的角度,顺时针为正,,逆时针为负 |
save | 保存当前坐标系的状态 | |
restore | 恢复上一次坐标系状态 |
当我们不对画布进行旋转和移动的时候,在上面绘制一个矩形,是这样子的
可以看到此时是基于左上角进行绘制的,如果我们用translate将它向右和向下移动200px和100px呢
可以看到,画布位置没有改变,我们移动的只是坐标系,如果我们继续在上面绘制图形,仍然是以现在这个位置的坐标系为准,如果我们只想在这个位置画一次之后就恢复坐标系原始位置,我们应该在移动之前调用save()保存状态,绘制后调用restore()恢复.
如果我们想将最开始的矩形以自身中心旋转90°呢,想看代码和效果图
emmmm...没有计算好,导致有点跑偏,但是它还是以自己为中心转了90°,但是没事,不影响理解rorate和translate这两个函数配合的理解。
首先看红色框中的第一行代码,执行后坐标系是这样的
第二行代码旋转后是这样的
注意看此时X轴和Y轴已经改变,以及正方向的方向。第三行代码执行后如下
- 为什么会往右上方跑呢?因为我们translate中的参数是负数,而此时坐标轴的正值方向是左边和下边,所以是往右边和上边跑
- 为什么原点会跑出画布之外?因为X轴移动的距离是width/2,而竖直方向空间不足,就继续往上走了。
通过坐标系来说明这两个函数主要是因为最近做的一个项目中需要将画布上面绘制的图片以图片自身为中心旋转90°或者180°,而看了许多博客后比较少通过坐标系来讲解这两个函数,尝试了很久之后发现通过坐标系来理解虽然麻烦,但是感觉简单点。
HTML canvas中translate()与rotate()的理解的更多相关文章
- 将canvas中左上角的原点坐标位置改为左下角
在使用canvas的时候,原点坐标在左上角,这个很犯人,因为一般的坐标基本都是在左下角,即笛卡尔坐标系,那怎么进行转变呢,在这里用到了canvas的translate,rotate,和scale进行转 ...
- android canvas中rotate()和translate()两个方法详解
rotate()和translate() 1.看到这个题目的时候,有人会觉得这不就是一个对画布的旋转和平移的嘛,但是其中的细节的地方还是需要深究一下的. 例如:有个需求将TextView的文字竖直显示 ...
- 马尾图案之canvas的translate、scale、rotate的方法详解
1.translate(x,y):平移 将画布的坐标原点向左右方向移动x,向上下方向移动y.canvas的默认位置是在(0,0). 例子:画布原点假如落在(1,1),那么translate(10,1 ...
- 讲解Canvas中的一些重要方法
Canvas所提供的各种方法根据功能来看大致可以分为几类: 第一是以drawXXX为主的绘制方法: 第二是以clipXXX为主的裁剪方法: 第三是以scale.skew.translate和rotat ...
- Canvas中的save方法和restore方法
初学者也许会误认为canvas中save方法是用来保存绘图状态的图形,而restore方法是用来还原之前保存的绘图状态的图形,其实不然. save():保存当前的绘图状态. restore():恢复之 ...
- 图片在 canvas 中的 选中/平移/缩放/旋转,包含了所有canvas的2D变化,让你认识到数学的重要性
1.介绍 canvas 已经出来好久了,相信大家多少都有接触. 如果你是前端页面开发/移动开发,那么你肯定会有做过图片上传处理,图片优化,以及图片合成,这些都是可以用 canvas 实现的. 如果你是 ...
- 转:自定义控件三部曲之动画篇——alpha、scale、translate、rotate、set的xml属性及用法
第一篇: 一.概述 Android的animation由四种类型组成:alpha.scale.translate.rotate,对应android官方文档地址:<Animation Resour ...
- Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法
一.概述 Android的animation由四种类型组成:alpha.scale.translate.rotate,对应android官方文档地址:<Animation Resources&g ...
- [转]Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法
转载:http://blog.csdn.net/harvic880925/article/details/39996643 前言:这几天做客户回访,感触很大,用户只要是留反馈信息,总是一种恨铁不成钢的 ...
随机推荐
- [19/09/16-星期一] Python的运算符和条件判断语句
一.运算符 (1)算术运算符 + 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作) a = 10 + 5 计算 a = 'hello' + ' ' + 'world' 拼串 - ...
- 全新一台node节点加入到集群中
目录 前言 对新节点做解析 方法一 hosts 文件解析 方法二 bind 解析 测试 分发密钥对 推送 CA 证书 flanneld 部署 推送flanneld二进制命令 推送flanneld秘钥 ...
- lb开金矿 QDUOJ 数论
lb开金矿 QDUOJ 数论 原题链接,点我进去 题意 大家都知道lb有n个小弟(编号从2到n+1),他们可以按照规则传递信息:某天编号为i的小弟收到信息后,那么第二天他会给编号为j的小弟传达信息,其 ...
- React 使用相对于根目录进行引用组件
在对自己开发的组件中经常会做诸如以下的引用: import genFetchEntryListArgs from '../../../utils/table/genFetchEntryListArgs ...
- vue-split-table【表格合并和编辑插件】
前言 vue-split-table应用的效果图 vue-split-table开源地址,欢迎star,现在已经开源和同步到npm上轻松搞定表格拆分或者合并,编辑,再也不怕被产品怼啦 1.核心源码分析 ...
- jquery TAB切换小插件
//tab切换 ;(function($, window, document, undefined) { $.fn.tab = function(options) { var defaults = { ...
- ThinkPHP5 支付宝支付扩展库(超级简单,超级好用!)
ThinkPHP5 支付宝支付扩展库, 一个静态方法的调用就可以实现,包括手机网站支付.电脑网站支付.支付查询.退款.退款查询.对账单所有功能,而且是2017年7月20日最新版~我的想法是,调用一个静 ...
- linux Apache 日志轮询
安装日志轮询工具 cronolog [root@Nagios-Server tools]# wgethttp://cronolog.org/download/cronolog-1.6.2.tar.gz ...
- Nginx服务项的基本配置
由于Nginx配置项较多,把他们按照用户使用时的预期功能分为以下4类: 1.调试,定位问题的配置项 2.正常运行必备配置项 3.优化性能配置项 4.事件类配置项 1. 用于调试进程,定位问题的配置项 ...
- Linux学习--第六天--软件包
yum在线管理 管理的是rpm包,光盘里面都有 /etc/yum.repos.d下面有四个文件,对应网络yum源,光盘yum源等.如果需要用到哪个源,将其他三个源的enabled设置为0即可. |源配 ...