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

news2024/12/28 19:22:11

【成图】

【代码】

<!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.coloradmin.cn/o/2132016.html

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

相关文章

美创获评CNVD年度原创漏洞发现贡献单位!

9月10日&#xff0c;第21届中国网络安全年会暨网络安全协同治理分论坛在广州成功举办。会上&#xff0c;美创科技首次获评“CNVD年度原创漏洞发现贡献单位”。 美创科技依托第59号安全实验室&#xff0c;专注数据安全技术和攻防研究。凭借深厚的技术积累与优势&#xff0c;被遴…

SEAFARING靶场渗透

一.SQL注入漏洞 1.输入id1 -- 下方出现数据说明闭合成功 2.测试得出数据库有三列 3.三处都是回显点 4.联合查询爆出库名 5.查表名 ?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schematest-- 6.查字段名 ?id-1 union sele…

vscode spring boot项目编辑yaml不自动提示补全如何解决

文章目录 properties能够自动弹出提示但是YAML文件就不会自动弹出提示ctrl空格不出提示的解决办法 properties能够自动弹出提示 但是YAML文件就不会自动弹出提示 只是不会自动弹出来而已&#xff0c;按ctrl空格即可解决 ctrl空格不出提示的解决办法 如果按ctrl空格没有用 …

WGCLOUD使用指南 - 自动计算磁盘剩余空间的可使用天数

WGCLOUD是一款免费开源的运维监控软件&#xff0c;性能优秀&#xff0c;部署简单&#xff0c;轻巧使用&#xff0c;支持大部分的Linux和Windows、安卓、MacOS等平台安装部署 最近发布的新版本&#xff0c;WGCLOUD新增了可以自动计算每个磁盘剩余空间的可使用天数&#xff0c;主…

你还在为写PPT而烦恼吗,Kimi一键帮你生成PPT

PPT已经成为我们日常工作和学习中不可或缺的一部分。无论是企业会议、学术报告还是产品展示&#xff0c;一个精心制作的PPT都能有效提升信息传递的效率和质量。然而&#xff0c;制作一个既美观又专业的PPT并非易事&#xff0c;它需要耗费大量的时间和精力。幸运的是&#xff0c…

中伟视界:皮带跑偏检测算法及其实现模型和判断方法

皮带输送机广泛应用于矿山、港口、化工等行业&#xff0c;其正常运行对生产效率和安全性至关重要。皮带跑偏是输送机常见的故障之一&#xff0c;可能导致物料撒落、设备损坏&#xff0c;甚至引发安全事故。为了有效监测和预防皮带跑偏&#xff0c;现代技术利用多种算法模型和判…

还有哪个地方能申请到免费一年期的SSL证书?

SSL证书是互联网中用于加密网站与访问者之间数据传输的安全证书。它通过数字签名确认网站的真实身份&#xff0c;确保数据传输的私密性、完整性和服务器身份的真实性&#xff0c;有效防止数据在传输过程中被窃取或篡改&#xff0c;是保障网站安全性的重要手段。 永久免费SSL证…

20240914 每日AI必读资讯

刚刚&#xff0c;OpenAI震撼发布o1大模型&#xff01;强化学习突破LLM推理极限 - OpenAI o1模型需要简单、直接的提示&#xff0c;而非复杂的指导。 - 避免使用思路链提示&#xff0c;因为o1模型已经具备内部推理能力。 - 使用分隔符来明确模型解析的部分&#xff0c;并限制…

绝佳的知乎展示形式,助力品牌信息全面曝光

知乎作为国内领先的中文互联网问答社区&#xff0c;汇聚了亿万高价值用户&#xff0c;其独特的内容生态与深度互动机制&#xff0c;为品牌提供了前所未有的营销舞台。云衔科技作为数字营销领域的佼佼者&#xff0c;携手知乎&#xff0c;为您量身打造了一套集信息流广告、知广告…

Debian11之DolphinScheduler使用

登录 默认用户名和密码 admin/dolphinscheduler123 http://192.168.111.180:12345/dolphinscheduler/ui基础配置 创建队列【admin用户下】 创建Worker分组管理【admin用户下】 关联某个工作节点服务器&#xff0c;创建项目的时候会指定Worker分组&#xff0c;这个配置决定了…

反思:我们如何实现自我的凤凰涅槃和卓越的人生?

目录 什么是凤凰涅槃&#xff1f; 一、起源与含义 二、文化解读 三、象征意义 ​编辑 我们如何实现自我的凤凰涅槃和卓越的人生&#xff1f; 一、心态调整 二、行为改变 三、持续学习与成长 四、具体行动步骤 什么是凤凰涅槃&#xff1f; 凤凰涅槃是一个具有深…

C++三大特性之一:多态篇【创作不易,还请点赞+收藏❤】

一、多态的概念 从我们学习C的时候&#xff0c;想必或多或少都听说过&#xff0c;C的三大特性&#xff1a;封装、继承&#xff0c;多态&#xff1b;而今天我们将学习多态&#xff0c;多态简单来讲&#xff0c;就是多种形式。多态分为&#xff0c;编译时多态——静态多态&#…

Spark-ShuffleWriter-UnsafeShuffleWriter

一、上下文 《Spark-ShuffleWriter》中对ShuffleWriter的获取、分类和写入做了简单的分析&#xff0c;下面我们对其中的UnsafeShuffleWriter做更详细的学习 二、构建UnsafeShuffleWriter public UnsafeShuffleWriter(BlockManager blockManager,TaskMemoryManager memoryMana…

利用Packet tracer搭建简单的网络并进行通信验证

利用Packet tracer搭建一个基本的网络通信&#xff1a; 1&#xff1a;创建网络组件 先去创建几个终端设备&#xff0c;然后再去创建一个交换机 布局完成的界面是&#xff1a; 2&#xff1a;连接组件 用指定的线进行连接交换机和PC机 全部连接的结果是: 3&#xff1a;配置PC机…

桥接网络设置多用户lxd容器

文章目录 前言配置宿主机网络固定内核版本安装 lxd、zfs 及 bridge-utils安装宿主机显卡驱动lxd 初始化创建容器模板安装容器显卡驱动复制容器 前言 使用桥接网络配置 lxd 有个好处&#xff0c;就是每个用户都可以在该局域网下有一个自己独立的 IP&#xff0c;该 IP 的端口可以…

崩坏星穹铁道PC端2.5版本剧情、奖励攻略 用GameViewer远程帮手机减负 随时畅玩星铁PC端

《崩坏&#xff1a;星穹铁道》2.5版本「碧羽飞黄射天狼」在9月10开启&#xff01;上半卡池有五星角色飞霄、知更鸟、卡芙卡、黑天鹅四位角色&#xff0c;还有2.5版本的新剧情&#xff0c;这一次崩铁上线送10连和 1000星琼等其他材料。由于游戏包体过大&#xff0c;不少玩家都选…

web群集--nginx实现重定向与重写操作的详细配置过程详与案例展示

文章目录 前言什么是重定向&#xff1f;重定向能做什么&#xff1f;何时需要重定向功能&#xff1f;nginx通过什么来实现重定向和重写操作的&#xff1f;nginx的重定向和重写有什么区别&#xff1f;案例展示重定向1.将所有对将所有对http://test. com 的访问重定向到http://www…

【iOS】push和present的区别

【iOS】push和present的区别 文章目录 【iOS】push和present的区别前言pushpop presentdismiss简单小demo来展示dismiss和presentdismiss多级 push和present的区别区别相同点 前言 在iOS开发中&#xff0c;我们经常性的会用到界面的一个切换的问题&#xff0c;这里我们需要理清…

眼镜超声波清洗机真的有用吗?畅销款热门清洗机测评,买前必看!

随着科技的飞速发展&#xff0c;人们的生活水平也日益提升。眼镜&#xff0c;作为我们日常生活中不可或缺的物品&#xff0c;其重要性不言而喻。然而&#xff0c;许多人往往忽视了对它的定期清洁保养。尽管市面上有专门用于清洁眼镜的布&#xff0c;但这种方法并不能完全去除镜…

CloudFlare问题与CDN问题

昨天将腾讯云的解析转移到Cloudflare中了&#xff0c;结果今天发现网站崩了&#xff0c;显示重定向次数过多&#xff0c;昨天估计是因为浏览器缓存&#xff0c;所以没有发现问题 问题一&#xff1a;强制HTTPS 当时看到CloudFlare的强制https时就想到了我的宝塔面板也开着强制h…