旋转的太极图

摘要:
1.创建画布并获取画布节点//创建画布节点varcanvas=document。获取元素ById('c');varc=画布。getContext('2d');//获取画布对象<script>并首先设置它
1.创建一个画布,获取canvas节点

 

<canvas id="c" width="500" height="500"></canvas>//创建canvas节点
        <script type="text/javascript">
            var canvas = document.getElementById('c');
            var c = canvas.getContext('2d');//获取canvas对象
       <script>

旋转的太极图第1张

 

然后先设置定时器,在定时器中先位移canvas的起点,canvas的起点默认在画布的左上角(0,0)

 

setInterval(()=>{
                // 清空画布
                c.clearRect(0,0,500,500);
                c.save();//保存状态
                
                c.translate(250,250);//位移canvas的起点到画布的中心
                
                taiji();//然后调用taiji函数以起点在画布的中心画图
                
                c.restore()//恢复状态
                
            },100);

设置之后的起点在画图的中心

旋转的太极图第2张

然后开始在以(250,250)为起点的画布画静态的太极

function taiji(){
                // 绘制黑色半圆
                c.beginPath();
                c.arc(0,0,200,-0.5*Math.PI,0.5*Math.PI,true);
                c.closePath();
                c.fillStyle='black';
                c.fill();
                
                // 绘制白色半圆
                c.beginPath();
                c.arc(0,0,200,-0.5*Math.PI,0.5*Math.PI);
                c.closePath();
                c.fillStyle='white';
                c.fill();
                
                // 绘制小白色半圆
                c.beginPath();
                c.arc(0,100,100,-0.5*Math.PI,0.5*Math.PI,true);
                c.closePath();
                c.fillStyle='white';
                c.fill();
                
                // 绘制小黑色半圆
                c.beginPath();
                c.arc(0,-100,100,-0.5*Math.PI,0.5*Math.PI);
                c.closePath();
                c.fillStyle='black';
                c.fill();
                
                // 绘制黑色小圆
                c.beginPath();
                c.arc(0,100,30,0,2*Math.PI);
                c.closePath();
                c.fillStyle='black';
                c.fill();
                
                // 绘制白色小圆
                c.beginPath();
                c.arc(0,-100,30,0,2*Math.PI);
                c.closePath();
                c.fillStyle='white';
                c.fill();
            }

最后开始调用旋转

// 太极旋转
            var i= 0;
            setInterval(()=>{
                // 清空画布
                c.clearRect(0,0,500,500);
                c.save();//保存状态
                c.translate(250,250);
                // 旋转
                c.rotate(Math.PI/180*i);
                i+=5;
                // taiji();
                c.restore()//恢复状态
                
            },100);
image-20201111200313660

 旋转的太极图第3张

最后附上完整的代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            #c {
                background-color: #ccc;
            }
        </style>
    </head>
    <body>
        <canvas id="c" width="500" height="500"></canvas>
        <script type="text/javascript">
            var canvas = document.getElementById('c');
            var c = canvas.getContext('2d');
            function taiji(){
                // 绘制黑色半圆
                c.beginPath();
                c.arc(0,0,200,-0.5*Math.PI,0.5*Math.PI,true);
                c.closePath();
                c.fillStyle='black';
                c.fill();
                
                // 绘制白色半圆
                c.beginPath();
                c.arc(0,0,200,-0.5*Math.PI,0.5*Math.PI);
                c.closePath();
                c.fillStyle='white';
                c.fill();
                
                // 绘制小白色半圆
                c.beginPath();
                c.arc(0,100,100,-0.5*Math.PI,0.5*Math.PI,true);
                c.closePath();
                c.fillStyle='white';
                c.fill();
                
                // 绘制小黑色半圆
                c.beginPath();
                c.arc(0,-100,100,-0.5*Math.PI,0.5*Math.PI);
                c.closePath();
                c.fillStyle='black';
                c.fill();
                
                // 绘制黑色小圆
                c.beginPath();
                c.arc(0,100,30,0,2*Math.PI);
                c.closePath();
                c.fillStyle='black';
                c.fill();
                
                // 绘制白色小圆
                c.beginPath();
                c.arc(0,-100,30,0,2*Math.PI);
                c.closePath();
                c.fillStyle='white';
                c.fill();
            }
            
            
            // 太极旋转
            var i= 0;
            setInterval(()=>{
                // 清空画布
                c.clearRect(0,0,500,500);
c.save();//保存状态
c.translate(250,250);
// 旋转
c.rotate(Math.PI/180*i);
i+=5;
// taiji();
c.restore()//恢复状态

    },100);



</script>
</body>
</html>

 

免责声明:文章转载自《旋转的太极图》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GCC编译器centos7安装gitlab下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)

1、首先说一下canvas类: Class OverviewThe Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls...

Android 自定义View修炼-自定义加载进度动画XCLoadingImageView

一、概述 本自定义View,是加载进度动画的自定义View,继承于ImageView来实现,主要实现蒙层加载进度的加载进度效果。 支持水平左右加载和垂直上下加载四个方向,同时也支持自定义蒙层进度颜色。 直接看下面的效果图吧。 二、效果图 废话不说,先来看看效果图吧~~ 三、实现原理方案 1、自定义View-XCLoadingImageView,继承Ima...

android 自定义控件属性获取bitmap和drawable的绘制

1. 在定义一个属性的格式的时在attrs属性文件中定义如下,reference表示图片等引用类型,color就是颜色。中间用一个竖线分割开 2. 获取格式为reference|color类型的在xml中的数据为drawable文件 为了将这个drawable对象绘制到view上面,需要将drawable转换为bitmap对象,转换代码 pub...

微信内置浏览器在使用video标签时(安卓)默认全屏的原因及解决办法

根据X5论坛得到的答案是:设计如此。   腾讯真是越来越嚣张了,一家独大后用户体验都不注重了(不给程序员留活路)。   听说有个申请加入vdeo白名单的,域名验证后就可以解决默认全屏(反正我是没见过申请入口,不给钱,想进来没门。) 最终的解决办法:   将video转化为canvas,逐帧播放,不过canvas貌似最高可以达到60帧/s,不过页够用了(扯淡...

HTML5 Canvas显示本地图片实例1、Canvas预览图片实例1

1.前台代码: <input type="file" /> <canvas height="500"></canvas> <script > //读取本地文件 var inputOne = document.getElement...

android 通过canvas旋转 绘制文字 竖直等不同方向的显示

效果如下: 主体代码如下: packagecom.free.chart;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.view.Surf...