【Canvas与艺术】模拟八一电影制片厂电影片头效果

【缘起】

八一厂每部电影前都有其专有开头,如:https://www.ixigua.com/6799821997258834440?logTag=2eacce76401e13f9efe7

这个片头可以用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></div></body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码(从<!DOCTYPE到script>)拷贝下来,粘贴到文本编辑器中,
* 另存为.html文件,再用chrome浏览器打开,就能看到实现效果。
******************************************************************/// canvas的绘图环境
var ctx;// 边长
const WIDTH=1000;
const HEIGHT=540;// 舞台对象
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.starCnt=500;// 粒子数组this.points=[];// 初始化this.init=function(){// 放射性原始数组var arr=[];for(let i=0;i<360;i++){let theta=i*Math.PI*2/360;var pt={};pt.x=54*Math.cos(theta);pt.y=54*Math.sin(theta);pt.theta=theta;arr.push(pt);}for(let i=0;i<this.starCnt;i++){// 随机取原始数组的一个let idx=Math.floor(Math.random()*arr.length);let pt=arr[idx];// 创建点var point={};point.x=arr[idx].x;point.y=arr[idx].y;point.step=Math.random()*10+1;point.theta=arr[idx].theta;point.xInitial=arr[idx].x;point.yInitial=arr[idx].y;// 放入粒子数组this.points.push(point);}}// 更新this.update=function(){const DIS=WIDTH/2*WIDTH/2+HEIGHT/2*HEIGHT/2;for(i=0;i<this.starCnt;i++){var pt=this.points[i];pt.x+=pt.step*Math.cos(pt.theta);pt.y+=pt.step*Math.sin(pt.theta);var distance=pt.x*pt.x+pt.y*pt.y;// 越过对角线长度一半即回到初始位置if(distance>DIS){    pt.x=pt.xInitial;pt.y=pt.yInitial;}}}// 画背景this.paintBg=function(ctx){// 清屏ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);    ctx.fillStyle = "rgba(0, 64, 128, 0.8)";// 加上半透明蒙层,字和光源便出现了残影效果ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);        }// 画前景this.paintFg=function(ctx){    // 用直线模拟放射状光芒for(let i=0;i<this.starCnt;i++){var pt=this.points[i];ctx.beginPath();ctx.moveTo(pt.x,pt.y);ctx.lineTo(pt.x-20*Math.cos(pt.theta),pt.y-20*Math.sin(pt.theta));ctx.closePath();ctx.lineWidth=2;ctx.strokeStyle="white";ctx.stroke();}// 渐变色圈(可不加)var rgnt=ctx.createRadialGradient(0,0,30,0,0,80);         rgnt.addColorStop(0,"rgb(255,255,255)");rgnt.addColorStop(1,"rgba(0,64,128,0.001)");ctx.fillStyle=rgnt;ctx.beginPath();ctx.arc(0,0,80,0,2*Math.PI,true);ctx.closePath();ctx.fill();// 画白底五角星draw5Star(ctx,0,0,90,"white");// 画立体五角星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();ctx.fillStyle="red";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();ctx.fillStyle="yellow";ctx.fill();}ctx.restore();// 下方文字说明ctx.save();ctx.shadowColor = 'black';ctx.shadowOffsetX = 5;ctx.shadowOffsetY = -2;ctx.shadowBlur = 5;ctx.textAlign="center";ctx.textBaseLine="Middle";ctx.font="40px Microsoft YaHei UI";ctx.fillStyle="white";    ctx.fillText('模拟八一电影制片厂电影片头',0,200);ctx.font="10px Microsoft YaHei UI";ctx.fillStyle="white";    ctx.fillText('逆火原创',450,260);ctx.restore();}
}// 画实心五角星的函数
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>

END

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

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

相关文章

开放大学2024年春《幼儿园环境创设 050546》过程性考核作业二:撰写一所幼儿园活动环境创设现状分析评价报告参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 选择一所幼儿园&#xff0c;最好是你所在或者比较熟悉的园所&am…

单页面应用部署到iis上可以正常打开,刷新就404

当您遇到Dumi打包的网站部署到IIS上可以正常打开首页,但刷新页面时出现404错误的情况,这通常与以下几个方面有关: 路由处理: Dumi生成的项目通常基于SPA(Single Page Application)架构,使用前端路由来实现无刷新导航。这意味着大部分页面切换是在浏览器层面完成的,而不…

vc_red.msi 错误

建议将安装的软件解压&#xff0c;再安装&#xff0c;这样可以自动下载vc_red.msi. 不解压就会出现这个错误。

unity学习(73)——服务器异常--无法处理 123类型的数据包

服务器发送回的数据包&#xff0c;客户端根本读不出来&#xff0c;type都读不出来&#xff0c;拖了三天&#xff0c;把客户端翻了个底朝天&#xff0c;发现客户端一点问题都没有&#xff01; 所有的问题不是unity的模型问题&#xff0c;就是socket网络通信中断&#xff01; 1…

C++ 控制语句(一)

一 顺序结构 程序的基本结构有三种&#xff1a; 顺序结构、分支结构、循环结构 大量的实际问题需要通过各种控制流程来解决。 1.1 顺序结构 1.2 简单语句和复合语句 二 循环 2.1 for循环 语句流程图 注意&#xff1a;使用for语句的灵活性 三 while语句 四 do while语句

java springboot mybatisplus vue elementui python django vue 30套源代码 可用于接私活或毕设

java springboot vue elementui python django vue 30套源代码 Springboot vue3 elementplus 后台通用权限系统 代码生成器 (源码教程开发环境) Springboot vue2 elementui 后台通用权限系统 代码生成器(源码教程开发环境) Springboot vue2 elementui 物品出入库管理系统 (源…

【项目技术介绍篇】如何在本地运行若依项目

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

程序员也写歌啦

我的第一首AI原创歌曲《旅途的歌声》 身为 AI 重度患者的我&#xff0c;时刻关注着每天发布的各种 AI 产品。面对这些雨后春笋般的 AI 产品&#xff0c;我也早就没那么敏感了。 但是今天尝试着用 AI 生成了一个音乐&#xff0c;真的震惊到了我&#xff01; 不到一分钟&#…

Java中的序列化

Java中的序列化&#xff08;Serialization&#xff09;是一个将对象转换为字节序列的过程&#xff0c;以便可以在网络上传输或将其写入持久存储&#xff0c;如文件。这样&#xff0c;可以稍后在需要时重新构造这个对象&#xff0c;即反序列化&#xff08;Deserialization&#…

网络瞎复习

七层 应用进程 粘包问题以及如何理解是 TCP 面向字节流协议&#xff1f; 之所以会说 TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff0c;是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方。 先来说说为什么 UDP 是面…

【LaTeX】7实现章节跳转

使用 LaTeX 实现章节跳转 写在最前面1. 引入 hyperref 包2. 标记章节3. 引用章节示例代码注意 小技巧总结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;…

前端理论总结(js)——闭包和内存泄漏

闭包 什么是闭包&#xff1f; 函数内部和函数外部连接起来的桥梁&#xff0c;可以在一个内层函数中访问到其外层函数的作用域 为什么要用 封装变量 收敛权限 临时变量持久化 优点 1.保护函数内的变量安全      2.在内存中维持一个变量(用的太多就变成了缺点&#xff0c…

C语言例4-15:从键盘输入一个整数,求其绝对值并输出。

代码如下&#xff1a; //从键盘输入一个整数&#xff0c;求其绝对值并输出。 #include<stdio.h> int main(void) {int n;printf("输出一个整数&#xff1a; \n");scanf("%d",&n); //从键盘输入一个整数保存至变量nif(n<0) //…

使用LangChain LCEL生成RAG应用、使用LangChain TruLens对抗RAG幻觉

# 导入LangChain的库 from langchain import *# 加载数据源 loader WebBaseLoader() doc loader.load("https://xxx.html")# 分割文档对象 splitter RecursiveCharacterTextSplitter(max_length512) docs splitter.split(doc)# 转换文档对象为嵌入&#xff0c;并…

程序员35岁的职业困惑及应对之道

35岁,对许多程序员来说,是一个职业生涯的重要分水岭。在这个年龄,一些人开始感到迷茫和焦虑,担心自己的技能已经落后,难以跟上日新月异的技术变革。而另一些人则充满信心,认为多年来积累的丰富经验和扎实的技术功底,将助力他们在未来的职业道路上取得新的飞跃。 无疑,在AI、自…

一款比 K8S 更好用的编排工具——Nomod 单机部署

上下文 最近公司需要调研类似 EMCHub 这样支持算力共享的服务。第一直觉是使用 K8S 或 K3S&#xff0c;作为 CNCF 孵化的顶级项目&#xff0c;同时也是当前云原生生态使用最广的编排系统。但是在学习 EMC Hub 源码过程中&#xff0c;偶然发现它是基于 Nomad 做的集群管理。 相…

鸿蒙HarmonyOS应用开发之使用NAPI接口在主线程中进行模块加载

场景介绍 Node-API中的napi_load_module接口的功能是在主线程中进行模块的加载&#xff0c;当模块加载出来之后&#xff0c;可以使用函数napi_get_property获取模块导出的变量&#xff0c;也可以使用napi_get_named_property获取模块导出的函数&#xff0c;目前支持以下场景&a…

vue3从精通到入门2:虚拟DOM的生成与真实DOM的转化

虚拟 DOM 实现是 Vue 框架的核心部分之一&#xff0c;它负责在真实 DOM 之上抽象出一个轻量级的、可复用的 JavaScript 对象树&#xff0c;用于高效地更新视图。 什么是虚拟DOM? 虚拟 DOM 是一个编程概念&#xff0c;它将真实的 DOM 树抽象为一个轻量级的 JavaScript 对象树…

2024年学鸿蒙开发有“钱”途吗?

随着科技的不断发展和智能设备的普及&#xff0c;鸿蒙系统作为华为自主研发的操作系统&#xff0c;正逐渐受到市场的关注。2024年&#xff0c;学鸿蒙开发是否有前途&#xff0c;成为了很多开发者关心的问题。本文将从多个角度分析鸿蒙系统的发展前景&#xff0c;以及学习鸿蒙开…

Qt源程序编译及错误问题解决

Error 5 while parsing C:/qt-everywhere-src-6.6.2/qt-build/qtdeclarative/src/qmlmodels/meta_types/qt6qmlmodels_release_metatypes.json: illegal value .json 文件为空文件0字节&#xff0c;加 “[]”&#xff0c;不要引号。可以解决这类错误。 Qt编译 Qt for Windows…