canvas动态绘制旋转图片,canvas rotate()画布的旋转详解

  canvas动态绘制旋转图片,canvas rotate()画布的旋转详解

  HTML5画布中提供了实现图形平移,旋转,放缩的API .平移(translate)

  平移坐标平移(x,y)意思是把(0,0)坐标平移到(x,y),原来的(0,0)坐标则变成(-x,-y)

  图示如下:

  任何原来的坐标点p(ox,oy)在翻译之后的坐标点为p(ox-x,oy-y),其中点(x,y)为平移

  点坐标平移(x,y)。

  代码演示:复制代码代码如下:

  //翻译是将起点移动到centera,然后回到左上角

  函数渲染文本(宽度、高度、上下文){

  上下文.翻译(宽度/2,高度/2);//中心点坐标为(0, 0)

  context.font= 18px Arial

  context.fillStyle= blue

  context.fillText(请按转义字符退出游戏,5,50);

  context.translate(-width/2,-height/2);//平移恢复(0,0)坐标为左上角

  context.fillText(我回到顶端,5,50);

  }放缩(Scale)

  标度(甲、乙)意思是将对象沿着正常男性染色体组型轴分别放缩至a*x,b*y大小。效果如图示:复制代码代码如下:

  //平移矩形。

  函数绘制路径(上下文){

  context.translate(200,200);

  context.scale(2,2);//缩放原始形状大小的两倍

  context.strokeStyle= green

  语境。begin path();

  context.moveTo(0,40);

  context.lineTo(80,40);

  context.lineTo(40,80);

  语境。关闭路径();

  语境。笔画();

  }旋转(rotate)

  旋转角度旋转(数学。/8)

  旋转前的坐标p(x,y)在对应的旋转后的坐标P(rx,ry)为

  rx=x * cos(-角度)-y * sin(-角度);

  ry=y * cos(-角度)x * sin(-角度);

  旋转90度可以简化为:

  rx=y;

  ry=-x;

  帆布中旋转默认的方向为顺时针方向。演示代码如下:复制代码代码如下:

  //新的点。x=x * cos(-角度)-y * sin(-角度),

  //新的点。y=y * cos(-角度)x * sin(-角度)

  函数渲染旋转文本(上下文){

  context.font= 24px Arial

  context.fillStyle= red

  context.fillText(我在这里!,5,50);

  //旋转-90度

  //context . rotate(-Math ./2);

  //上下文。填充样式=蓝色;

  //context.fillText(我在!, -400,30);

  //旋转90度

  上下文.旋转(数学。/2);

  context.fillStyle= blue

  context.fillText(我在这里!,350,-420);

  console.log(Math.sin(数学。/2));

  //旋转90度,画10条线

  context.fillStyle= green

  for(var I=0;i4;i ) {

  var x=(I ^ 1)* 20;

  var y=(I ^ 1)* 60;

  var newX=y;

  var newY=-x;

  context.fillRect(newX,newY,200,6);

  }

  }

  通常做法是旋转与平移一起使用,先将坐标(0,0)平移到中心位置

  平移(宽度/2,高度/2)然后再使用旋转(数学。/2)完成旋转

  代码示例如下:复制代码代码如下:

  函数savandrestorecontext(上下文){

  语境。save();

  context.translate(200,200);

  上下文.旋转(数学。/2);

  context.fillStyle= black

  context.fillText(2D上下文旋转和平移,10,10);

  语境。restore();

  context.fillText(2D上下文旋转和平移,10,10);

  }全部JavaScript代码:复制代码代码如下:

  var tempContext=null//全局变量2d上下文

  window.onload=function() {

  var canvas=文档。getelementbyid(“target”);

  画布宽度=450

  画布高度=450

  如果(!canvas.getContext) {

  不支持console.log(Canvas .请安装一个HTML5兼容的浏览器。);

  返回;

  }

  //获取画布的2D上下文并绘制图像

  临时上下文=画布。获取上下文(“2d”);

  //renderText(canvas.width,canvas.height,temp context);

  savandrestorecontext(临时上下文);

  //绘制路径(临时上下文);

  }

  //翻译是将起点移动到centera,然后回到左上角

  函数渲染文本(宽度、高度、上下文){

  上下文.翻译(宽度/2,高度/2);

  context.font= 18px Arial

  context.fillStyle= blue

  context.fillText(请按转义字符退出游戏,5,50);

  context.translate(-width/2,-height/2);

  context.fillText(我回到顶端,5,50);

  }

  //平移矩形。

  函数绘制路径(上下文){

  context.translate(200,200);

  context.scale(2,2);//缩放原始形状大小的两倍

  context.strokeStyle= green

  语境。begin path();

  context.moveTo(0,40);

  context.lineTo(80,40);

  context.lineTo(40,80);

  语境。关闭路径();

  语境。笔画();

  }

  //新的点。x=x * cos(-角度)-y * sin(-角度),

  //新的点。y=y * cos(-角度)x * sin(-角度)

  函数渲染旋转文本(上下文){

  context.font= 24px Arial

  context.fillStyle= red

  context.fillText(我在这里!,5,50);

  //旋转-90度

  //context . rotate(-Math ./2);

  //上下文。填充样式=蓝色;

  //context.fillText(我在!, -400,30);

  //旋转90度

  上下文.旋转(数学。/2);

  context.fillStyle= blue

  context.fillText(我在这里!, 350,-420);

  console.log(Math.sin(数学。/2));

  //旋转90度,画10条线

  context.fillStyle= green

  for(var I=0;i4;i ) {

  var x=(I ^ 1)* 20;

  var y=(I ^ 1)* 60;

  var newX=y;

  var newY=-x;

  context.fillRect(newX,newY,200,6);

  }

  }

  函数savandrestorecontext(上下文){

  语境。save();

  context.translate(200,200);

  上下文.旋转(数学。/2);

  context.fillStyle= black

  context.fillText(2D上下文旋转和平移,10,10);

  语境。restore();

  context.fillText(2D上下文旋转和平移,10,10);

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: