B站上看到的一段很牛逼的代码
直接复制到文本文件里,改扩展名为html就可以了
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>首页</title><style>
html,body{margin:0px;width:100%;height:100%;overflow:hidden;background:#000;
}#canvas{position:absolute;width:100%;height:100%;
}
</style></head>
<body><canvas id="canvas"></canvas><script>
function project3D(x,y,z,vars){var p,d;x-=vars.camX;y-=vars.camY-8;z-=vars.camZ;p=Math.atan2(x,z);d=Math.sqrt(x*x+z*z);x=Math.sin(p-vars.yaw)*d;z=Math.cos(p-vars.yaw)*d;p=Math.atan2(y,z);d=Math.sqrt(y*y+z*z);y=Math.sin(p-vars.pitch)*d;z=Math.cos(p-vars.pitch)*d;var rx1=-1000;var ry1=1;var rx2=1000;var ry2=1;var rx3=0;var ry3=0;var rx4=x;var ry4=z;var uc=(ry4-ry3)*(rx2-rx1)-(rx4-rx3)*(ry2-ry1);var ua=((rx4-rx3)*(ry1-ry3)-(ry4-ry3)*(rx1-rx3))/uc;var ub=((rx2-rx1)*(ry1-ry3)-(ry2-ry1)*(rx1-rx3))/uc;if(!z)z=0.000000001;if(ua>0&&ua<1&&ub>0&&ub<1){return {x:vars.cx+(rx1+ua*(rx2-rx1))*vars.scale,y:vars.cy+y/z*vars.scale,d:(x*x+y*y+z*z)};}else{return { d:-1 };}
}function elevation(x,y,z){var dist = Math.sqrt(x*x+y*y+z*z);if(dist && z/dist>=-1 && z/dist <=1) return Math.acos(z / dist);return 0.00000001;
}function rgb(col){col += 0.000001;var r = parseInt((0.5+Math.sin(col)*0.5)*16);var g = parseInt((0.5+Math.cos(col)*0.5)*16);var b = parseInt((0.5-Math.sin(col)*0.5)*16);return "#"+r.toString(16)+g.toString(16)+b.toString(16);
}function interpolateColors(RGB1,RGB2,degree){var w2=degree;var w1=1-w2;return [w1*RGB1[0]+w2*RGB2[0],w1*RGB1[1]+w2*RGB2[1],w1*RGB1[2]+w2*RGB2[2]];
}function rgbArray(col){col += 0.000001;var r = parseInt((0.5+Math.sin(col)*0.5)*256);var g = parseInt((0.5+Math.cos(col)*0.5)*256);var b = parseInt((0.5-Math.sin(col)*0.5)*256);return [r, g, b];
}function colorString(arr){var r = parseInt(arr[0]);var g = parseInt(arr[1]);var b = parseInt(arr[2]);return "#"+("0" + r.toString(16) ).slice (-2)+("0" + g.toString(16) ).slice (-2)+("0" + b.toString(16) ).slice (-2);
}function process(vars){if(vars.points.length<vars.initParticles) for(var i=0;i<5;++i) spawnParticle(vars);var p,d,t;p = Math.atan2(vars.camX, vars.camZ);d = Math.sqrt(vars.camX * vars.camX + vars.camZ * vars.camZ);d -= Math.sin(vars.frameNo / 80) / 25;t = Math.cos(vars.frameNo / 300) / 165;vars.camX = Math.sin(p + t) * d;vars.camZ = Math.cos(p + t) * d;vars.camY = -Math.sin(vars.frameNo / 220) * 15;vars.yaw = Math.PI + p + t;vars.pitch = elevation(vars.camX, vars.camZ, vars.camY) - Math.PI / 2;var t;for(var i=0;i<vars.points.length;++i){x=vars.points[i].x;y=vars.points[i].y;z=vars.points[i].z;d=Math.sqrt(x*x+z*z)/1.0075;t=.1/(1+d*d/5);p=Math.atan2(x,z)+t;vars.points[i].x=Math.sin(p)*d;vars.points[i].z=Math.cos(p)*d;vars.points[i].y+=vars.points[i].vy*t*((Math.sqrt(vars.distributionRadius)-d)*2);if(vars.points[i].y>vars.vortexHeight/2 || d<.25){vars.points.splice(i,1);spawnParticle(vars);}}
}function drawFloor(vars){var x,y,z,d,point,a;for (var i = -25; i <= 25; i += 1) {for (var j = -25; j <= 25; j += 1) {x = i*2;z = j*2;y = vars.floor;d = Math.sqrt(x * x + z * z);point = project3D(x, y-d*d/85, z, vars);if (point.d != -1) {size = 1 + 15000 / (1 + point.d);a = 0.15 - Math.pow(d / 50, 4) * 0.15;if (a > 0) {vars.ctx.fillStyle = colorString(interpolateColors(rgbArray(d/26-vars.frameNo/40),[0,128,32],.5+Math.sin(d/6-vars.frameNo/8)/2));vars.ctx.globalAlpha = a;vars.ctx.fillRect(point.x-size/2,point.y-size/2,size,size);}}}} vars.ctx.fillStyle = "#82f";for (var i = -25; i <= 25; i += 1) {for (var j = -25; j <= 25; j += 1) {x = i*2;z = j*2;y = -vars.floor;d = Math.sqrt(x * x + z * z);point = project3D(x, y+d*d/85, z, vars);if (point.d != -1) {size = 1 + 15000 / (1 + point.d);a = 0.15 - Math.pow(d / 50, 4) * 0.15;if (a > 0) {vars.ctx.fillStyle = colorString(interpolateColors(rgbArray(-d/26-vars.frameNo/40),[32,0,128],.5+Math.sin(-d/6-vars.frameNo/8)/2));vars.ctx.globalAlpha = a;vars.ctx.fillRect(point.x-size/2,point.y-size/2,size,size);}}}}
}function sortFunction(a,b){return b.dist-a.dist;
}function draw(vars){vars.ctx.globalAlpha=.15;vars.ctx.fillStyle="#000";vars.ctx.fillRect(0, 0, canvas.width, canvas.height);drawFloor(vars);var point,x,y,z,a;for(var i=0;i<vars.points.length;++i){x=vars.points[i].x;y=vars.points[i].y;z=vars.points[i].z;point=project3D(x,y,z,vars);if(point.d != -1){vars.points[i].dist=point.d;size=1+vars.points[i].radius/(1+point.d);d=Math.abs(vars.points[i].y);a = .8 - Math.pow(d / (vars.vortexHeight/2), 1000) * .8;vars.ctx.globalAlpha=a>=0&&a<=1?a:0;vars.ctx.fillStyle=rgb(vars.points[i].color);if(point.x>-1&&point.x<vars.canvas.width&&point.y>-1&&point.y<vars.canvas.height)vars.ctx.fillRect(point.x-size/2,point.y-size/2,size,size);}}vars.points.sort(sortFunction);
}function spawnParticle(vars){var p,ls;pt={};p=Math.PI*2*Math.random();ls=Math.sqrt(Math.random()*vars.distributionRadius);pt.x=Math.sin(p)*ls;pt.y=-vars.vortexHeight/2;pt.vy=vars.initV/20+Math.random()*vars.initV;pt.z=Math.cos(p)*ls;pt.radius=200+800*Math.random();pt.color=pt.radius/1000+vars.frameNo/250;vars.points.push(pt);
}function frame(vars) {if(vars === undefined){var vars={};vars.canvas = document.querySelector("canvas");vars.ctx = vars.canvas.getContext("2d");vars.canvas.width = document.body.clientWidth;vars.canvas.height = document.body.clientHeight;window.addEventListener("resize", function(){vars.canvas.width = document.body.clientWidth;vars.canvas.height = document.body.clientHeight;vars.cx=vars.canvas.width/2;vars.cy=vars.canvas.height/2;}, true);vars.frameNo=0;vars.camX = 0;vars.camY = 0;vars.camZ = -14;vars.pitch = elevation(vars.camX, vars.camZ, vars.camY) - Math.PI / 2;vars.yaw = 0;vars.cx=vars.canvas.width/2;vars.cy=vars.canvas.height/2;vars.bounding=10;vars.scale=500;vars.floor=26.5;vars.points=[];vars.initParticles=700;vars.initV=.01;vars.distributionRadius=800;vars.vortexHeight=25;}vars.frameNo++;requestAnimationFrame(function() {frame(vars);});process(vars);draw(vars);
}
frame();
</script><div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';">
<p>适用浏览器:360、FireFox、Chrome、Opera、傲游、搜狗、世界之窗. 不支持Safari、IE8及以下浏览器。</p>
<p>来源:<a href="http://sc.chinaz.com/" target="_blank">站长素材</a></p>
</div>
</body>
</html>
B站上看到的一段很牛逼的代码相关推荐
- 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
来自公众号:五分钟学算法 今天分享四个代码量很少,但很牛逼很经典的算法或项目案例. 1.no code 项目地址: https://github.com/kelseyhightower/nocode ...
- 你以为有白金卡就很牛逼?错!
近段有个朋友办了一张平安银行的白金卡,额度5万元,然后他高兴得不得了,还到处炫耀,以为带个"白金"字就很牛逼,其实不然,表面上看,白金卡虽然高大上,其实也只是一种卡级而已. 所以今 ...
- 环球黑卡是不是很牛逼?
环球黑卡 环球黑卡是很牛逼,估计听说过的人都有这样的疑问. 近段就有一个网友在支付宝上抽到了环球黑卡,如果很牛逼还能抽奖送? 所谓抽奖获得环球黑卡,可能是商家跟支付宝联合推出的活动,但是也不要太激动. ...
- Java 未死,依然很牛逼!
很多文章都在说 Java 快被取代了,其实不然,现在 Java 还是未来主导编程语言,依然很牛逼. 今天给大家带来一套珍贵的 Java 电子书,非常全面,包括 Java 语言基础.多线程并发编程.JV ...
- 【福利】Java 依然很牛逼!
很多文章都在说 Java 快被取代了,其实不然,现在 Java 还是未来主导编程语言,依然很牛逼. 今天给大家带来一套珍贵的 Java 电子书,非常全面,包括 Java 语言基础.多线程并发编程.JV ...
- css盒模型中margin很牛逼
css盒子模型,说简单也简单,用的时候也有不简单的. 其中margin的值可以为负值,并且为了实现margin,忽略父级的padding.border.甚至定位.这在布局上很有用,要注意. ----- ...
- IDEA 有个很牛逼的功能
IDEA 有个很牛逼的功能,那就是后缀补全(不是自动补全),很多人竟然不知道这个操作,还在手动敲代码. 这个功能可以使用代码补全来模板式地补全语句,如遍历循环语句(for.foreach).使用 St ...
- 国内的windows硬件检测软件算是很牛逼的吧!!!?
这几天的实践表明,免费的,windows操作系统上硬件驱动检测软件,国内做的挺牛逼的. 虽然这些软件有些流氓,比如鲁大师,比如驱动精灵. 但是,在硬件检测方面确实挺厉害的,客官的说. 缘由: 最近在搞 ...
- 中国科学院计算机在职研究生怎么样,中科大在职研究生好考吗,考进中科院的人很牛逼吗?...
很多小伙伴在进入社会之后发现仍然需要不断的提升自己,中专的升大专.大专的升本科,面对越来越大的就业压力,到了本科发现自己的学历还是不够用.中科大在职研究生好考吗,可以通过中科大对于我们普通人来说好考吗 ...
最新文章
- 【cogs 309】香甜的黄油
- 山东省各2021高考成绩查询,关于2021年山东省高考成绩查询系统入口【官网】
- Mysql和mono,.net – Mac OS X Mono和MySql连接器问题
- Win10怎么设置虚拟内存?
- Java文件操作:文件夹中搜索文件
- Java最佳实践–队列之战和链接的ConcurrentHashMap
- java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果
- javascript 网页自动跳转
- Racket编程指南——2 Racket概要
- 计算机考在职研究生难不难,计算机在职硕士考试难吗?
- windows网络和共享中心“查看基本网络信息并设置连接”为“未知”的解决方案
- python xls文件转为csv
- nodejs安装时遇到的问题及解决方案
- 学会了C语言/C++能做什么?我们一起来看看吧!
- 商汤科技招聘全职研究员和实习生
- 【超长序列建模】美团CIKM‘22:《Sampling Is All You Need on Modeling Long-Term User Behaviors for CTR Prediction》
- 恐龙世界游戏-恐龙百科世界乐园游戏
- 香港大学和清华大学计算机,香港大学在我国属于什么水平,有哪些优势、能够和清华北大相比吗...
- 计算机科学与基础 简答题,计算机科学基础习题与解析
- CSS导航条从入门到精通
热门文章
- 01海马课堂项目总结1107
- vue之前台请求特定商品数据展示+后台PHP处理后台数据(实战)
- Linux网卡驱动分析之RTL8139(五)
- 利用python和matlab求解简单的线性规划问题
- c++循环嵌套:不定方程求解
- 分发下载用什么工具?联想企业网盘已成办公新标配
- linux--vi和vim
- Sql插入藏文数据出现乱码情况
- 音频之各种有损编码器的比较,AAC编码器之选择,频谱、差值比较,编码器下载
- 建网站,做网站,更有多种自定制网站建设套餐供您选择!用建站宝盒自助建站软件,免费智能建站系统,......