【Canvas与色彩】八彩大风车

article/2025/8/2 21:09:22

【成图】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>八彩风车 Draft1</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.save();ctx.fillStyle = "rgb(246,246,246)";ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);ctx.restore();const R=210;//基准尺寸// #1ctx.save();var r=R*1.00;var rIn=r*0.05;var rOut=r*1.00;var N=8;var colors=[["rgb(230,74,121)","rgb(238,127,169)"],["rgb(146,117,175)","rgb(125,61,147)"],["rgb(36,143,187)","rgb(15,99,161)"],["rgb(54,171,214)","rgb(37,143,184)"],["rgb(104,160,49)","rgb(142,186,39)"],["rgb(166,202,34)","rgb(195,215,55)"],["rgb(245,193,29)","rgb(243,225,63)"],["rgb(238,120,24)","rgb(247,164,60)"],];for(var i=0;i<N;i++){var theta=Math.PI*2/N*i;var a=createPt(rIn*Math.cos(theta),rIn*Math.sin(theta));var b=createPt(rOut*Math.cos(theta),rOut*Math.sin(theta));var d=createPt(a.x/2+b.x/2,a.y/2+b.y/2);var l=rOut/2-rIn/2;var c=createPt(d.x+l*Math.cos(theta-Math.PI/2),d.y+l*Math.sin(theta-Math.PI/2));// 阴影部分var bias=r/210*3;ctx.fillStyle="rgb(160,160,160)";ctx.beginPath();ctx.moveTo(a.x+bias,a.y+bias);ctx.lineTo(b.x+bias,b.y+bias);ctx.lineTo(c.x+bias,c.y+bias);ctx.closePath();ctx.fill();// 内圈ctx.fillStyle=colors[i][0];ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(d.x,d.y);ctx.lineTo(c.x,c.y);ctx.closePath();ctx.fill();// 外圈ctx.fillStyle=colors[i][1];ctx.beginPath();ctx.moveTo(d.x,d.y);ctx.lineTo(b.x,b.y);ctx.lineTo(c.x,c.y);ctx.closePath();ctx.fill();}ctx.restore();writeText(ctx,WIDTH/2-30,HEIGHT/2-5,"逆火制图","8px consolas","lightgrey");// 版权}
}/*----------------------------------------------------------
函数:用于绘制实心圆
ctx:绘图上下文
x:矩形中心横坐标
y:矩形中心纵坐标
r:圆半径
style:填充圆的方案
----------------------------------------------------------*/
function drawSolidCircle(ctx,x,y,r,style){ctx.fillStyle=style;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.hkcw.cn/article/TPipjctEhX.shtml

相关文章

Linux权限

文章目录 一、Linux用户权限1.1权限的概念1.2 用户分类##1.3切换用户1.4sudo提权 二、Linux文件权限2.1文件属性2.2文件的类型2.3 基本权限##2.4权限划分 三、Linux文件权限的修改方法3.1 chmod3.1.1操作符3.1.2数字模式 3.2chown3.3chgrp3.4目录文件权限的具体剖析3.4.1目录的…

70.新增用户内容复制功能

对于AI回答的内容可以复制和重新生成功能&#xff0c;对于用户则没有复制等功能&#xff0c;所以想了一下觉得还是很有必要添加该功能 首先&#xff0c;修改用户消息的模板部分&#xff0c;添加复制按钮&#xff1a; 然后&#xff0c;更新CSS样式以确保按钮正确显示。 因为之前…

暴雨和强对流双预警齐发 多地迎极端天气挑战

中央气象台今日6时继续发布暴雨蓝色预警和强对流天气蓝色预警。福建、广东、广西等六地将有大到暴雨,我国多地将有8级以上雷暴大风或冰雹天气。端午假期最后一天,出行前需关注天气变化。预计6月2日8时至3日8时,福建东部和南部沿海、广东中南部、广西南部、云南西北部和东部、…

Go语言中的rune和byte类型详解

1. rune类型 1.1. 基本概念 1. rune是Go语言的内建类型&#xff0c;它是int32的别名&#xff0c;即32位有符号整数&#xff1b; 2. 用于表示一个Unicode码点&#xff0c;全拼Unicode code point&#xff1b; 3. 可以表示任何UTF-8编码的字符&#xff1b; 1.2. 特点 1. 每…

基于mediapipe深度学习的虚拟画板系统python源码

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 虚拟画板系统基于计算机视觉与深度学习技术&#xff0c;通过摄像头捕获用户手部动作&#xff0c;利用 MediaPipe框架实现手…

AUTOSAR图解==>AUTOSAR_SWS_DIODriver

AUTOSAR DIO驱动器详解 基于AUTOSAR 4.4.0规范的DIO驱动架构、配置与应用 目录 1. 引言2. DIO驱动架构 2.1 DIO在AUTOSAR架构中的位置2.2 DIO驱动的功能概述 3. DIO驱动的数据类型和API 3.1 基本数据类型3.2 API接口3.3 错误检测 4. DIO驱动的操作流程 4.1 通道操作4.2 端口操…

Python数据类型详解:从字符串到布尔值,一网打尽

Python是现代编程语言中非常流行的一种&#xff0c;它的语法简洁、易懂&#xff0c;非常适合初学者。而在Python编程中&#xff0c;“数据类型”是最基础也是最重要的概念。理解这个概念&#xff0c;将为你之后的编程打下坚实的基础。 1. 什么是数据类型&#xff1f; 在Pytho…

lc hot 100之:双指针题目对比

写到两个给我感觉很类似的双指针题目&#xff0c;但是代码不同&#xff0c;我想把两个题放在一起&#xff0c;对比着看看。 第一题&#xff1a; 首先&#xff0c;提到“重复”&#xff0c;比较好想到哈希表。访问过就在哈希表里记录&#xff0c;然后只要找哈希表中有没有这个数…

6.01打卡

浙大疏锦行 DAY 40 训练和测试的规范写法 知识点回顾&#xff1a; 1. 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中 2. 展平操作&#xff1a;除第一个维度batchsize外全部展平 3. dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模…

SIM——引入双阶段搜索机制在用户行为序列的同时关注动态兴趣

文章目录 1. 背景2. 方法2.1 GSU2.1.1 Hard Search2.1.2 Soft Search 2.2 ESU 这里来回顾一篇经典的文章 SIM&#xff08;Search-based Interest Model&#xff09;&#xff0c;也是自己学习一下&#xff0c;虽然挺久了&#xff0c;但是业界都在使用这个&#xff0c;说明含金量…

LeRobot ACT——LeRobot对ALOHA ACT策略的封装:含源码解析与真机部署(效果比肩ACT原论文)

前言 本文一开始是此文的第一部分&#xff0c;后随着我司各大具身团队对各个动作策略的实践、深入&#xff0c;觉得可以挖掘且分享的细节越来越多&#xff0c;比如LeRobot ACT&#xff0c;其效果也不错 ALOHA ACT的复现与应用&#xff1a;双臂下的智能分拣场景 故把其中的「Le…

【Linux网络编程】网络层IP协议

目录 IP协议的协议头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 IP协议的协议头格式 4位版本号 &#xff1a;指定IP协议的版本&#xff0c;对于IPv4&#xff0c;版本号就是4。 4位首部长度&#xff1a;表名IP协议报头的长度&#xff0c;单…

微调大模型:什么时候该做,什么时候不该做?

目录 一、什么是“微调”&#xff1f;你真的需要它吗&#xff1f; 二、什么时候不该微调&#xff1f; &#x1f6ab; 不该微调的 5 个典型场景&#xff1a; 1. 通用问答、闲聊、常识类内容 2. 企业内部问答 / 文档助手 3. 想要通过微调“学会格式” 4. 没有大量高质量标…

[AD] CrownJewel-1 Logon 4799+vss-ShadowCopy+NTDS.dit/SYSTEM+$MFT

QA QA攻擊者可以濫用 vssadmin 實用程式來建立卷影快照&#xff0c;然後提取 NTDS.dit 等敏感檔案來繞過安全機制。確定卷影複製服務進入運作狀態的時間。2024-05-14 03:42:16建立卷影快照時&#xff0c;磁碟區複製服務會使用機器帳戶驗證權限並列舉使用者群組。找到卷影複製過…

系统思考:整体观和心智模式

如果你是小区管委会的主委&#xff0c;面对住户抱怨“电梯太慢&#xff0c;每次都要花很久等电梯”&#xff0c;是不是第一反应就是——换马达、更新软件&#xff0c;甚至换整台电梯&#xff1f;这其实是典型的“线性思维”陷阱——把问题看成孤立的零件故障。 从系统思考的角…

常见相机的ISP算法

常见的ISP算法 3A算法 去雾算法 图像增强算法 图像宽动态算法 图像的电子缩放算法&#xff0c;无极电子缩放 图像降噪算法 相机常见问题 1.相机启动速度问题&#xff0c;启动速度较慢 2.相机扛不住高低温问题 3.相机散热问题问题 4.相机高低温芯片保护掉电 5.相机的成像效果或者…

黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)

一. 单例bean Spring框架中的单例bean是线程安全的吗&#xff1f; Spring框架中的bean是单例的&#xff0c;可以在注解Scope()进行设置 singleton&#xff1a;bean在每一个Spring IOC容器中只有一个实例。prototype&#xff1a;一个bean的定义可以有多个实例 总结 二. AOP AOP称…

【Go】2、Go语言实战

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 前置知识 本篇将涉及到一些在命令行的输入输出操作&#xff0c;之前我们已经学习了fmt包用于输出内容&#xff0c;下面将介绍bufio包用于读入数据。 bufio包简介 bufio 是 Go 标准库…

基于Python与本地Ollama的智能语音唤醒助手实现

项目简介 本项目是一个基于 Python 的智能语音助手&#xff0c;集成了语音录制、语音识别、AI对话和语音合成功能。用户可以通过语音与本地部署的 Ollama 大模型进行自然对话。 技术架构 核心功能模块 语音录制 - 使用 sounddevice 录制用户语音语音识别 - 使用 faster-whi…

Vue框架2(vue搭建方式2:利用脚手架,ElementUI)

一.引入vue第二种搭建方式 在以前的前端项目中,一个项目需要多个html文件实现页面之前的切换,如果页面中需要依赖js或者css文件,那么我们就需要在多个html文件中都需要导入vue.js文件,太过繁琐. 现在前端开发都采用单页面结果,一个项目中只有一个html文件 其他不同的内容都写…