【Canvas与艺术】八角大楼

news2024/11/15 14:04:41

【成图】

【代码】

<!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)"],
                    ["grey","rgb(240,240,240)"],
                    ];

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

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

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

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

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

            rad=r*3*Math.sin(alpha);
            angle+=Math.PI-Math.PI/N*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/1971395.html

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

相关文章

System,InvalidOperationException:未在本地计算机,上注册“Microsoft.ACE,OLEDB.12.0”提供程序。

未在本地计算机,上注册“Microsoft.ACE,OLEDB.12.0”提供程序 问题原因分析解决方案&#xff1a;第一步第二步 问题 本地导入excel没有问题&#xff0c;发布到服务器上出现System,InvalidOperationException:未在本地计算机,上注册“Microsoft.ACE,OLEDB.12.0”提供程序。 原…

tls.go中的流程梳理

文章目录 tls.go中的流程梳理b站博主的 tls 加密过程自己推理的过程(未完待续)发送ClientHello获取ServerHello tls.go中的流程梳理 b站博主的 tls 加密过程 客户端发送ClentHello(tls版本 加密套件 随机数1)服务器发送ServerHello(tls版本 加密套件 随机数2) 这个阶段之后&…

PLM选型指南:如何选择适合自己企业的系统?

导语&#xff1a;在当前的市场竞争中&#xff0c;制造环节的利润逐渐被压缩&#xff0c;企业亟需寻求新的利润增长点来抢占更多市场份额。企业之间的竞争已不再仅仅是产品质量的较量&#xff0c;更是产品创新速度与效率的角逐。由此&#xff0c;研发创新成为企业转型升级的破局…

Swin Transformer和vit

Swin Transformer最为关键的设计在于连续自注意力层间&#xff0c;特征图上的窗划分口实现了半个窗宽的移动。这使得前一层的窗口间可以实现交互和联系&#xff0c;大幅度提升了模型的表达能力。同时在同一窗口内的查询都拥有相同的key序列&#xff0c;使得硬件内存更容易实现大…

【AI冰封挑战】搭档函数计算,“冰”封你的夏日记忆

在 AI 绘画领域&#xff0c;Stable Diffusion、 WebUI、Midjourney 等工具各领风骚&#xff0c;但 ComfyUI 以其独特的自动化工作流机制&#xff0c;自问世以来便迅速崭露头角&#xff0c;成为众多应用开发者和艺术创作者的新宠。它不仅革新了 AI 生图的创作流程&#xff0c;更…

环网自愈型RS485转光纤

一、概述 工业级双环光纤自愈RS485 转 光纤。工业现场总线光通讯中光纤双环网自愈是 一种有效 的高可靠通讯方式 。双环 自愈光 纤 Modem 采用光纤传输技术&#xff0c;专为工业自动化、 SCADA(数据采集及监控)等工业环境的远程数 据通讯而设计&#xff0c;该产品主用实现48…

nvm管理node版本问题处理集合

windows上通过nvm管理node版本&#xff0c;通过nvm安装node&#xff0c;报错了&#xff0c;信息&#xff1a; > Could not retrieve https://nodejs.org/dist/latest/SHASUMS256.txt. Get > https://nodejs.org/dist/latest/SHASUMS256.txt: dial tcp 104.20.23.46:443: …

手把手教你打包Python项目为whl文件

目录 1&#xff0c;打包whl文件作用 2&#xff0c;单个Python文件打包 1、程序目录 2、程序内容 3、打whl包 4、将whl包导入环境 ​编辑 5、查看效果 6、代码验证 3、多个python文件打包 1、程序目录 ​编辑 2、程序内容 3、打whl包 ​编辑 4、将whl包导入环境 …

C# Unity 面向对象补全计划 泛型

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 1.什么是泛型 泛型&#xff08;Generics&#xff09;是C#中的一个强大特性&#xff0c;允许你编写可以适用于多种数据类型的可重用代码&#xff0c;而不需要重复编写…

Canvas实现截图

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>canvas实现截图功能</title><style>.ca…

大型赛事5G室内无线网络保障方案

大型活动往往才是国家综合实力的重要体现&#xff0c;其无线网络通信保障工作需融合各类新兴的5G业务应用&#xff0c;是一项技术难度高、方案复杂度高的系统工程。尤其在活动人员复杂、现场突发情况多、网络不稳定等情况下&#xff0c;如何形成一套高效、稳定的应急通信解决方…

Maven的补充(在IDEA中配置,创建Maven项目)

目录 选择版本 已经创建项目中配置 点击最测的设置- CtrlAltS 点击左侧的Maven&#xff0c;我们只需要修改我标记的 未创建项目配置 点击自定义 进入设置界面&#xff0c;选择构建&#xff0c;执行&#xff0c;部署---构建工具----Maven 开始创建项目 我们要改变两个地…

java开发环境搭建基础之3----开发工具eclipse中Maven配置

一.背景 公司安排了带徒弟任务&#xff0c;写点基础的环境搭建这些吧。搭建基础开发环境&#xff0c;主要是jdk、eclipse、git、maven、mysql。后续再考虑编写jenkins、nexus、docker、1panel等CI/CD环境搭建。本次主要内容是eclipse中maven环境的配置。我的开发环境&#xff0…

Linux安装 Redis

Linux 安装 Redis 1、下载、解压 下载方式为两种&#xff1a;官网、网盘 官网&#xff1a; 我这里下载了&#xff1a;7.0.5 网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1A_-ZL3x3Xa5YNlcDqyuV_A?pwdg8jh 提取码&#xff1a;g8jh 解压&#xff1a; 将…

Helm 学习之路,一文弄懂

1. 什么是 Helm 1.1 概述 Helm 是 Kubernetes 应用程序的包管理器,和redhat中yum 管理包类似. 1.2 架构图v3 1.3 下载 官当 最新版本 官方github curl -LO https://get.helm.sh/helm-v3.15.2-linux-amd64.tar.gz 1.4 安装 解压 #由于是二进制,直接解压到/usr/local/b…

【LabVIEW学习篇 - 12】:通知器

文章目录 通知器案例一案例二案例三&#xff08;在不同VI中用同一个通知器&#xff09; 通知器 同步技术&#xff1a;同步技术用来解决多个并行任务之间的同步或通信问题。 通知器比较适合一对多的操作&#xff0c;类似于广播&#xff0c;一点发出的通知消息&#xff0c; 其它…

【开源】嵌入式Linux(IMX6U)应用层综合项目(2)--智能家居APP

目录 1.简介 1.1功能介绍 1.2技术栈介绍 1.3演示视频 1.4硬件介绍 2.软件设计 2.1智能家居UI设计 2.2.main函数 3.结尾&#xff08;附网盘链接&#xff09; 1.简介 此文章并不是教程&#xff0c;只能当作笔者的学习分享&#xff0c;只会做一些简单的介绍&#xff0c;其…

【电路笔记】-放大器失真

放大器失真 文章目录 放大器失真1、概述2、放大器因幅度失真而产生失真3、削波导致的幅度失真4、谐波引起的频率失真5、相位失真导致的放大器失真放大器失真可以采取许多形式,例如幅度、频率和相位失真,由于剪裁引起。 1、概述 放大器要正确运行且不产生输出信号失真,需要在…

跨境电商做独立站你需要考虑的几个问题

跨境电商卖家无论是做B2B还是B2C的&#xff0c;大部分卖家都是从平台开始做起&#xff0c;后面可能会都接触到独立站&#xff0c;但是说到独立站&#xff0c;相信很大部分的人都不了解&#xff0c;就拿最简单的问题来说&#xff0c;经常有人问&#xff0c;独立站和平台有什么区…

MATLAB(11)智能算法+BP神经网络

一、前言 在MATLAB中实现智能算法与BP神经网络的结合&#xff0c;需要分别编写智能算法的代码和BP神经网络的训练代码&#xff0c;并将两者整合起来。由于篇幅限制&#xff0c;我将提供一个简化的示例&#xff0c;使用遗传算法&#xff08;Genetic Algorithm, GA&#xff09;来…