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

  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>
 
 
 

HTML5-用canvas画布rotate字体旋转(中国象棋棋谱)。的更多相关文章

  1. 用html5的canvas画布绘制贝塞尔曲线

    查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  2. 【HTML5】Canvas画布

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  3. HTML5之Canvas画布

    先上代码: <canvas width="1000" height="800">浏览器不支持HTML5!</canvas> <sc ...

  4. 【HTML5】canvas画布练习

    第一步:获取画布元素 var canvas = document.getElementById("myCanvas"); var context = canvas.getConte ...

  5. canvas绘画基础(一):认识canvas画布

    html5提供了一个<canvas>标签,结合javascript的canvas api接口可以用来绘制图形和动画.最近工作中涉及到画图的任务,下面来了解一下canvas的基础:canva ...

  6. 自学HTML5第四节(canvas画布详解)

    canvas画布好像可是说是HTML5的精华了,一定要学好,嗯嗯,绚丽的东西就要从基础的开始.... 先看看啥玩意叫做canvas 什么是 Canvas? HTML5 的 canvas 元素使用 Ja ...

  7. 【JavaScript游戏开发】使用HTML5 canvas开发的网页版中国象棋项目

    //V1.0 : 实现棋子的布局,画布及游戏场景的初始化 //V2.0 : 实现棋子的颜色改变 //V3.0 :实现所有象棋的走棋规则 //V4.0 : 实现所有棋子的吃子功能 完整的项目源码已经开源 ...

  8. canvas画布标签

    最近良师益友整理一些canvas的资料,加强学习了解! 当你创建一个<canvas>元素后,就拥有了它的绘图上下文. 一.简单图形 1.getContext()方法 为了在canvas上绘 ...

  9. Canvas 画布 H5

    前言: canvas 元素用于在网页上绘制图形. canvas 本身是一个标签,<canvas>标签定义图形,必须使用脚本来绘制图形,比如在画布上(Canvas)画一个红色矩形,渐变矩形, ...

随机推荐

  1. python简说(二十一)开发接口

    一.flask举例 import flaskserver = flask.Flask(__name__)#新建一个服务,把当前这个python文件当做一个服务@server.route('/login ...

  2. Stanford CS231n实践笔记(课时14卷积神经网络详解 上)

    本课我们主要来研究一个"浏览器中的卷积神经网络" 这只是一个展示项目,但是能够帮助直观地看到一些东西 地址:https://cs.stanford.edu/people/karpa ...

  3. IDEA——找不到或无法加载主类的一种暴力解决方法

    对于用maven构建的java项目,可以利用maven工具编译一下,大致上可以解决很多奇奇怪怪的问题. 具体操作如下: 首先找到项目所在的文件夹,以F:\project为例. 删除.idea文件. 在 ...

  4. python --- 04 列表 元组

    一 .列表 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 1.列表存在索引和切片. 和字符串是一样的. 2.增删改查操作 1).增加 1. .append(" ...

  5. 向eclipse的JavaWeb项目中导入jar包

    一:      在你所需的jar包网站下载对应的jar包.如org.apache.commons.lang.jar. 二:复制粘贴到该JavaWeb的WEB-INF目录下的lib目录下,如: 三:右键 ...

  6. P2761 软件补丁问题

    P2761 软件补丁问题 思路 貌似不用网络流,直接状态压缩 用spfa跑最短路,直接判断是否能过 位运算太渣了,WA了好几发 代码 #include <bits/stdc++.h> us ...

  7. dp小结|背包问题

    1.先放上0-1背包模板 二维数组 for(int i=1;i<=n;i++)//枚举 物品 for(int j=1;j<=V;j++)//枚举体积 //这个位置是可以正序枚举的. qwq ...

  8. activiti 5.13流程图连线名称不显示bug修复

    使用modeler设计器,流程图连线名称是有显示的,但是运行结果却没显示.找到网上2遍文章,说是activiti框架中的一个bug,要修改 DefaultProcessDiagramGenerator ...

  9. .NET控件集ComponentOne 2018V3发布:新增图表动画及迷你图

    “通过使用 ComponentOne .NET控件产品,实现了兼具 BS 架构灵活性与 CS 架构的客户体验.丰富的控件满足了项目中的各种特殊需求,使得开发的精力可以专注于业务逻辑,为团队节省了时间. ...

  10. s*s*r备用

    遇见的问题 突然打不开 ip被墙 能ping 但是不能ssh 参考https://www.vultrcn.com/6.html