var context;
var screenWidth;
var screenHeight;
var doublePI = Math.PI * 2;
var step = 0;
var points = [];
var focalLength = 500;
var bgGradient;
window.onload = function()
{
canvas = document.getElementById(‘canvas’);
context = canvas.getContext(‘2d’);
window.onresize = function()
{
screenWidth = window.innerWidth;
screenHeight = window.innerHeight;
canvas.width = screenWidth;
canvas.height = screenHeight;
bgGradient=context.createRadialGradient((screenWidth >> 1), screenHeight >> 1, screenWidth, screenWidth >> 1, screenHeight >> 1, 0);
bgGradient.addColorStop(1, ‘#000’);
bgGradient.addColorStop(0.2, ‘#900’);
};
generatePoints();
window.onresize();
loop();
};
function generatePoints()
{
var i = 2000;
for(i; i > -1; --i)
{
var point3D = {x:(1 - Math.random() * 2) * 600, y:(1 - Math.random() * 2) * 600, z:(1 - Math.random() * 2) * 600, vx:0, vy:0, vz:0};
points.push(point3D);
}
}
window.getAnimationFrame =
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback)
{
window.setTimeout(callback, 16.6);
};
function loop()
{
context.globalAlpha = 0.4;
context.fillStyle = bgGradient;
context.fillRect(0, 0, screenWidth, screenHeight);
context.globalAlpha = 1;
updatePoints();
renderPoints();
renderWire();
step += 0.02;
getAnimationFrame(loop);
}
function renderPoints()
{
var i = points.length - 1;
for(i; i > -1; --i)
{
var point = points[i];
var scale = focalLength / (point.z + focalLength);
var px = (point.x * scale + (screenWidth >> 1));
var py = point.y * scale + (screenHeight >> 1);
drawPoint({x: px, y: py}, scale);
}
}
function renderWire()
{
context.globalAlpha = 0.02;
context.lineWidth = 1;
context.strokeStyle = ‘#FFF’;
context.beginPath();
var i = points.length - 1;
for(i; i > -1; --i)
{
var point = points[i];
var scale = focalLength / (point.z + focalLength);
if(i === points.length - 1) context.moveTo(point.x * scale + (screenWidth >> 1), point.y * scale + (screenHeight >> 1));
else context.lineTo(point.x * scale + (screenWidth >> 1), point.y * scale + (screenHeight >> 1));
}
if(Math.random() > 0.4) context.stroke();
context.closePath();
context.globalAlpha = 1;
}
function updatePoints()
{
var i = points.length - 1;
for(i; i > -1; --i)
{
var point = points[i];
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!