canvas基础—图形变换

摘要:
1.画布转换方法1.1画布转换方法2。Canvas实现绘图中心点的旋转步骤1:获取画布元素并指定画布绘图环境varcanvas=document。getElementById('canvas');varcontext=canvas.getContext('2d');步骤2:在画布的位置绘制一个100*100的矩形context.fillRe(100100)

1、canvas转换方法

1.1canvas转换方法

canvas基础—图形变换第1张

二、canvas实现图形的中心点旋转

step1:获取canva元素并指定canvas的绘图环境

    var canvas=document.getElementById('canvas');
    var context=canvas.getContext('2d');

step2:在画布(100,100)的位置绘制一个100*100的矩形

context.fillRect(100,100,100,100);

step3:要实现图片的中心旋转,首先我们需要将画布的(0,0)位置移到绘制的矩形的中心点的位置,(即图中(150,150)位置为(0,0)位置),并且以新的圆点为坐标,绘制一个一样大的矩形。如图(为了形象理解,下图是在软件中绘制出来的,在颜色上做了个区分,实际代码里并没有区分颜色,图中(150,150)位新的坐标原点)

canvas基础—图形变换第2张

context.translate(150,150);
context.fillRect(0,0,100,100);

 step4:接下来我们将矩形旋转45度角(备注:在canvas中,旋转,平移都需要在矩形绘制之前执行),所以接下来我们将代码改成下图所示:

context.fillRect(100,100,100,100);
context.translate(150,150);
context.rotate(90*Math.PI/180);
context.fillRect(0,0,100,100);

canvas基础—图形变换第3张

step5:此时的圆点位置在(150,150)的位置,我们需要将圆点位置还原成(100,100)的位置,也就是需要向左平移50个像素,向上平移50个像素,如下代码

context.fillRect(100,100,100,100);
context.translate(150,150);
context.rotate(90*Math.PI/180);
context.translate(-50,-50)
context.fillRect(0,0,100,100);

 canvas基础—图形变换第4张

 总结:用canvas实现中心旋转,主要有以下几步

  1. 第一步:确定中心点

   图形的坐标圆点的x轴/y轴+(图形的宽度/高度/2);

   例如:上述例子中,矩形的圆点坐标为(100,100),矩形的宽高为(100,100);那么圆点的位置则为(100+100/2,100+100/2),即(150,150)

   2.第二步:将画布的原点移到中心点的位置

   3.第三步:旋转

   4.第四步:将画布的原点移动到图形的原点位置

   5.第五步:以新的原点为图形的原点坐标,开始绘制图形

免责声明:文章转载自《canvas基础—图形变换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇df,dh 命令DTU的通讯工作模式有哪些下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

重新整理 .net core 实践篇—————中间件[十九]

前言 简单介绍一下.net core的中间件。 正文 官方文档已经给出了中间件的概念图: 和其密切相关的是下面这两个东西: IApplicationBuilder 和 RequestDelegate(HttpContext context) IApplicationBuilder : public interface IApplicationBuilde...

EditText 默认不弹键盘 焦点

今天编程碰到了一个问题:有一款平板,打开一个有EditText的Activity会默认弹出输入法。为了解决这个问题就深入研究了下android中焦点Focus和弹出输入法的问题。在网上看了些例子都不够全面,在这里全面总结下。 一:EditText为什么会默认弹出输入法? 同样的代码,碰到有EditText控件的界面时有的机子会弹出输入法,有的机子不会弹出。...

Android透明无边框圆形进度条之最简单实现

很多人在项目中做长时间操作时,比如访问web service后台数据,都想显示一个透明无边框的圆形进度条,如下图: 不幸的是,Android系统自带的ProgressDialog,无论如何设置Theme、style,或者用java代码设置什么属性,边框都是去不掉的,至少我现在还不知道怎么去掉: 怎么办? 其实很简单,自定义一个ProgressDialo...

canvas用2d渲染出3d的感觉

好久没有写博客了,深究动画其实也就是setTimeout setInterval requestAnimationFrame很多人可能不熟悉requestAnimationFrame但是事实上和setTimeout没有区别,setTImeout是 通过定时然后达到循环执行,后者呢比较优雅,动画帧。。。不说了,我也不知道,自己测试一下,程序员是应该有这种一探...

react之每日一更(实现canvas拖拽,增、删、改拖拽模块大小功能)

效果图: import React, { Component } from 'react'; import scaleImage from './images/scale.png'; import closeImage from './images/close.png'; import maskImage from './images/mask.png'...

*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。

最近在做我们单位的内部一个系统,使用了类似于Asp.Net 2.0里面的Theme(主题)的功能。此功能的核心是一个动态的CSS定义,根据用户选择的不同主题内容来发送不同的CSS样式文本。 本来这个问题很好解决,在HTML中的<head>区内使用一个: <%#=base.GetCssInclude()%> 就可以解决,不过我没有...