美文网首页程序员
利用坐标的变换对canvas图像进行旋转和缩放

利用坐标的变换对canvas图像进行旋转和缩放

作者: infi_ | 来源:发表于2018-03-11 16:31 被阅读0次

效果如图



绘图依然用前面使用过的Polygon类进行绘图

drawPolygon是复制图形并旋转的函数
make_image是复制图像并进行缩放的函数
二者的思想就是对context绘图环境进行translate scale平移或缩放 ,平移缩放之后再restore进行还原 毫不影响
下面是代码

var canvas=document.getElementById("canvas")
   var context=canvas.getContext("2d")
   var RECT_width=100
   var RECT_height=100;
var Point = function (x, y) {
   this.x = x;
   this.y = y;
};

var Polygon=function(centerX,centerY,radius,sides,startAngle,strokeStyle,fillStyle,filled){

    this.x=centerX;
    this.y=centerY;
    this.radius=radius;
    this.sides=sides;
    this.startAngle=startAngle;
    this.strokeStyle=strokeStyle;
    this.fillStyle=fillStyle;
    this.filled=filled;
}
Polygon.prototype={
   getPoints:function(){
     var points=[];
     var angle=this.startAngle||0;
     for(var i=0;i<this.sides;i++){
         points.push(new Point(this.x+this.radius*Math.cos(angle),this.y-this.radius*Math.sin(angle)))
         angle+=2*Math.PI/this.sides

     }
    return points

   },
   createPath:function(context){
      var points=this.getPoints()
      context.beginPath()
      context.moveTo(points[0].x,points[0].y);
      for(var i=1;i<points.length;i++){
          context.lineTo(points[i].x,points[i].y)
      }
      context.closePath()
   },
   stroke:function(context){
       context.save()
       this.createPath(context)
       context.strokeStyle=this.strokeStyle;
       context.stroke();
       context.restore();
   },
   fill:function(context){
      context.save();
      context.fillStyle=this.fillStyle;
      this.createPath(context)
      context.fill()
      context.restore()

   },

   move: function (x, y) {
          this.x = x;
           this.y = y;
    }

}
var test=new Polygon(150,150,20,4,0,"red","red")
test.fill(context)

function drawPolygon(polygon,angle,color){

  var tx=polygon.x
  var ty=polygon.y

  context.save()

  context.translate(tx,ty)

  if(angle){
    context.rotate(angle)
  }
  polygon.x=0
  polygon.y=0
  polygon.fillStyle=color
  
  polygon.fill(context)

  context.restore()


}
drawPolygon(test,130,"blue")

function make_image(polygon){
   
   context.save()
   context.translate(100,canvas.height/2)

   context.scale(2,2)
   polygon.fill(context) 
   context.restore()


}
make_image(test)

相关文章

网友评论

    本文标题:利用坐标的变换对canvas图像进行旋转和缩放

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