当前位置: 首页 > 编程日记 > 正文

HTML5-用canvas画布rotate字体旋转(中国象棋棋谱)。

一开始我们老师安排我做这个作业,在这个作业我遇到了一个很重大的问题就是,文字旋转这么旋转,我查了很多资料。

 1发现绘画正方形,使他正方形中心原点旋转非常容易理解。(我相信这个很多人看一下都会懂,)

    

          1.translate(x,y):平移,将画布的坐标原点向左右方向移动x,向上下方向移动y.canvas的默认位置是在(0,0).
                例子:画布原点假如落在(1,1),那么translate(10,10)就是在原点(1,1)基础上分别在x轴、y轴移动10,则原点变为(11,11)。

          

          2.我来说说怎么转移到中心点,假如,fillRect(50,50,100,100)的正方形(矩形也是一样的),坐标在(50,50)建立了一个长,宽各100的正方形,但是呢正方形的中点究竟在那里呢,公式是:cvContent.translate(x+width/2,y+height/2);就能找到中心点了,也就是说cvContent.translate(125,125)才是正方行的中心点,如图下,找到中心点后直接旋转就行了。


    注意了:正方形之所以能旋转,有一下这两个

      cvContext.translate();    //

      cvContext.rotate(45 * Math.PI/180)  //转成角度的度数,,只要改*前面的数值便可以旋转。

      

      

      

问题来了:文字旋转究竟怎么样?

琢磨了很久,其实很简单,只是我们的理解方法用错了,导致本来简简单单的文字旋转,拖我们那么多的时间。

我以中国象棋的棋谱图为案例,中间一行不是文字吗。

代码  

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><style type="text/css">#canvas1{font-family: arial;}</style></head><body><h3>canvas画布:首先先设置一块区域,可以绘制文字或图形</h3><div style="border: 1px solid red; width:400px;height: 450px;"><canvas id="huabu3" width="400px" height="450px" ></canvas></div><script type="text/javascript">//找到画布的元素var chiness = document.getElementById("huabu3");//设置2维绘画的上下文var chess = chiness.getContext("2d");//绘画直线的上下文var zhixian = chiness.getContext("2d");//设置汉字的绘画上下文,因为如果跟chess混在一起显示不了文字var hanzi = chiness.getContext("2d");chess.strokeStyle = "greenyellow";zhixian.strokeStyle ="greenyellow";//先画第一行的
            chess.strokeRect(0,0,400,50);chess.strokeRect(50,0,50,50);chess.strokeRect(100,0,50,50);chess.strokeRect(150,0,50,50);chess.strokeRect(200,0,50,50);chess.strokeRect(250,0,50,50);chess.strokeRect(300,0,50,50);chess.strokeRect(350,0,50,50);//第二行的
            chess.strokeRect(0,50,50,50);chess.strokeRect(50,50,50,50);chess.strokeRect(100,50,50,50);chess.strokeRect(150,50,50,50);chess.strokeRect(200,50,50,50);chess.strokeRect(250,50,50,50);chess.strokeRect(300,50,50,50);chess.strokeRect(350,50,50,50);//第三行
            chess.strokeRect(0,100,50,50);chess.strokeRect(50,100,50,50);chess.strokeRect(100,100,50,50);chess.strokeRect(150,100,50,50);chess.strokeRect(200,100,50,50);chess.strokeRect(250,100,50,50);chess.strokeRect(300,100,50,50);chess.strokeRect(350,100,50,50);//第四行
            chess.strokeRect(0,150,50,50);chess.strokeRect(50,150,50,50);chess.strokeRect(100,150,50,50);chess.strokeRect(150,150,50,50);chess.strokeRect(200,150,50,50);chess.strokeRect(250,150,50,50);chess.strokeRect(300,150,50,50);chess.strokeRect(350,150,50,50);//第六行
            chess.strokeRect(0,250,50,50);chess.strokeRect(50,250,50,50);chess.strokeRect(100,250,50,50);chess.strokeRect(150,250,50,50);chess.strokeRect(200,250,50,50);chess.strokeRect(250,250,50,50);chess.strokeRect(300,250,50,50);chess.strokeRect(350,250,50,50);//第7行
            chess.strokeRect(0,300,50,50);chess.strokeRect(50,300,50,50);chess.strokeRect(100,300,50,50);chess.strokeRect(150,300,50,50);chess.strokeRect(200,300,50,50);chess.strokeRect(250,300,50,50);chess.strokeRect(300,300,50,50);chess.strokeRect(350,300,50,50);//第8行
            chess.strokeRect(0,350,50,50);chess.strokeRect(50,350,50,50);chess.strokeRect(100,350,50,50);chess.strokeRect(150,350,50,50);chess.strokeRect(200,350,50,50);chess.strokeRect(250,350,50,50);chess.strokeRect(300,350,50,50);chess.strokeRect(350,350,50,50);//第9行
            chess.strokeRect(0,400,50,50);chess.strokeRect(50,400,50,50);chess.strokeRect(100,400,50,50);chess.strokeRect(150,400,50,50);chess.strokeRect(200,400,50,50);chess.strokeRect(250,400,50,50);chess.strokeRect(300,400,50,50);chess.strokeRect(350,400,50,50);//这是线条布局,我觉得分开写好一点,不会乱
            zhixian.moveTo(150,0);zhixian.lineTo(250,100);zhixian.stroke();zhixian.moveTo(250,0);zhixian.lineTo(150,100);zhixian.stroke();zhixian.moveTo(150,450);zhixian.lineTo(250,350);zhixian.stroke();zhixian.moveTo(250,450);zhixian.lineTo(150,350);zhixian.stroke();//十字架线条的布局(由于做这个十字甲,根据坐标就可以简简单单的做出来了,没什么技巧性,所我做了一组。)
            zhixian.moveTo(45,75);zhixian.lineTo(45,95);zhixian.lineTo(25,95);zhixian.stroke();zhixian.moveTo(55,75);zhixian.lineTo(55,95);zhixian.lineTo(75,95);zhixian.stroke();zhixian.moveTo(25,105);zhixian.lineTo(45,105);zhixian.lineTo(45,125);zhixian.stroke();zhixian.moveTo(55,125);zhixian.lineTo(55,105);zhixian.lineTo(75,105);zhixian.stroke();//第五行,,文字那行那里我最后才写,,因为如果我把文字,插入到中间的行数来写,会发现下面的格子都不见了。//建议创建文字的时候,先不急切的移动到自己想要的位置,//文字的真实点是在字体的左下面 {.汉},你可以
            hanzi.font = '25px sans-serif';//字体大小也会影响的哦。
            hanzi.fillStyle = "red";hanzi.translate(60,235);//其实这步是这重要的,定好中心点好,旋转起来就剪刀了
            hanzi.rotate( 270* Math.PI/180);//我这步最后操作,等你中心点定好,移动到你自己想要的位置,再调角度
            hanzi.fillText('',0,0);hanzi.fillText('',0,100);hanzi.rotate( 180* Math.PI/180);
            hanzi.fillText('',-25,-280);hanzi.fillText('',-25,-180);hanzi.restore();//如还是 不懂的话,,可以复制我的代码,,自己改一下里面的数据,最好几十几十改,就会明白其中的道理。</script></body>
</html>

 
 

转载于:https://www.cnblogs.com/joshKing/p/6093834.html

相关文章:

jQuery的deferred对象详解

阮一峰大神的关于jQuery的deferred对象详解 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html 转载于:https://www.cnblogs.com/qiufang/p/8886412.html

unity3d 切换网络_Unity3d新网络请求方式UnityWebRequest详解

Unity将要逐步放弃www网络请求api&#xff0c;新的api请求方式来临&#xff1a;UnityWebRequestThe&#xff0c;也正是本篇文章要给大家介绍的重点&#xff0c;那就是UnityWebRequestThe的使用详解。旧的 www &#xff1a;https://docs.unity3d.com/ScriptReference/WWW.html新…

PoW工作量证明

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 PoW是Proof of Work的缩写&#xff0c;即工作量证明的意思。在《拜占庭将军问题》中介绍过&#xff0c;比特币系统中引入了“工作量”的概念&#…

zookeeper 集群安装

一、ZooKeeper相关概念简介&#xff1a;ZooKeeper是一个开源的、分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服…

python queue 多进程_python中的Queue与多进程(multiprocessing)

最近接触一个项目&#xff0c;要在多个虚拟机中运行任务&#xff0c;参考别人之前项目的代码&#xff0c;采用了多进程来处理&#xff0c;于是上网查了查python中的多进程一、先说说Queue(队列对象)Queue是python中的标准库&#xff0c;可以直接import 引用&#xff0c;之前学习…

postman测试上传文件

输入url&#xff1a;http://127.0.0.1:8081/uploadfile 选择post方式 选择body 选择form-data&#xff0c;text改为file 输入key&#xff1a;file &#xff0c;value&#xff1a;选择文件 send即可 转载于:https://www.cnblogs.com/shimh/p/6094410.html

区块链资产安全攻略

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 本文从钱包、密码、软件、备份、交易所、习惯几个方面给出一些指引。 钱包 每个钱包在熟练使用之前&#xff0c;请用小额测试。 有条件购买硬件钱…

win10安装docker并结合Idea2018.1部署springboot项目

一、准备工作 1.、工具&#xff1a;win10&#xff0c;idea2018&#xff0c;maven3.5&#xff0c;jdk8 二、win10安装docker 1、win10安装docker&#xff1a;http://www.runoob.com/docker/windows-docker-install.html 2、安装完毕后&#xff0c;点击小鲸鱼&#xff0c;选择set…

在桌面右键菜单,停止工作,并提示“资源管理器停止工作”等情况。

在配置文件中&#xff0c;找到右键管理菜单&#xff0c;然后删除NvCp开头的扩展项有问题&#xff0c;去掉就完事了。转载于:https://www.cnblogs.com/wangfengderizi/p/6094446.html

ue4cmd怎么调用_[UE4,automation]UE4批渲染cmd篇

之前做项目的过程中&#xff0c;有一部分工作是在UE4里制作输出小短片。由于要完成的量比较大&#xff0c;所以研究了一些批渲染的方法。逻辑上跟以前在maya里用batch render差不多&#xff0c;不过UE4这边的设置相对繁琐一点点。本文讲解了在不打开UE4软件的前提下&#xff0c…

区块链将带来怎样的应用?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 在上一篇文章中&#xff0c;咱们聊到了区块链技术正在与大数据、云计算、物联网以及人工智能这些技术链接&#xff0c;随时可能碰撞出技术创新的火…

【Spark】Spark2.x版的新特性

一、API 1. 出现新的上下文接口&#xff1a;SparkSession&#xff0c;统一了SQLContext和HiveContext&#xff0c;并且为SparkSession开发了新的流式调用的configuration API 2. 统一了DataFrame和DataSet。DataFrame相当于DataSet[Row]&#xff0c;以及DataSet的增强聚合API 3…

python基础主要内容_python基础—python的介绍

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.这是因为计算机不能直接认识并…

Web Serveice服务代理类生成及编译

一、生成代理类 对于web service服务和wcf的webservice服务&#xff0c;我们都可以通过一个代理类来调用。 怎么写那个代理类呢&#xff1f;通过一个工具生成即可&#xff01;&#xff01;微软为我们提供了一个wsdl.exe的Web服务描述语言工具&#xff0c;wsdl.exe从 WSDL 协定文…

生成器/迭代器 和 函数的递归

生成器 一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值&#xff0c;但是yield又不同于return&#xff0c;return的执行意味着程序的结束&#xff0c;调用生成器函数不会得到返回的具体的值&#xff0c;而是得到一个可迭代的对象。每一次获取这个…

CDN -- 集合

weui https://cdnjs.cloudflare.com/ajax/libs/weui/0.4.3/style/weui.min.css 百度静态资源库 http://cdn.code.baidu.com/转载于:https://www.cnblogs.com/xuange306/p/6102407.html

python清华大学出版社第三章课堂作业的答案_Python程序设计清华大学出版社董付国第3章选择与循环题库.ppt...

3.5 综合运用 例2&#xff1a;输出序列中的元素。 a_list[a, b, mpilgrim, z, example] for i,v in enumerate(a_list): print 列表的第, i1, 个元素是&#xff1a;, v 3.5 综合运用 例3&#xff1a;求1~100之间能被7整除&#xff0c;但不能同时被5整除的所有整数 。 for i in …

以太坊私链入门

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载 目录 背景软件安装与配置 2.1. Ubuntu 2.1.1. 安装 geth 2.1.2. 安装 solc 2.2. Windows 2.3. Mac OS 2.4. 编译安装创世区块 3.1. 初始化创世区块 …

数据结构(十)栈的作用--大数的加法运算

一、大数加法的定义 在Java中&#xff0c;整数类型有四种&#xff0c;byte&#xff08;8位&#xff09;、short&#xff08;16位&#xff09;、int&#xff08;32位&#xff09;、long&#xff08;64位&#xff09;。 其中&#xff0c;int类型为32为&#xff0c;也就是说最大的…

分布式技术一周技术动态 2016-11-27

分布式系统实践 1. 大数据时代快速SQL引擎-Impala http://dwz.cn/4G9mvt 摘要: 在Dremel论文发表之后&#xff0c;开源社区涌现出了一批基于MPP架构的SQL-on-Hadoop(HDFS)查询引擎&#xff0c;典型代表有Apache Impala、Presto、Apache Drill、Apache HAWQ等&#xff0c;看上去…

vuerouter3种模式_Vue-router的三种传参方式

第一种传递参数&#xff1a;name传参两步完成name传参并显示在模板中&#xff1b;第一在router/index.js中配置name属性&#xff0c;routes: [{path: /,name: HelloWorld,component: HelloWorld},]第二步在src/App.vue接收{{ $route.name }}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

以太坊的数据结构

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 以太坊被描述为为一个交易驱动的状态机&#xff0c;它在某个状态下接受一些输入后&#xff0c;会确定的转移到一个新的状态。具体来说&#xff0c;…

(转载)虚幻引擎3--9掌握虚幻技术UnrealScript 预处理器

第九章 – UNREALSCRIPT预处理器9.1概述9.2 MACRO(宏)的基础知识指南 9.1 –您的第一个宏9.3具有参数的宏指南 9.2 – MACRO参数9.4内置宏DEFINE IF/ELSE/ENDIF 实例: IF/ELSE/ENDIF的应用 INCLUDE ISDEFINED/NOTDEFINED 示例: 结合使用 …

springboot添加多数据源连接池并配置Mybatis

springboot添加多数据源连接池并配置Mybatis 转载请注明出处&#xff1a;https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018 星期六&#xff0c;那是个晴天&#xff0c;天湛蓝湛蓝的非常干净&#xff0c;仿佛飘过一粒尘埃也能看得清清楚楚&#xff0c;然后就发生…

lua菜鸟教程_Lua 环境安装

Lua 环境安装Linux 系统上安装Linux & Mac上安装 Lua 安装非常简单&#xff0c;只需要下载源码包并在终端解压编译即可&#xff0c;本文使用了5.3.0版本进行安装&#xff1a;curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gztar zxf lua-5.3.0.tar.gzcd lua-5.3.0make …

以太坊智能合约Demo

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 智能合约开发用solidity编程语言部署在以太坊这个区块链平台&#xff0c;本文提供一个官方实战demo示例快速入门&#xff0c;用demo例子深入浅出智…

Java学习笔记七——数组工具类Arrays

数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组。若将里面的方法用熟的话&#xff0c;那开发效率会大大提高。下面介绍其中的方法。 List<T> asList(T... a) 作用&#xff1a;将指定数组或数组元素&#xff0c;转换成固定大小的List。…

c++窗口管理系统是什么_优秀的食堂管理系统让你对校园生活更充满希望

面对今年疫情环境下的种种困难&#xff0c;各大高校纷纷根据情况采取不同的措施&#xff0c;应对开学的各种难题。解决返校学生就餐就是一大难点。学校后勤工作人员少之又少&#xff0c;开设的食堂窗口也供不应求。这也直接导致了后勤人员懒散&#xff0c;食堂阿姨给菜“手抖”…

ACM训练小结-2018年6月16日

今天题目情况如下&#xff1a;A题&#xff1a;线段树XOR性质。情况&#xff1a;由于写法问题&#xff0c;调试困难&#xff0c;浪费大量时间。B题&#xff1a;&#xff08;对所有满足i mod pq&#xff0c;求a[i]之和&#xff09;&#xff0c;无修改&#xff0c;直接上n*sqrt(n)…

加密货币的本质

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 去年&#xff0c;比特币暴涨&#xff0c;其他币也像雨后春笋一样冒出来&#xff0c;已经有1000多种了。 很多人都在问&#xff0c;加密货币&#…