zoukankan      html  css  js  c++  java
  • Canvas rontate(旋转) 使用误区

        context.setTransform(1,0,0,1,0,0);//重置转换为初始化状态
        var angleInRadians = 45 * Math.PI / 180;var width = 40;
        var height = 40;
        context.rotate(angleInRadians);
        context.fillStyle = "red";
        context.fillRect(0,0 , width, height);

    刚开始使用rotate认为就像上面这样使用就可以了,可是显示如下图:

    没有出现预料的旋转45度角的正方形。

    出现预料之外的原因是画布旋转是以上图所示的Top-left角为中心点,而不是以Origin Point为中心店的,所以得将旋转中心移动到 Origin Point:

    //now draw a red square
    context.setTransform(1,0,0,1,0,0);
    var angleInRadians = 45 * Math.PI / 180;
    var x = 50;
    var y = 100;
    var width = 40;
    var height = 40;
    context.translate(x+.5*width, y+.5*height);
    context.rotate(angleInRadians);
    context.fillStyle = "red";
    context.fillRect(-.5*width,-.5*height , width, height);//这个四边形的起点肯定是自己长高各一半了,意思是长方形居于Origin Point的中心,结果如下图所示
    

    所以在Canvas变换操作的时候找准图形的中心很重要,譬如缩放也会遇到同样的问题。

    即使如下图所示的不是正常的四边形,也可以用四边形将其围起来找到其重心:

  • 相关阅读:
    Apache xmlrpc
    认识serialVersionUID
    解压gz文件
    List of HTTP header fields
    Hadoop的Python语言封装
    httpcore in httpcomponent
    python enumerate 用法
    Hadoop Streaming Made Simple using Joins and Keys with Python « All Things Hadoop
    移位操作
    Chunked transfer encoding
  • 原文地址:https://www.cnblogs.com/liuminghai/p/4073434.html
Copyright © 2011-2022 走看看