【Canvas与密铺】90年代马赛克密铺效果 1920x1080

【成图】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>20世纪90年代马赛克瓷砖效果1920x1080</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=1920;
const HEIGHT=1080;// 舞台对象
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 = "rgb(232,251,169)";ctx.fillRect(0,0,WIDTH,HEIGHT);        const D=30;// 中心距const IMax=Math.ceil(WIDTH/D)+1;const JMax=Math.ceil(HEIGHT/D);// 绘制马赛克瓷砖for(var i=0;i<IMax;i++){for(var j=0;j<IMax;j++){var pt=createPt(i*D,j*D);if((i+j)%2==0){//drawSolidCircle(ctx,pt.x,pt.y,3,"red");drawSlashBrick(ctx,pt.x,pt.y,D);}else{//drawSolidCircle(ctx,pt.x,pt.y,3,"blue");drawBackSlashBrick(ctx,pt.x,pt.y,D);}}}// 横线for(var j=0;j<JMax;j++){var start=createPt(0,j*D+D/2);var end=createPt(WIDTH,j*D+D/2);ctx.beginPath();ctx.moveTo(start.x,start.y);ctx.lineTo(end.x,end.y);ctx.stroke();}// 竖线for(var i=0;i<IMax;i++){var start=createPt(i*D+D/2,0);var end=createPt(i*D+D/2,HEIGHT);ctx.beginPath();ctx.moveTo(start.x,start.y);ctx.lineTo(end.x,end.y);ctx.stroke();}// 蒙版ctx.fillStyle="rgba(9,9,9,0.85)";ctx.fillRect(0,0,WIDTH,HEIGHT);writeText(ctx,WIDTH-30,HEIGHT-5,"逆火制图","8px consolas","lightgrey");// 版权}
}/*----------------------------------------------------------
函数:用于绘制正斜瓷砖
ctx:绘图上下文
x:立方体中心横坐标
y:立方体中心纵坐标
sideLength:正方形边长
----------------------------------------------------------*/
function drawSlashBrick(ctx,x,y,sideLength){const L= sideLength;// 四角坐标var upLeft=createPt(x-L/2,y-L/2);var upRight=createPt(x+L/2,y-L/2);var downLeft=createPt(x-L/2,y+L/2);var downRight=createPt(x+L/2,y+L/2);// 正斜线ctx.lineWidth=1;ctx.strokeStyle="black";ctx.beginPath();ctx.moveTo(upRight.x,upRight.y);    ctx.lineTo(downLeft.x,downLeft.y);ctx.stroke();// 左下方块ctx.fillStyle = "white";ctx.fillRect(downLeft.x,downLeft.y-L/3,L/3,L/3);ctx.beginPath();ctx.moveTo(downLeft.x,downLeft.y-L/3);    ctx.lineTo(downLeft.x+L/3,downLeft.y-L/3);ctx.lineTo(downLeft.x+L/3,downLeft.y);ctx.stroke();    // 右上方块ctx.fillStyle = "white";ctx.fillRect(upRight.x-L/3,upRight.y,L/3,L/3);ctx.beginPath();ctx.moveTo(upRight.x-L/3,upRight.y);    ctx.lineTo(upRight.x-L/3,upRight.y+L/3);ctx.lineTo(upRight.x,upRight.y+L/3);ctx.stroke();
}/*----------------------------------------------------------
函数:用于绘制反斜瓷砖
ctx:绘图上下文
x:立方体中心横坐标
y:立方体中心纵坐标
sideLength:正方形边长
----------------------------------------------------------*/
function drawBackSlashBrick(ctx,x,y,sideLength){const L= sideLength;// 四角坐标var upLeft=createPt(x-L/2,y-L/2);var upRight=createPt(x+L/2,y-L/2);var downLeft=createPt(x-L/2,y+L/2);var downRight=createPt(x+L/2,y+L/2);    // 反斜线ctx.lineWidth=1;ctx.strokeStyle="black";ctx.beginPath();ctx.moveTo(upLeft.x,upLeft.y);    ctx.lineTo(downRight.x,downRight.y);ctx.stroke();// 左上方块ctx.fillStyle = "rgb(66,127,128)";ctx.fillRect(upLeft.x,upLeft.y,L/3,L/3);ctx.beginPath();ctx.moveTo(upLeft.x+L/3,upLeft.y);    ctx.lineTo(upLeft.x+L/3,upLeft.y+L/3);ctx.lineTo(upLeft.x,upLeft.y+L/3);ctx.stroke();// 右下方块ctx.fillStyle = "rgb(66,127,128)";ctx.fillRect(downRight.x-L/3,downRight.y-L/3,L/3,L/3);ctx.beginPath();ctx.moveTo(downRight.x-L/3,downRight.y);    ctx.lineTo(downRight.x-L/3,downRight.y-L/3);ctx.lineTo(downRight.x,downRight.y-L/3);ctx.stroke();
}/*----------------------------------------------------------
函数:用于绘制实心圆,用途是标记点以辅助作图
ctx:绘图上下文
x:矩形中心横坐标
y:矩形中心纵坐标
r:圆半径
color:填充圆的颜色
----------------------------------------------------------*/
function drawSolidCircle(ctx,x,y,r,color){ctx.fillStyle=color;ctx.beginPath();ctx.arc(x,y,r,0,Math.PI*2,false);ctx.closePath();ctx.fill();
}/*----------------------------------------------------------
函数:创建一个二维坐标点
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

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

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

相关文章

MySQL:bin log

redo log 它是物理日志&#xff0c;记录内容是“在某个数据页上做了什么修改”&#xff0c;属于 InnoDB 存储引擎。 而 binlog 是逻辑日志&#xff0c;记录内容是语句的原始逻辑&#xff0c;类似于“给 ID2 这一行的 c 字段加 1”&#xff0c;属于MySQL Server 层。 不管用什…

如何处理DDOS攻击问题

随着信息技术的飞速发展&#xff0c;网络已成为现代社会不可或缺的一部分&#xff0c;极大地便利了个人社交和商业活动。然而&#xff0c;网络空间在创造无限机遇的同时&#xff0c;也潜藏着诸多威胁&#xff0c;其中分布式拒绝服务攻击&#xff08;DDoS&#xff0c;Distribute…

全球工业经济系统极端降水暴露数据集(2010年、2016-2035年和2046-2065年)

全球工业经济系统极端降水暴露数据集 数据介绍 1. 数据的时间覆盖范围&#xff1a; 数据收集时期为2010年、2016-2035年和2046-2065年。 2. 空间覆盖和投影&#xff1a; 空间覆盖范围&#xff1a;全球 经度&#xff1a;-180 - 180 纬度&#xff1a;-90 - 90 投影&#x…

qemu和libvirt的配置对比

libvirt的很多配置选项其实是调用了qemu的接口&#xff0c;但也有增加和优化的地方&#xff0c;本文主要总结这些配置选项&#xff0c;当个手册来查询。 按照centos停服前最后一版centos-8.5.2111提供的rpm查看http://mirrors.aliyun.com/centos/8.5.2111/AppStream/aarch64/o…

【JUC】16-Java对象内存布局和对象头

1. 对象的内存布局 在HotSpot虚拟机里&#xff0c;对象在堆内存中的存储布局可以分为三个部分&#xff1a;对象头、实例数据和对齐填充。 对象头&#xff1a;由对象标记和类型指针。

[数据集][目标检测]烟叶病害检测数据集VOC+YOLO格式612张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;612 标注数量(xml文件个数)&#xff1a;612 标注数量(txt文件个数)&#xff1a;612 标注类别…

精心整理|算法备案大模型备案最新数据汇总

根据《互联网信息服务算法推荐管理规定》第二条 在中华人民共和国境内应用算法推荐技术提供互联网信息服务&#xff08;以下简称算法推荐服务&#xff09;&#xff0c;适用本规定。法律、行政法规另有规定的&#xff0c;依照其规定。前款所称应用算法推荐技术&#xff0c;是指利…

Excel数据转置|Excel数据旋转90°

Excel数据转置|Excel数据旋转90 将需要转置的数据复制在旁边空格处点击鼠标右键&#xff0c;选择图中转置按钮&#xff0c;即可完成数据的转置。&#xff01;&#xff01;&#xff01;&#xff01;非常有用啊啊啊&#xff01;&#xff01;&#xff01;

【数据结构-一维差分】力扣1854. 人口最多的年份

给你一个二维整数数组 logs &#xff0c;其中每个 logs[i] [birthi, deathi] 表示第 i 个人的出生和死亡年份。 年份 x 的 人口 定义为这一年期间活着的人的数目。第 i 个人被计入年份 x 的人口需要满足&#xff1a;x 在闭区间 [birthi, deathi - 1] 内。注意&#xff0c;人不…

【C++登堂入室】类和对象(中)——类的6个默认成员函数

目录 一、类的6个默认成员函数 ​编辑二、构造函数 2.1 概念 2.2 特性 三、析构函数 3.1 概念 3.2 特性 四、拷贝构造函数 4.1 概念 4.2 特征 五、赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 六、日期类的实现 七、const成员 八、…

解锁企业潜能,Vatee万腾平台引领智能新纪元

在数字化转型的浪潮中&#xff0c;企业正站在一个前所未有的十字路口&#xff0c;面对着前所未有的机遇与挑战。解锁企业内在潜能&#xff0c;实现跨越式发展&#xff0c;已成为众多企业的共同追求。而Vatee万腾平台&#xff0c;作为智能科技的先锋&#xff0c;正以其强大的智能…

随机分类,保持均衡水平Python

1、目的&#xff1a; 10000个样本有4个指标&#xff0c;按照逾期金额分10类&#xff0c;确保每类别逾期金额均衡。 2、数据&#xff1a; 3、思路&#xff1a; 将10000个样本按照逾期金额排序&#xff0c; 等距分箱为2500个类别 增加一列随机数 根据类别和随机数升序排列 增加…

Linux学习-Docker文件系统

Overlayfs Overlayfs 是一种类似 aufs 的一种堆叠文件系统&#xff0c;于 2014 年正式合入 Linux-3.18 主线内核&#xff0c;目前其功能已经基本稳定&#xff08;虽然还存在一些特性尚未实现&#xff09;且被逐渐推广。 Overlayfs 是一种堆叠文件系统&#xff0c;它依赖并建立…

在VB.net中,DateTime类使用,举例说明

标题 在VB.net中&#xff0c;DateTime类使用&#xff0c;举例说明 前面学习相关 1.在VB.net中&#xff0c;如何把"20240906"转化成日期格式 2.在VB.net中 DateTime有什么属性与方法 3.在VB.net中&#xff0c;Stopwatch有什么属性与方法 正文 在VB.NET中&#xff0c;D…

利用 Zero-1-2-3 进行多视图 3D 重建:从单图像到多视图 3D 模型的生成

3D 模型生成在计算机视觉领域有着广泛的应用&#xff0c;从虚拟现实到自动驾驶&#xff0c;基于单张图像的 3D 重建技术正在迅速发展。这篇博客将带你深入探索如何使用 Zero-1-2-3 框架进行多视图 3D 重建&#xff0c;通过详细解析该框架中的代码结构和功能&#xff0c;帮助你理…

【ArcGIS Pro实操第七期】栅格数据合并、裁剪及统计:以全球不透水面积为例

【ArcGIS Pro实操第七期】批量裁剪&#xff1a;以全球不透水面积为例 准备&#xff1a;数据下载ArcGIS Pro批量裁剪数据集1 数据拼接2 数据裁剪3 数据统计&#xff1a;各栅格取值3.1 栅格计算器-精确提取-栅格数据特定值3.2 数据统计 4 不透水面积变化分析 参考 准备&#xff1…

python学习第八节:爬虫的初级理解

python学习第八节&#xff1a;爬虫的初级理解 爬虫说明&#xff1a;爬虫准备工作&#xff1a;分析网站url分析网页内容 爬虫获取数据&#xff1a;1.使用urllib库发起一个get请求2.使用urllib库发起一个post请求3.网页超时处理4.简单反爬虫绕过5.获取响应参数6.完整请求代码 解析…

STM32——玩转超声波传感器

目录 1.什么是超声波&#xff1f; 超声波的基本特点&#xff1a; 2.超声波传感器介绍&#xff1a;HC-SR04 HC-SR04 主要特点&#xff1a; HC-SR04 接线如下&#xff1a; HC-SR04 工作原理&#xff1a; 如何编写超声波测距代码&#xff1f; 编写逻辑&#xff1a; 编写思…

JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)

前言 我们想要部署一个javaWeb项目到tomcat上&#xff0c;需要了解一些概念 什么是tomcat&#xff1f; Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;下的一个开源项目&#xff0c;主要用于实现 Java Servlet、JavaServer Pages&#xff08;…

SpinalHDL之数据类型(六)

本文作为SpinalHDL学习笔记第五十九篇,介绍SpinalHDL的Vec数据类型。 目录: 1.描述(Description) 2.声明(Declaration) 3.操作符(Operators) ⼀、描述(Description) Vec是定义了⼀组带有标号的信号的复合信号(基于SpinalHDL基础类别)。 ⼆、声明(Declaration) 声明向量的…