首页 > 其他分享 >【Canvas与艺术】六边形漩涡

【Canvas与艺术】六边形漩涡

时间:2024-08-29 08:53:16浏览次数:5  
标签:function Canvas HEIGHT ctx canvas var WIDTH 漩涡 六边形

【成图】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head>
     <title>六边形漩涡</title>
     <style type="text/css">
     .centerlize{
        margin:0 auto;
        width:1200px;
     }
     </style>
     </head>

     <body οnlοad="init();">
        <div class="centerlize">
            <canvas id="myCanvas" width="12px" height="12px" style="border:1px dotted black;">
                如果看到这段文字说您的浏览器尚不支持HTML5 Canvas,请更换浏览器再试.
            </canvas>
            <img id="myImg" src="342.jpg" style="display:none;"/>
        </div>
     </body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码(从<!DOCTYPE到script>)拷贝下来,粘贴到文本编辑器中,
* 另存为.html文件,再用chrome浏览器打开,就能看到实现效果。
******************************************************************/

// canvas的绘图环境
var ctx;

// 高宽
const WIDTH=512;
const HEIGHT=512;

// 舞台对象
var stage;

//-------------------------------
// 初始化
//-------------------------------
function init(){
    // 获得canvas对象
    var canvas=document.getElementById('myCanvas');  
    canvas.width=WIDTH;
    canvas.height=HEIGHT;

    // 初始化canvas的绘图环境
    ctx=canvas.getContext('2d');  
    ctx.translate(WIDTH/2,HEIGHT/2);// 原点平移

    // 准备
    stage=new Stage();    
    stage.init();

    // 开幕
    animate();
}

// 播放动画
function animate(){    
    stage.update();    
    stage.paintBg(ctx);
    stage.paintFg(ctx);     

    // 循环
    if(true){
        //sleep(100);
        window.requestAnimationFrame(animate);   
    }
}

// 舞台类
function Stage(){
    // 初始化
    this.init=function(){
        
    }

    // 更新
    this.update=function(){    
        
    }

    // 画背景
    this.paintBg=function(ctx){
        ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏    
    }

    // 画前景
    this.paintFg=function(ctx){
        // 底色
        ctx.fillStyle = "white";
        ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);        
        
        ctx.lineWidth=1;
        var r=180;
        var gnt1=ctx.createRadialGradient(0,0,0,0,0,r);
        gnt1.addColorStop(0,"blue");
        gnt1.addColorStop(1,"red");
        var theta=Math.PI/20;

        for(var i=0;i<40;i++){
            // 根据正弦定理计算半径
            r=r*Math.sin(Math.PI/3)/Math.sin(Math.PI*2/3-theta);

            ctx.save();
            ctx.rotate(theta*i);// 每次旋转固定角度
            drawPolygon(ctx,6,0,0,r);              
            ctx.strokeStyle=gnt1;
            ctx.stroke();
            ctx.restore();
        }
        

        writeText(ctx,WIDTH/2-30,HEIGHT/2-5,"逆火原创","8px consolas","lightgrey");// 版权
    }
}


/*----------------------------------------------------------
函数:绘制正多边形
n:正多边形的边数
x:正多边形中心的横坐标
y:正多边形中心的纵坐标
r:正多边形中心到顶点的距离
----------------------------------------------------------*/
function drawPolygon(ctx,n,x,y,r){
    var polyArr=[];
    for(var i=0;i<n;i++){
        var theta=Math.PI*2/n*i;
        var pt={};
        pt.x=r*Math.cos(theta)+x;
        pt.y=r*Math.sin(theta)+y;
        polyArr.push(pt);
    }

    ctx.beginPath();
    for(let i=0;i<polyArr.length;i++){
        ctx.lineTo(polyArr[i].x,polyArr[i].y);
    }
    ctx.closePath();
}

/*----------------------------------------------------------
函数:创建一个二维坐标点
x:横坐标
y:纵坐标
Pt即Point
----------------------------------------------------------*/
function createPt(x,y){
    var retval={};
    retval.x=x;
    retval.y=y;
    return retval;
}

/*----------------------------------------------------------
函数:延时若干毫秒
milliseconds:毫秒数
----------------------------------------------------------*/
function sleep(milliSeconds) {
    const date = Date.now();
    let currDate = null;
    while (currDate - date < milliSeconds) {
        currDate = Date.now();
    } 
}

/*----------------------------------------------------------
函数:书写文字
ctx:绘图上下文
x:横坐标
y:纵坐标
text:文字
font:字体
color:颜色
----------------------------------------------------------*/
function writeText(ctx,x,y,text,font,color){
    ctx.save();
    ctx.textBaseline="bottom";
    ctx.textAlign="center";
    ctx.font = font;
    ctx.fillStyle=color;
    ctx.fillText(text,x,y);
    ctx.restore();
}

/*-------------------------------------------------------------
我从未奢望它们桌上的燕窝鱼翅,
它们却总惦记我碗里的小辣鱼萝卜干。
--------------------------------------------------------------*/
//-->
</script>

END

标签:function,Canvas,HEIGHT,ctx,canvas,var,WIDTH,漩涡,六边形
From: https://blog.csdn.net/River_Sun/article/details/141664629

相关文章

  • 图片作为Canvas贴图时要等图片加载完才可以读取canvas
    一、效果二、第一步:canvas.js中封装canvas函数,生成一个canvas对象,标注文字为参数nameunctioncreateCanvas(name){  /**   *创建一个canvas对象,绘制几何图案或添加文字   */  constcanvas=document.createElement("canvas");  constarr=......
  • canvas实现睡眠波2.0,框架兼容,支持大部分PC端
    npm引入方式npmi@JayVone/sleepWave//使用方式1import{sleepWindow}from'@JayVone/sleepWave'//获取dom然后绑定constapp=document.getElementById('app');sleepWindow.init(app);//在需要绘制的时候setOptionssleepWindow.setOption({types:['......
  • canvas 如何自动去换行
    在HTMLcanvas上绘制文本时,如果文本超出了canvas的宽度,它不会自动换行。要实现自动换行,你需要手动计算文本的长度并在适当的位置进行换行。以下是一个简单的JavaScript函数,它使用canvas的measureText方法来计算文本的长度,并在达到指定宽度时自动换行:functionwrapText(context,......
  • 火影忍者2——漩涡鸣人(仙人模式)篇
    老规矩,谈火影~火影忍者之——漩涡鸣人(仙人模式)篇众所周知,鸣仙是一个早期的A忍,技能破坏力贼大,一般遇到鸣仙(除非我用了青水+神卡)我是直接退的普攻一技能螺旋丸普通状态下一技能长摁放出两个分身释放螺旋丸,属于远程技能,但释放时的施法动作容易被打断,点击是本体出去,......
  • 【Canvas与艺术】十边曲线形光阑
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>十边曲线型光阑</title><styletype="text/css&q......
  • 【Canvas电脑桌面】蓝底金圈纹桌面(1920*1080)
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>蓝底金圈纹桌面</title><styletype="text/css&quo......
  • 基于html2canvas实现网页保存为图片及图片清晰度优化
    一、实现HTML页面保存为图片1.1已知可行方案现有已知能够实现网页保存为图片的方案包括:方案1:将DOM改写为canvas,然后利用canvas的toDataURL方法实现将DOM输出为包含图片展示的dataURI方案2:使用html2canvas.js实现(可选搭配Canvas2Image.js实现网页保存为图片)方案3:使用raster......
  • 【Canvas与艺术】考编
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>中华何能换新天</title><styletype="text/css&q......
  • dom-to-image + canvas 实现拾色器(滴管取色)功能
    虽然HTML原生的input可以实现拾色器功能,但是很多时候我们需要自己设置样式和交互方式,就需要自己手动写一个滴管取色的组件,目前比较通用的一个方案就是将dom转换成二进制图片数据,再由canvas读取色值来实现自定义的拾色器滴管功能。运行截图:完整demo代码:(感兴趣的可以直接复制......
  • html5+CSS3 Canvas动画分享
    1.赛朋博客赛车动画 源码分享:<!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <title>赛车</title>  <style>    *{      margin:0;      padding:0;      bo......