• Canvas 同心圆旋转示例解析


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        
        <canvas id='cvs' width='800' height='800' style='border:1px dotted blue'></canvas>
    
        <script>
            var cvs = document.getElementById('cvs');
            var ctx = cvs.getContext('2d');
    
    
            ctx.moveTo(0,400);
            ctx.lineTo(800,400);
            ctx.stroke();
    
            ctx.moveTo(400,0);
            ctx.lineTo(400,800);
            ctx.stroke();
    
            ctx.moveTo(400,400);
            // ctx.close();
            ctx.arc(400,400,20,0,2*Math.PI);
            ctx.stroke();
    
            ctx.arc(400,400,200,0,2*Math.PI);
            ctx.stroke();
    
            var deg = 0;// 角度 
            var rad = (deg/360)*2*Math.PI;// 角度 
            var R = 200; // 大圆半径
            var r = 20; // 小圆半径
            var a = 400; // 中心圆心
            var b = 400; // 中心圆心
    
    
            for(var i = 0; i < 360 / 30; i++)
            {
                deg = 0+30*i; // 30为小圆相对于大圆偏移的角度
                rad = (deg/360)*2*Math.PI;// 角度 
                y = a+Math.cos(rad)*R; // 当前时刻的小圆坐标y
                x = b+Math.sin(rad)*R; // 当前时刻的小圆坐标x
                ctx.moveTo(x,y); // 移动到小圆圆心
                ctx.beginPath(); // 开始记录路径
                ctx.arc(x,y,r,0,2*Math.PI); // 绘制小圆
                ctx.closePath(); // 结束记录路径 提笔
                ctx.stroke(); // 开始绘制保存路径
                
                ctx.beginPath(); // 开始记录路径
                ctx.moveTo(x,y); // 移动到当前小圆圆心
                ctx.lineTo(a,b); // 画线到中心圆心 辐射线
                ctx.closePath(); // 结束记录路径 提笔
                ctx.stroke(); // 开始绘制保存路径
    
    
                if(i == 1){    
                    ctx.strokeStyle = 'red';
                    
                    ctx.beginPath(); // 开始记录路径
                    ctx.moveTo(x,y); // 移动到当前小圆圆心
                    ctx.lineTo(a,y); // 画垂线
                    ctx.lineTo(a,b); // 画横坐标
                    ctx.closePath(); // 结束记录路径 提笔
                    ctx.stroke(); // 开始绘制保存路径
    
                    ctx.beginPath(); // 开始记录路径
                    ctx.moveTo(x,y); // 移动到当前小圆圆心
                    ctx.lineTo(x,b); // 画垂线
                    ctx.lineTo(a,b); // 画纵坐标
                    ctx.closePath(); // 结束记录路径 提笔
                    ctx.stroke(); // 开始绘制保存路径
    
                    ctx.strokeStyle = 'green';
                    ctx.beginPath();
                    ctx.moveTo(a,b);
                    ctx.arc(a,b,2*r,2*rad,3*rad);
                    ctx.closePath();
                    ctx.stroke();
    
                    ctx.font = '30px Arial';
                    ctx.fillText('A',a+5,b+r+50);
    
                    ctx.font = '20px Arial';
                    ctx.fillText('R*sin(A)',(x-90),y-10);
    
                    ctx.font = '20px Arial';
                    ctx.fillText('R*cos(A)',(x-10),y-50);
    
    
                    ctx.strokeStyle = 'black';
                }
            }
    
        </script>
    
    
    </body>
    </html>

  • 相关阅读:
    java中的迭代器的含义
    angular-指令总结
    angular-ng-model
    angular-创建自定义的指令
    angular-$scope和$rootScope
    angular-过滤器
    Git-pull进入vim窗口解决办法
    Math常用方法
    全局变量和window属性上定义的变量
    透明点点的轮播图
  • 原文地址:https://www.cnblogs.com/yqmcu/p/10592531.html
Copyright © 2020-2023  润新知