【Canvas与艺术】七角大楼

news2025/1/13 15:50:46

【成图】

【代码】

<!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="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=512;
const HEIGHT=512;


// 舞台对象
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 = "white";
        ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);

        // L的两端颜色
        var colors=[["red","rgb(255,181,181)"],
                    ["orange","rgb(255,244,193)"],
                    ["yellow","rgb(255,255,206)"],
                    ["green","rgb(232,255,196)"],
                    ["blue","rgb(196,225,255)"],
                    ["navy","rgb(221,221,255)"],
                    ["purple","rgb(230,202,255)"],
                    ];

        ctx.lineWidth=1;
        const N=7;
        var r=80;
        for(var i=0;i<N;i++){
            var theta=Math.PI*2/N*i+Math.PI/14;
            var a=createPt(r*Math.cos(theta),r*Math.sin(theta));
            var alpha=Math.PI*5/14;

            var rad=r/4/Math.cos(alpha);
            var angle=theta+alpha;
            var b=createPt(a.x+rad*Math.cos(angle),a.y+rad*Math.sin(angle));

            rad=r*3*Math.sin(Math.PI/7);
            angle+=Math.PI/7*2;
            var c=createPt(b.x+rad*Math.cos(angle),b.y+rad*Math.sin(angle));

            rad=r*4*Math.sin(Math.PI/7)-r/4/Math.cos(alpha);
            angle+=Math.PI/7*2;
            var d=createPt(c.x+rad*Math.cos(angle),c.y+rad*Math.sin(angle));

            rad=r/4/Math.cos(alpha);
            angle+=Math.PI/7*2;
            var e=createPt(d.x+rad*Math.cos(angle),d.y+rad*Math.sin(angle));

            rad=r*3*Math.sin(Math.PI/7);
            angle+=Math.PI-Math.PI/7*2;
            var f=createPt(e.x+rad*Math.cos(angle),e.y+rad*Math.sin(angle));

            // 渐变色
            var gnt=ctx.createLinearGradient(b.x,b.y,d.x,d.y);            
            gnt.addColorStop(0.4,colors[i][0]);
            gnt.addColorStop(0.9,colors[i][1]);
            ctx.fillStyle=gnt;

            // 填充绘图
            //ctx.strokeStyle="black";            
            ctx.beginPath();
            ctx.moveTo(a.x,a.y);
            ctx.lineTo(b.x,b.y);
            ctx.lineTo(c.x,c.y);
            ctx.lineTo(d.x,d.y);
            ctx.lineTo(e.x,e.y);
            ctx.lineTo(f.x,f.y);
            ctx.closePath();
            //ctx.stroke();
            ctx.fill();
        }

        writeText(ctx,WIDTH/2-30,HEIGHT/2-5,"逆火原创","8px consolas","lightgrey");// 版权
    }
}


/*----------------------------------------------------------
函数:创建一个二维坐标点
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/1968496.html

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

相关文章

【Python/PyCharm】卸载、安装、配置环境、及错误解决(保姆篇)

文章目录 卸载python安装python手动配置python环境变量安装pycharm创建一个工程错误解决 更多相关内容可查看 卸载python 卸载Python&#xff0c;建议去控制面板&#xff0c;找到Python.exe和python.launcher&#xff0c;右键卸载即可 安装python 点击windows官网下载链接选择…

AI模型离线测试指南:测试方法、评估指标与提升技巧

模型离线测试作为评估人工智能模型性能的重要手段&#xff0c;在人工智能系统测试技术中占据非常重要的位置。通过模型的离线测试&#xff0c;我们可以深入洞察模型的性能&#xff0c;为后续优化提供有效的数据支持。本文我们将从人工智能模型离线测试的概念入手&#xff0c;逐…

YOLO格式转Labelme | 标签信息 | 辅助标注 | txt转json

前言 本文分享将常规的YOLO检测信息&#xff0c;转为Labelme中的标签信息。 即&#xff1a;xxx.txt 转 xxx.json。YOLO版本支持YOLOv8、YOLOv5等。 通过模型预测的信息&#xff0c;有了大致的检测位置和类别信息&#xff0c;人工进行微调和审核即可&#xff0c;实现辅助标注…

手摸手教你撕碎西门子S7通讯协议17--【再爆肝】通讯库应用开发wpf版

1、先看颜值 这颜值是采用wpf渲染技术实现的&#xff0c;里面用到很多控件&#xff0c;有第三方控件&#xff0c;也有自定义控件&#xff0c;怎么样&#xff0c;比车模还漂亮吧&#xff0c;超过脸模。 2、实现思路 程序启动时&#xff0c;连接西门子PLC&#xff0c;然后主动读…

计算机基础(Windows 10+Office 2016)教程 —— 第5章 文档编辑软件Word 2016(下)

文档编辑软件Word 2016 5.4 Word 2016的表格应用5.4.1 创建表格5.4.2 编辑表格5.4.3 设置表格 5.5 Word 2016的图文混排5.5.1 文本框操作5.5.2 图片操作5.5.3 形状操作5.5.4 艺术字操作 5.6 Word 2016的页面格式设置5.6.1 设置纸张大小、页面方向和页边距5.6.2 设置页眉、页脚和…

【通俗理解】贝叶斯定理——证据如何更新信念

【通俗理解】贝叶斯定理——证据如何更新信念 信念更新的类比 你可以把贝叶斯定理比作一个“信念调节器”&#xff0c;它根据新的证据来调节我们对某一事件发生的信念强度。 贝叶斯定理的核心作用 组件/步骤描述先验概率在获得新证据之前&#xff0c;对某一事件发生的概率的估…

Mac电脑数据恢复软件 Disk Drill 企业版安装

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将拖入文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;运行软件&#xff0c;点击安装&#xff0c;软件页面打开表示安装成功 三、运行测试1、打开软件&#xff0c;恢复一个…

Jenkins自动化构建运行Springboot项目

通过在Jenkins中创建流水线任务&#xff0c;编写流水线脚本以实现自动化构建和部署SpringBoot项目 好处 自动化: 自动化整个部署流程&#xff0c;减少人工干预&#xff0c;降低出错率。 一致性: 确保每次部署都遵循相同的步骤和配置&#xff0c;提高部署的一致性。 快速反馈…

临沂厚朴里升腾的文旅“烟火气”为城市“夜”经济贡献新活力

“一街兴一城、一街促百业”的案例不胜枚举&#xff0c;一如北京王府井大街古今交融的馥郁人文、上海南京路万国风貌的时尚繁华、成都春熙路美食飘香的热辣滚烫…无不成为其所在城市的一张靓丽名片&#xff0c;吸引着大量的当地居民和外来游客&#xff0c;为城市的经济发展和人…

Matlab|考虑大规模电动汽车接入电网的双层优化调度策略

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《A bi-layer optimization based temporal and spatial scheduling for large-scale electric vehicles》&#xff0c;中文文献可对照《考虑大规模电动汽车接入电网的双层优化调度策略》&…

【C++】学习笔记——智能指针

文章目录 二十一、智能指针1. 内存泄漏2. 智能指针的使用及原理RAII智能指针的原理auto_ptrunique_ptrshared_ptrshared_ptr的循环引用weak_ptr删除器 未完待续 二十一、智能指针 1. 内存泄漏 在上一章的异常中&#xff0c;我们了解到如果出现了异常&#xff0c;会中断执行流…

4.5、作业管理

几乎不太会考 作业的状态 作业&#xff1a;系统为完成一个用户的计算任务&#xff08;或一次事务处理&#xff09;所做的工作总和。例如&#xff0c;对用户编写的源程序&#xff0c;需要经过编译、连接、装入以及执行等步骤得到结果&#xff0c;这其中的每一个步骤称为作业步…

【附安装包】CentOS7(Linux)详细安装教程(手把手图文详解版)

目前流行的虚拟机软件有VMware、Virtual Box和Virtual PC等等&#xff0c;其中最常用的就是VMware。 而centos是Linux使用最广泛的版本之一。 教程开始教程有许多不完备之处&#xff0c;大佬请忽略。。。 1.安装VMware 首先需要准备VMware的安装包以及Ubuntu的ISO镜像&#…

Shell编程——基础语法(2)和 Shell流程控制

文章目录 基础语法&#xff08;2&#xff09;echo命令read命令printf命令test命令 Shell流程控制if-else语句for 循环while 语句until 循环case ... esac跳出循环 基础语法&#xff08;2&#xff09; echo命令 Shell 的 echo 指令与 PHP 的 echo 指令类似&#xff0c;都是用于…

文档管理系统哪个好?优质8款系统深度比较

本文将分享8款文档管理系统&#xff1a;PingCode、Worktile、金山文档、腾讯文档、飞书文档、石墨文档、Confluence、Google Drive。 在寻找合适的文档管理系统时&#xff0c;你是否感到困惑和不安&#xff1f;市场上众多选项让人难以抉择&#xff0c;尤其是当你希望找到既能提…

springCloud组件专题(五) --- seata

一.Seata介绍 1. seata是什么 是一款开源的分布式事务解决方案&#xff0c;供了 AT、TCC、SAGA 和 XA 事务模式。 2.分布式事务中的概念 2.1. 二阶段提交 二阶段提交的含义就是将事务的提交分成两个步骤&#xff0c;分别为&#xff1a; 准备阶段&#xff1a;事务协调者询问所…

Django分页组件封装

目录 1. 前言 2. 代码 3. 使用 3.1 view.py 3.2 list.html 1. 前言 在日常开发中&#xff0c;我们也许会遇到一页内容太多不够展示的问题&#xff0c;过于冗余。 此时&#xff0c;我们就需要进行分页&#xff0c;分页的方式有两种&#xff1a;1. ajax异步分页 2. 普通选…

记一些零碎的只是点和一些安全工具的使用(这里建议将漏洞原理搞清楚,然后可以尝试手动和使用工具)

目录 信息收集 扫描端口 工具 nmap TxPortMap tideFinger fscan 漏洞扫描 目录扫描 利群使用 不同系统、不同框架的漏洞 OA weblogic Struts2 thinkphp漏洞 shiro 蚁剑使用 更高级的连接工具 免杀类型 主机端的免杀 流量层的免杀 安全设备 主机端安全设备…

Docker容器数据库启动,如何用别名JAR jdbc:postgresql://别名:5432/postgres

如果想了解为啥这样做得同学&#xff0c;请去看这个文章 Docker容器网络&#xff08;七&#xff09;_host.docker.internal-CSDN博客 因为docker0网络&#xff0c;需要用别名的话&#xff0c;还得在host文件加 dockerIp(172.0.0.2) 别名 怎么查&#xff0c; docker network …

每日一题 ~ LCR 015. 找到字符串中所有字母异位词

. - 力扣&#xff08;LeetCode&#xff09; 题目解析 题目要求找出字符串中所有的字母异位词。所谓字母异位词指的是两个字符串中字符出现的次数相同&#xff0c;但顺序可以不同的情况。 思路分析 固定窗口&#xff1a;使用滑动窗口技巧&#xff0c;窗口大小固定为待匹配字…