【Canvas与艺术】环形Z字纹

2024-08-23 08:28
文章标签 canvas 艺术 环形 字纹

本文主要是介绍【Canvas与艺术】环形Z字纹,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【成图】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>环形Z字纹</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></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 = "navy";ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);const R=180;const N=20;//ctx.strokeStyle="gold";ctx.lineWidth=1;const T=R/9;for(var i=0;i<N;i++){var theta=Math.PI*2/N*i;var a=createPt(R*Math.cos(theta),R*Math.sin(theta));var angle1=Math.PI*2/N/5*4;var b=createPt(R*Math.cos(theta+angle1),R*Math.sin(theta+angle1));var r=T/4*3;var c=createPt(b.x+r*Math.cos(theta+angle1+Math.PI),b.y+r*Math.sin(theta+angle1+Math.PI));var angleC1C2=Math.PI*2/N/5*5;r=R-T*3/4;var c1=createPt(r*Math.cos(theta+angleC1C2),r*Math.sin(theta+angleC1C2));r=R-T*2/4;var c2=createPt(r*Math.cos(theta+angleC1C2),r*Math.sin(theta+angleC1C2));var angleD1D2=Math.PI*2/N/5*6;r=R-T*2/4;var d2=createPt(r*Math.cos(theta+angleD1D2),r*Math.sin(theta+angleD1D2));r=R-T*3/4;var d1=createPt(r*Math.cos(theta+angleD1D2),r*Math.sin(theta+angleD1D2));var angle2=Math.PI*2/N/5*7;r=R-T*3/4;var d=createPt(r*Math.cos(theta+angle2),r*Math.sin(theta+angle2));var r=T/4*1;var e=createPt(d.x+r*Math.cos(theta+angle2+Math.PI),d.y+r*Math.sin(theta+angle2+Math.PI));var angle3=Math.PI*2/N/5*3;r=R-T;var f=createPt(r*Math.cos(theta+angle3),r*Math.sin(theta+angle3));r=T/4*3;var g=createPt(f.x+r*Math.cos(theta+angle3),f.y+r*Math.sin(theta+angle3));var angleG1G2=Math.PI*2/N/5*2;r=R-T*1/4;var g1=createPt(r*Math.cos(theta+angleG1G2),r*Math.sin(theta+angleG1G2));r=R-T*2/4;var g2=createPt(r*Math.cos(theta+angleG1G2),r*Math.sin(theta+angleG1G2));var angleH1H2=Math.PI*2/N/5*1;r=R-T*1/4;var h1=createPt(r*Math.cos(theta+angleH1H2),r*Math.sin(theta+angleH1H2));r=R-T*2/4;var h2=createPt(r*Math.cos(theta+angleH1H2),r*Math.sin(theta+angleH1H2));var r=R-T/4;var h=createPt(r*Math.cos(theta),r*Math.sin(theta));ctx.fillStyle="gold";ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.arc(0,0,R,theta,theta+angle1,false);ctx.lineTo(b.x,b.y);ctx.lineTo(c.x,c.y);ctx.arc(0,0,R-T*3/4,theta+angle1,theta+angleC1C2,false);ctx.lineTo(c1.x,c1.y);ctx.lineTo(c2.x,c2.y);ctx.arc(0,0,R-T*2/4,theta+angleC1C2,theta+angleD1D2,false);ctx.lineTo(d2.x,d2.y);ctx.lineTo(d1.x,d1.y);ctx.lineTo(d.x,d.y);ctx.lineTo(e.x,e.y);ctx.arc(0,0,R-T,theta+angle2,theta+angle3,true);ctx.lineTo(f.x,f.y);ctx.lineTo(g.x,g.y);ctx.arc(0,0,R-T/4,theta+angle3,theta+angleG1G2,true);ctx.lineTo(g1.x,g1.y);ctx.lineTo(g2.x,g2.y);ctx.arc(0,0,R-T/4*2,theta+angleG1G2,theta+angleH1H2,true);ctx.lineTo(h2.x,h2.y);ctx.lineTo(h1.x,h1.y);ctx.arc(0,0,R-T/4*1,theta+angleH1H2,theta,true);ctx.closePath();//ctx.stroke();ctx.fill();}writeText(ctx,WIDTH/2-30,HEIGHT/2-5,"逆火原创","8px consolas","lightgrey");// 版权}
}/*----------------------------------------------------------
函数:创建一个二维坐标点
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

这篇关于【Canvas与艺术】环形Z字纹的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

[情商-13]:语言的艺术:何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相!

目录 前言: 一、说话的真实程度分级 二、说谎动机分级:善意谎言、中性谎言、恶意谎言 三、小心:所谓真相:只说对自己有利的真相 四、小心:所谓真相:就是别人想让你知道的真相 五、小心:所谓善解人意:就是别人只说你想要听到的话 前言: 何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相! 人与人交流话语中,处处充满了不真实,完全真实的只是其中一小部分,这

环形定时任务 原理

业务背景 在稍微复杂点业务系统中,不可避免会碰到做定时任务的需求,比如淘宝的交易超时自动关闭订单、超时自动确认收货等等。对于一些定时作业比较多的系统,通常都会搭建专门的调度平台来管理,通过创建定时器来周期性执行任务。如刚才所说的场景,我们可以给订单创建一个专门的任务来处理交易状态,每秒轮询一次订单表,找出那些符合超时条件的订单然后标记状态。这是最简单粗暴的做法,但明显也很low,自己都下不去手写

Linux多线程——POSIX信号量与环形队列版本之生产消费模型

文章目录 POSIX信号量POSIX的操作初始化销毁等待信号量(申请资源)发布信号量(放下资源) 环形队列之生产消费模型 POSIX信号量 POSIX信号量和System V信号量是不同的标准 但是实现的功能是一样的,都是为了解决同步的问题 我们说信号量指的就是资源的数量 在生产者与消费者模型里面,生产者与消费者所认为的资源是不同的 生产者认为空间是资源,因为每次都要

写给大数据开发:你真的“慢“了吗?揭秘技术与职场的平衡艺术

你是否曾经在深夜里,面对着一个棘手的数据处理问题,感到无比沮丧?或者在一次重要的项目汇报中,突然语塞,无法清晰地表达你的技术方案?作为一名大数据开发者,这些场景可能再熟悉不过。但别担心,因为你并不孤单。让我们一起探讨如何在这个瞬息万变的行业中,既磨练技术利刃,又培养职场软实力。 目录 技术与时间的赛跑1. 长远视角的重要性2. 复利效应在技能学习中的应用 跨界思维:数据结构教我们的职场智

Vue 中实现视频播放的艺术

随着前端技术的飞速发展,视频播放在 Web 应用中已经成为了一个不可或缺的功能。从社交媒体平台到教育网站,再到在线购物平台,视频元素无处不在。而 Vue.js 作为当今最流行的前端框架之一,在实现视频播放时提供了很多强大的工具和技巧。在这篇博客中,我们将深入探讨如何使用 Vue.js 实现视频播放功能,不仅仅是简单地嵌入视频,还要添加一些高级功能,如自定义播放器控件、播放进度条、视频切换、事件处理

“掌握Linux网络编程艺术,构建跨平台的网络通信解决方案!“#Linux系统编程之网络编程

"掌握Linux网络编程艺术,构建跨平台的网络通信解决方案!"#Linux系统编程之网络 前言预备知识一、 网络编程概述1.1 网络编程概述图1.2 TCP/UDP对比(面试)1.3 端口号的作用 二、 字节序2.1 大端字节序(Big-Endian)2.2 小端字节序(Little-Endian)2.3 字节序的重要性2.4 字节序转换函数2.5 字节序示意图 三、 socket编程步骤四

NYOJ 737 石子合并(一)(环形)

OJ题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=737 参考资料:http://wenku.baidu.com/view/b4dbe923482fb4daa58d4b84.html (感觉解释的很好) 描述     有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次

Maven 深入指南:构建自动化与项目管理的艺术

目录 1.引言 2.Maven 的核心概念 2.1 POM(Project Object Model) 2.2 依赖管理 2.3 生命周期 2.4 插件和目标 3.Maven 的安装与配置 3.1 安装 Maven 3.2 配置 settings.xml 4.Maven 的使用 4.1 创建项目 4.2 构建项目 4.3 运行测试 4.4 部署项目 5.Maven 插