【Canvas技法】六种环状花纹荟萃

2024-04-18 23:52

本文主要是介绍【Canvas技法】六种环状花纹荟萃,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【图例】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>使用HTML5/Canvas绘制六种环状花纹</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="148.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){window.requestAnimationFrame(animate);   }
}// 舞台类
function Stage(){// 初始化this.init=function(){}// 更新this.update=function(){}// 画背景this.paintBg=function(ctx){ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏    // 版权ctx.save();ctx.textBaseline="bottom";ctx.textAlign="center";ctx.font = "8px consolas";ctx.fillStyle="black";ctx.fillText("逆火原创",WIDTH/2-30,HEIGHT/2-10);ctx.restore();}// 画前景this.paintFg=function(ctx){// 锯齿纹var gearArr=getGearArray(32,Math.PI/32,252,230);                ctx.beginPath();for(var i=0;i<gearArr.length;i++){ctx.lineTo(gearArr[i].x,gearArr[i].y);}ctx.closePath();ctx.lineWidth=1;ctx.strokeStyle="black";ctx.stroke();ctx.fillStyle="white";ctx.fill();// 破折线纹var radius=220;for(var i=0;i<36;i++){var start=Math.PI/18*i;var x1=radius*Math.cos(start);var y1=radius*Math.sin(start);var end=start+Math.PI/36;var x2=radius*Math.cos(end);var y2=radius*Math.sin(end);ctx.beginPath();ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);ctx.closePath();ctx.lineWidth=4;ctx.strokeStyle="gray";ctx.stroke();}// 波浪纹var arr=createWaveCircleArray(72,200,10);ctx.beginPath();for(var i=0;i<arr.length-2;i+=2){var pt1=arr[i];var pt2=arr[i+1];// 控制点var pt3=arr[i+2];            ctx.lineTo(pt1.x,pt1.y);ctx.quadraticCurveTo(pt2.x,pt2.y,pt3.x,pt3.y);}ctx.closePath();ctx.lineWidth=1;ctx.strokeStyle="rgb(201,195,183)";ctx.stroke();// 绳纹var arr=[];for(var i=0;i<360;i++){var theta=i*Math.PI*2/360;arr.push(theta);}const offset=3;var r=180-offset,R=180+offset;for(var i=0;i<arr.length;i+=4){var start=arr[i];var end=arr[(i+2)%arr.length];var bias=Math.PI*2/360*2.5;var a=createPt(r*Math.cos(start),r*Math.sin(start));var b=createPt(R*Math.cos(end),R*Math.sin(end));var c=createPt(R*Math.cos(end+bias),R*Math.sin(end+bias));var d=createPt(r*Math.cos(start+bias),r*Math.sin(start+bias));ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.arcTo(b.x,b.y,c.x,c.y,20);ctx.arcTo(d.x,d.y,a.x,a.y,20);ctx.closePath();ctx.fillStyle="black";ctx.fill();}// 点纹ctx.beginPath();ctx.arc(0,0,170,0,Math.PI*2,false);ctx.closePath();ctx.lineWidth=6;ctx.strokeStyle="black";ctx.stroke();for(var i=0;i<180;i++){var theta=Math.PI*2/180*i;var x=170*Math.cos(theta);var y=170*Math.sin(theta);ctx.beginPath();ctx.arc(x,y,2,0,Math.PI*2,false);ctx.closePath();ctx.fillStyle="white";ctx.fill();}// 鱼鳞纹for(i=0;i<60;i++){var start=i*Math.PI/30;var end=start+Math.PI/40;var bias=Math.PI/72;var r=145;var x1=(r+5)*Math.cos(start);var y1=(r+5)*Math.sin(start);var x2=(r+5)*Math.cos(end);var y2=(r+5)*Math.sin(end);var x3=(r)*Math.cos(end+bias);var y3=(r)*Math.sin(end+bias);var x4=(r-5)*Math.cos(end);var y4=(r-5)*Math.sin(end);var x5=(r-5)*Math.cos(start);var y5=(r-5)*Math.sin(start);var x6=(r)*Math.cos(start+bias);var y6=(r)*Math.sin(start+bias);ctx.beginPath();ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);ctx.lineTo(x3,y3);ctx.lineTo(x4,y4);ctx.lineTo(x5,y5);ctx.lineTo(x6,y6);ctx.closePath();ctx.fillStyle="black";ctx.fill();}// 中间加个俏皮卡通ctx.save();ctx.beginPath();ctx.arc(0,0,177,0,Math.PI*2,false);ctx.closePath();ctx.clip();var img=document.getElementById("myImg");ctx.drawImage(img,0,0,200,200,-100,-100,200,200);ctx.restore();}
}/*----------------------------------------------------------
函数:创建一个二维坐标点
x:横坐标
y:纵坐标
Pt即Point
----------------------------------------------------------*/
function createPt(x,y){var retval={};retval.x=x;retval.y=y;return retval;
}//-------------------------------------------------------
// 取得一个齿轮全部控制点的函数
// n:齿轮齿数
// angle:齿斜面倾角
// outerRadius:齿轮外径
// innerRadius:齿轮内径
//-------------------------------------------------------
function getGearArray(n,angle,outerRadius,innerRadius){// 准备齿轮数组var gearArr=new Array();for(var i=0;i<n*2;i++){var alpha=Math.PI/n*i;var bata=alpha+angle;var x1,y1,x2,y2;if(i%2==1){x1=innerRadius*Math.cos(alpha);y1=innerRadius*Math.sin(alpha);x2=outerRadius*Math.cos(bata);y2=outerRadius*Math.sin(bata);                }else{                x1=outerRadius*Math.cos(alpha);y1=outerRadius*Math.sin(alpha);x2=innerRadius*Math.cos(bata);y2=innerRadius*Math.sin(bata);}gearArr.push({x:x1,y:y1});gearArr.push({x:x2,y:y2});}return gearArr;
}//--------------------------------------------------
// 函数:创建波浪式环形需要的数组
// n:浪头峰谷个数
// radius:环形半径
// waveHeight:浪高
// 返回:包含浪高中低点坐标的数组
//--------------------------------------------------
function createWaveCircleArray(n,radius,waveHeight){var arr=[];const LEN=n+2;// 数组长度比浪头峰谷数多两个以在绘图时形成闭环    for(var i=0;i<LEN;i++){var theta=i*Math.PI*2/n;var r=radius+Math.sin(Math.PI/2*i)*waveHeight;// 造成涨落var pt={};pt.x=r*Math.cos(theta);pt.y=r*Math.sin(theta);arr.push(pt);}return arr;
}/*--------------------------------------------------
我国有70万英雄的航天人,其中中航科技集团一家公司就有
十七万员工,中国航天科工有十五万员工,这两家就超过三
十万了!而马斯克的Space X公司才不到万人......
---------------------------------------------------*/
//-->
</script>

【底图】

以下为上文用到的底图148.jpg

END

这篇关于【Canvas技法】六种环状花纹荟萃的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916115

相关文章

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

六种msvcp110.dll丢失修复的方法分享,有效快速修复msvcp110.dll丢失

在日常使用电脑的过程中,我们可能会遭遇各种程序运行错误,其中“msvcp110.dll丢失”是一种非常常见的问题。这个问题通常发生在尝试启动某些程序时,系统会弹出一个错误消息,提示“程序无法启动,因为计算机缺少msvcp110.dll”,这可能会让用户感到困惑和无助。幸运的是,这个问题有多种解决方法,本文将指导你通过几种简单的步骤来修复“msvcp110.dll丢失”的问题,让你的程序回到正常运行

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步:获取 Canvas 对象和渲染上下文 第三步 画布#ID选择器执行回调——

Android canvas save restore saveLayer的异同点

一、基础操作 drawText、drawRect、drawColor等 对于这些基础操作,相信每一个安卓开发者都能说上个一二点出来,这些就不多做介绍,api 工程师必备技能之一。 在进阶之前,先回答这个问题:    问:canvas既然大家都理解为画布,那如果先在画布上绘制了某些内容,然后再canvas.rotate旋转了画布,为什么这些已经绘制在画布上的内容不会跟随着旋转?    答:由此可

第二十一篇——地形篇:六种地形的战术要点

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 通过地形的不同分析,动态的看待每一种地形的方式;通过不同的组合结果再结合实际的情况当做判断的依据 二、思路&方案 1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇

自定义View-Canvas

转载自:https://www.jianshu.com/p/f69873371763 Android Canvas 方法总结 简介 在自定义 View的时候,我们经常需要绘制一些自己想要的效果。 这里就需要使用Canvas对象。 下面将Canvas对象常用方法做个笔记,方便记忆。 对Canvas进行操作 对Canvas的一系列操作,是指对Canvas进行旋转、平移、缩放等操作。 这些操作可以

canvas-实现放大镜效果

canvas-实现放大镜效果 目录 文章目录 前言推荐阅读代码展示结果展示 前言 本文为canvas实现放大镜逻辑简单,适合作为基础项目练手 推荐阅读 《H5 canvas核心技术》 代码展示 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Comp

canvas-原生js实现时钟绘图效果

canvas-原生js实现时钟绘图效果 目录 文章目录 前言代码效果查看 前言 本文为canvas实现时钟效果可直接复制使用 代码 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta n

js-基于AudioContext在canvas上显示声音波形

js-基于AudioContext在canvas上显示声音波形 目录 文章目录 前言效果展示代码展示`index.html``Aud.js` 前言 从ES7后开始启用AudioContex常用API是:createScriptProcessor, onaudioprocess, getChannelData注意:onaudioprocess已经废弃,开始改用Analyse

【Canvas与纹饰】环形小蜜蜂纹饰

【成图】 【代码】 <!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;