【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;width:1200px;}</style></head><body οnlοad="init();"><div class="centerlize"><canvas id="myCanvas" width="10px" height="10px" style="border:1px dotted black;">如果看到这段文字说您的浏览器尚不支持HTML5 Canvas,请更换浏览器再试.</canvas><img id="myImg" src="94.jpg" style="display:none;"/></div></body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码(从<!DOCTYPE到script>)拷贝下来,粘贴到文本编辑器中,
* 另存为.html文件,再用chrome浏览器打开,就能看到实现效果。
******************************************************************/// canvas的绘图环境
var ctx;// 边长
const WIDTH=1000;
const HEIGHT=500;// 舞台对象
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.angle=0;// 下面两个量用来控制五个边依次闪亮this.currLightPos=0;this.lightIdx=0;// 初始化this.init=function(){}// 更新this.update=function(){this.angle+=Math.PI/180;// 累计五百变一次this.lightIdx++;this.currLightPos=Math.floor(this.lightIdx/100)if(this.lightIdx>500){this.lightIdx=0;}}// 画背景this.paintBg=function(ctx){ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏    var img=document.getElementById("myImg");ctx.drawImage(img,0,0,667,500,-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);}// 画前景this.paintFg=function(ctx){// 三一渐变式光芒四射效果ctx.save();ctx.rotate(this.angle);        for(var i=0;i<90;i++){var startAngle=Math.PI/3/15*i;// 起始角度var endAngle=startAngle+Math.PI/3/15*1.15;// 中止角度var alpha=Math.abs(Math.sin(3*startAngle/2))/4+0.75;// 透明度ctx.beginPath();ctx.moveTo(0, 0);ctx.arc(0, 0, 1000, startAngle, endAngle,false);ctx.closePath();ctx.fillStyle = "rgba(153,217,234,"+alpha+")";ctx.fill();}ctx.restore();// 画黄底五角星draw5Star(ctx,0,0,90,"yellow");// 画立体五角星const R=80;// 五角星外角半径const r=30;// 五角星内角半径ctx.save();ctx.rotate(Math.PI/10);for(let i=0;i<5;i++){var alpha=i*2*Math.PI/5-Math.PI/5;var beta=i*2*Math.PI/5;            // 画红色五片var x1=R*Math.cos(alpha);var y1=R*Math.sin(alpha);var x2=r*Math.cos(beta);var y2=r*Math.sin(beta);ctx.beginPath();ctx.moveTo(0,0);ctx.lineTo(x1,y1);ctx.lineTo(x2,y2);ctx.closePath();if(this.currLightPos==i){ctx.fillStyle="rgb(253,53,53)";}else{ctx.fillStyle="rgb(250,2,2)";}ctx.fill();// 画深红五片var gama=(i)*2*Math.PI/5+Math.PI/5;var x3=R*Math.cos(gama);var y3=R*Math.sin(gama);ctx.beginPath();ctx.moveTo(0,0);            ctx.lineTo(x3,y3);ctx.lineTo(x2,y2);ctx.closePath();if(this.currLightPos==i){ctx.fillStyle="rgb(170,5,5)";}else{ctx.fillStyle="rgb(167,3,4)";}ctx.fill();}ctx.restore();// 下方文字说明ctx.save();ctx.shadowColor = 'black';ctx.shadowOffsetX = 0;ctx.shadowOffsetY = 1;ctx.shadowBlur = 2;ctx.textAlign="center";ctx.textBaseLine="Middle";ctx.font="40px 仿宋";ctx.fillStyle="rgb(255,238,177)";    ctx.fillText('谁不欲光芒万丈千秋万代 谁甘愿此生如牛马代代永为奴',0,200);ctx.restore();ctx.font="12px 仿宋";ctx.fillStyle="white";    ctx.fillText('逆火原创',WIDTH/2-100,HEIGHT/2-20);}
}// 画实心五角星的函数
function draw5Star(ctx,x,y,r,color){ctx.save()ctx.translate(x-r,y-r);    ctx.beginPath();ctx.moveTo(r, 0);ctx.lineTo(r+Math.cos(Math.PI*3/10)*r, r+Math.sin(Math.PI*3/10)*r);ctx.lineTo(r-Math.cos(Math.PI*1/10)*r, r-Math.sin(Math.PI*1/10)*r);ctx.lineTo(r+Math.cos(Math.PI*1/10)*r, r-Math.sin(Math.PI*1/10)*r);ctx.lineTo(r-Math.cos(Math.PI*3/10)*r, r+Math.sin(Math.PI*3/10)*r);ctx.lineTo(r, 0);ctx.closePath();ctx.fillStyle=color;ctx.fill();ctx.restore();
}/*---------------------------------------------
第一眼就看上的车,我们往往买不起;
第一眼就中意的人,她往往不会喜欢你;
你真正想要的,没有一样是可以轻易得到的;
对于穷人家孩子来说,想得着些许好的就得往死里奔;
对于周公子们来说,生下来就在终点线笑着喝茶等人。
----------------------------------------------*/
//-->
</script>

【底图】

上文用到的底图94.jpg

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/291327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在.Net6中用gdal实现第一个功能

目录 一、创建.NET6的控制台应用程序 二、加载Gdal插件 三、编写程序 一、创建.NET6的控制台应用程序 二、加载Gdal插件 Gdal的资源可以经过NuGet包引入。右键单击项目名称&#xff0c;然后选择 "Manage NuGet Packages"&#xff08;管理 NuGet 包&#xff09;。N…

面向对象特征一:封装性

9.1 为什么需要封装&#xff1f; 我要用洗衣机&#xff0c;只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗&#xff1f;有必要 碰电动机吗&#xff1f; 我要开车&#xff0c;我不需要懂离合、油门、制动等原理和维修也可以驾驶。 客观世界里每一个事物…

【Java面试题】Redis中篇(高可用:主从复制、哨兵、集群)

文章目录 高可用14.Redis如何保证高可用&#xff1f;15.Redis的主从复制&#xff1f;16.Redis主从有几种常见的拓扑结构&#xff1f;17.Redis的主从复制原理了解吗&#xff1f;18.说说主从数据同步的方式&#xff1f;19.主从复制存在的问题&#xff1f;20.Redis Sentinel(哨兵)…

基于Spring Boot 3 + Spring Security6 + JWT + Redis实现接口资源鉴权

紧接上一篇文章&#xff0c;基于Spring Boot 3 Spring Security6 JWT Redis实现接口资源鉴权 系列文章指路&#x1f449; 系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类 项目源码&#x1f449; /shijizhe/boot-test 文章目录 1. 修改 UserDetailsServic…

python爬虫之selenium4使用(万字讲解)

文章目录 一、前言二、selenium的介绍1、优点&#xff1a;2、缺点&#xff1a; 三、selenium环境搭建1、安装python模块2、selenium4新特性3、安装驱动WebDriver驱动选择驱动安装和测试 基础操作1、属性和方法2、单个元素定位通过id定位通过class_name定位一个元素通过xpath定位…

C语言学习-Day23-函数递归2

接上一天&#xff0c;练习2&#xff1a;编写函数不允许创建临时变量&#xff0c;求字符串的长度。 实现方式1&#xff1a; int my_strlen(char* str) { int count 0; while (*str ! \0) { count; str; } return count; } int main() { char arr[] "bit"; //[b]…

写作类AI推荐(二)

本章要介绍的写作AI如下&#xff1a; 火山写作 主要功能&#xff1a; AI智能创作&#xff1a;告诉 AI 你想写什么&#xff0c;立即生成你理想中的文章AI智能改写&#xff1a;选中段落句子&#xff0c;可提升表达、修改语气、扩写、总结、缩写等文章内容优化&#xff1a;根据全文…

Modelsim手动仿真实例

目录 1. 软件链接 2. 为什么要使用Modelsim 3. Modelsim仿真工程由几部分组成&#xff1f; 4. 上手实例 4.1. 新建文件夹 4.2. 指定目录 4.3. 新建工程 4.4. 新建设计文件&#xff08;Design Files&#xff09; 4.5. 新建测试平台文件&#xff08;Testbench Files&…

YOLOv9改进策略 :block优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; token mixer被验证能够大幅度提升性能&#xff0c;但典型的token mixer为自注意力机制&#xff0c;推理耗时长&#xff0c;计算代价大&#xff0c;而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构…

代下载全网资源

尊敬的用户&#xff1a; 感谢您一直以来对我们的支持和关注&#xff01;为了更好地满足用户的需求&#xff0c;我们决定在全网源码程序和软件代下载方面进行服务升级。 作为全网资源代下载服务的一部分&#xff0c;我们将提供全面的源码程序和软件代下载服务。无论是开源项目…

资源免费分享了

为了解决粉丝们在学习过程中&#xff0c;出现没有资料&#xff0c;没有书籍&#xff0c;搜索引擎搜索不精准&#xff0c;没有恰当的博文等这一类情况&#xff0c;今天&#xff0c;我将我曾经的学习资料&#xff0c;免费分享给大家&#xff01; 博主声明:此并非过度宣传&#x…

英伟达文本生成3D模型论文:Magic3D: High-Resolution Text-to-3D Content Creation解读

一、摘要 摘要&#xff1a;DreamFusion 最近展示了使用预训练的文本到图像扩散模型来优化神经辐射场 (NeRF) 的实用性&#xff0c;实现了显着的文本到 3D 合成结果。然而&#xff0c;该方法有两个固有的局限性&#xff1a;&#xff08;a&#xff09;NeRF 的优化极慢和&#xf…

Android逆向-数据修改逻辑修改视图修改

目录 0x00 相关工具及环境 0x01 APP逆向 - 数据修改 0x02 APP逆向 - 逻辑修改 0x03 APP逆向 - 视图修改 希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers B…

RocketMQ学习笔记:零拷贝

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、零拷贝技术1.1、什么是零拷贝1.2、mmap()1.3、Java中的零拷贝 1、零拷贝技术 1.1、什么是零拷贝 使用传统的IO&#xff0c;从硬盘读取数据然后发送到网络需要经过四个步骤。 通过DMA复…

css简单动画实现

html源码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>西安工程大学</title><link …

下载安装anaconda和pytorch的详细方法,以及遇到的问题和解决办法

下载安装Anaconda 首先需要下载Anaconda&#xff0c;可以到官网Anaconda官网或者这里提供一个镜像网站去下载anaconda镜像网站 安装步骤可参考该文章&#xff1a;Anaconda安装步骤&#xff0c;本篇不再赘述 注意环境变量的配置&#xff0c;安装好Anaconda之后一定要在环境变量…

深入并广泛了解Redis常见的缓存使用问题

Redis 作为一门主流技术&#xff0c;缓存应用场景非常多&#xff0c;很多大中小厂的项目中都会使用redis作为缓存层使用。 但是Redis作为缓存&#xff0c;也会面临各种使用问题&#xff0c;比如数据一致性&#xff0c;缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩&#…

원클릭으로 주류 전자상거래 플랫폼 상품 상세 데이터 수집 및 접속 시연 예제 (한국어판)

클릭 한 번으로 전자상거래 플랫폼 데이터를 캡처하는 것은 일반적으로 웹 페이지에서 정보를 자동으로 추출 할 수있는 네트워크 파충류 기술과 관련됩니다.그러나 모든 형태의 데이터 수집은 해당 웹 사이트의 사용 약관 및 개인 정보 보호 정책 및 현지 법률 및 규정을 준수…

Python处理包含不可打印/显示字符的中文字符串

Python处理包含不可打印/显示字符的中文字符串 在利用Python分析一个日志文件时&#xff0c;发现python读取文件总是报错: (result, consumed) self._buffer_decode(data, self.errors, final) UnicodeDecodeError: utf-8 codec cant decode byte 0xe3 in position 210: inva…

深入探索Yarn:安装与使用指南

Yarn 是一个由 Facebook 开发的 JavaScript 包管理器&#xff0c;旨在提供更快、更可靠的包管理体验。它与 npm 类似&#xff0c;但在某些方面更加高效和可靠。本文将介绍如何安装 Yarn&#xff0c;并展示如何使用它来管理 JavaScript 项目的依赖。 1. 安装 Yarn Yarn 可以通…