美文网首页华东交通大学H5
canvas变换方法原理探究

canvas变换方法原理探究

作者: Kagashino | 来源:发表于2016-12-17 13:32 被阅读60次

下午就考六级了,现在还闲不住。。。。

我们今天讲解画布对象3种变换方法:

scale,对x,y两个方向进行比例缩放
translate,平移
rotate,旋转

先来个矩形,再画2条基线:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>画布变换规律探究</title>
</head>
<body>
    <canvas id="cvs1" width="400" height="400" style="background:#6cf">你的浏览器是低版本的IE?太不幸了,换一个吧</canvas>
</body>
    <script>
        var ctx = document.getElementById('cvs1').getContext('2d');
        ctx.strokeStyle = "black";
        ctx.strokeRect(0,10,400,0);
        ctx.strokeRect(10,0,0,400);
        ctx.fillStyle="#d33";
        ctx.fillRect(10,10,40,100);
    </script>
</html>

QQ截图20161217122633.png

我们在参考线渲染之后加入scale方法,使得矩形渲染之前变换:

QQ截图20161217123541.png

得到的是这个:


QQ截图20161217123548.png

我们发现,用scale方法对X轴进行拉伸时,矩形的位置也偏移了,为什么呢?

原因:scale方法是针对整个画布缩放,缩放参考点默认在左上角

假如我们把矩形放在左上角渲染,scale不变:

QQ截图20161217124119.png QQ截图20161217124356.png

可以看到,方形位置不偏移了,验证了我们所说:<strong>“scale参考点默认在左上角”</strong>的说法

接下来我们使用translate方法偏移整个画布:

QQ截图20161217124603.png QQ截图20161217124610.png
可以看到,矩形位置也不再像第一次那样偏移,因为锚点、矩形跟随着整个画布移动了
核心结论:scale、translate方法都是作用在画布而不是里面的某个图形中
特别说明一点,两条基准线是在我使用变换方法之前渲染的,渲染之后所有的方法都对基线无效!

同样的的原理也适用于rotate方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>画布原理</title>
</head>
<body>
    <canvas id="cvs1" width="400" height="400" style="background:#ddf">你的浏览器是低版本的IE?太不幸了,换一个吧</canvas>
</body>
    <script>
        var ctx = document.getElementById('cvs1').getContext('2d');
        ctx.strokeStyle = "black";
        ctx.strokeRect(0,200,400,0);//把线移到画布中央
        ctx.strokeRect(200,0,0,400);
        ctx.fillStyle="#d33";
        ctx.fillRect(200,200,40,100);//矩形也跟着落在画布中央
    </script>
</html>
QQ截图20161217125357.png

加入rotate方法,顺时针偏移10度:

QQ截图20161217130406.png

那么我们对画布做了什么呢?请看下面:

rtt.gif

如果我们把画布也偏移到200,200的地方,

QQ截图20161217131955.png

相当于这样(6M的GIF...):

如果上述translate、scale、rotate方法执行多次,那么会一直叠加,想想看下面的图形都是怎么做出来的?

QQ截图20161217134143.png QQ截图20161217134247.png

下期给答案

如果看完以后理解了,记得给个❤,谢谢

相关文章

  • canvas变换方法原理探究

    下午就考六级了,现在还闲不住。。。。 我们今天讲解画布对象3种变换方法: scale,对x,y两个方向进行比例缩放...

  • 自定义View基础(二)

    Canvas 对绘制的辅助 Canvas 对绘制的辅助——范围裁切和几何变换 1 范围裁切 范围裁切有两个方法: ...

  • H5 新特性03

    Canvas 进阶 变换--位移 translate(x, y) 变换-旋转 rotate(deg) 变换...

  • canvas的线性变换原理

    线性变换 canvas提供的scale和rotate等都是很简单好用的api,但底层原理是什么呢? 缩放 先来看缩...

  • Canvas&Paint 知识梳理(1) - Canva

    一、概述 经过前面对绘制原理的学习,我们知道当View的onDraw(Canvas canvas)方法被调用时,会...

  • 8个前端知识点:HTML5(canvas应用)

    (1) 应用 canvas笑脸 (2) 应用 canvas画图 (3) 应用 canvas变换 (4) 应用 ca...

  • 三、Canvas基本绘图

    Canvas绘图(二) 本章将学习Canvas绘图的以下技巧 裁剪区域 图象合成 简单的Canvas变换 一、设置...

  • 黑箱理论和等价信息的运用

    今天吴军老师着重讲解了等价信息的概念、原理和应用方法,并讲解了傅立叶变换和离散余弦变换的原理,最后举出核磁...

  • View绘制画布的操作

    一、canvas的几何变换 对canvas进行平移、旋转、缩放、倾斜、裁减后,canvas将不会主动恢复原状,后续...

  • 自定义View Canvas的范围裁切与几何变换

    Canvas 对绘制的辅助--范围裁切与几何变换 1.范围裁切 范围裁切有两个方法:clipRect(),clip...

网友评论

    本文标题:canvas变换方法原理探究

    本文链接:https://www.haomeiwen.com/subject/wrbomttx.html