【Canvas与化学】枣红实心球钙元素图标

【成图】

120*120

大小图

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>钙元素图标 Draft2</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;// 暂停标志
var paused=false;//-------------------------------
// 初始化
//-------------------------------
function init(){// 获得canvas对象var canvas=document.getElementById('myCanvas');  // 设置点击鼠标暂停canvas.οnclick=function(e){paused=! paused;}// 设置高宽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.theta=0;// 初始化this.init=function(){}// 更新this.update=function(){ if(!paused){this.theta+=0.02;}}// 画背景this.paintBg=function(ctx){ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏    }// 画前景this.paintFg=function(ctx){// 底色ctx.save();ctx.fillStyle = "white";ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);ctx.restore();const R=210;// 基准尺寸// 第1圈ctx.save();ctx.shadowOffsetX=2; ctx.shadowOffsetY=2; ctx.shadowColor="grey";ctx.shadowBlur=4;var r=R*1.00;ctx.fillStyle="rgb(243,133,134)";drawRoundRect(ctx,0,0,2*r,2*r,R/5);ctx.fill();ctx.restore();// 最外层价电子ctx.save();var r=R*0.80;var COLOR="rgb(61,96,124)";        ctx.strokeStyle=COLOR;ctx.lineWidth=R/210;ctx.beginPath();ctx.arc(0,0,r,0,Math.PI*2,false);// 电子轨道ctx.closePath();ctx.stroke();for(var i=0;i<2;i++){var theta=Math.PI*2/2*i+Math.PI/2;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));var radius=R/30;var gnt1=ctx.createRadialGradient(a.x-radius/2,a.y-radius/2,radius/100,a.x,a.y,radius);// 辐射渐变gnt1.addColorStop(0,"rgb(255,255,255)");gnt1.addColorStop(0.3,"rgb(254,197,130)");gnt1.addColorStop(1,"rgb(88,8,1)");drawSolidCircle(ctx,a.x,a.y,radius,gnt1);}ctx.restore();// 第二层电子ctx.save();var r=R*0.70;var COLOR="rgb(61,96,124)";        ctx.strokeStyle=COLOR;ctx.lineWidth=R/210;ctx.beginPath();ctx.arc(0,0,r,0,Math.PI*2,false);// 电子轨道ctx.closePath();ctx.stroke();for(var i=0;i<8;i++){var theta=Math.PI*2/8*i;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));var radius=R/30;var gnt1=ctx.createRadialGradient(a.x-radius/2,a.y-radius/2,radius/100,a.x,a.y,radius);// 辐射渐变gnt1.addColorStop(0,"rgb(255,255,255)");gnt1.addColorStop(0.3,"rgb(254,197,130)");gnt1.addColorStop(1,"rgb(88,8,1)");drawSolidCircle(ctx,a.x,a.y,radius,gnt1);}ctx.restore();// 第3层电子ctx.save();var r=R*0.60;var COLOR="rgb(61,96,124)";        ctx.strokeStyle=COLOR;ctx.lineWidth=R/210;ctx.beginPath();ctx.arc(0,0,r,0,Math.PI*2,false);// 电子轨道ctx.closePath();ctx.stroke();for(var i=0;i<8;i++){var theta=Math.PI*2/8*i;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));var radius=R/30;var gnt1=ctx.createRadialGradient(a.x-radius/2,a.y-radius/2,radius/100,a.x,a.y,radius);// 辐射渐变gnt1.addColorStop(0,"rgb(255,255,255)");gnt1.addColorStop(0.3,"rgb(254,197,130)");gnt1.addColorStop(1,"rgb(88,8,1)");drawSolidCircle(ctx,a.x,a.y,radius,gnt1);}ctx.restore();// 最内层价电子ctx.save();var r=R*0.50;var COLOR="rgb(61,96,124)";        ctx.strokeStyle=COLOR;ctx.lineWidth=R/210;ctx.beginPath();ctx.arc(0,0,r,0,Math.PI*2,false);// 电子轨道ctx.closePath();ctx.stroke();for(var i=0;i<2;i++){var theta=Math.PI*2/2*i+Math.PI/2;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));var radius=R/30;var gnt1=ctx.createRadialGradient(a.x-radius/2,a.y-radius/2,radius/100,a.x,a.y,radius);// 辐射渐变gnt1.addColorStop(0,"rgb(255,255,255)");gnt1.addColorStop(0.3,"rgb(254,197,130)");gnt1.addColorStop(1,"rgb(88,8,1)");drawSolidCircle(ctx,a.x,a.y,radius,gnt1);}ctx.restore();// 黄圈ctx.save();var r=R*0.39;var gnt=ctx.createRadialGradient(-r/2,-r/2,r/100,0,0,r);// 辐射渐变gnt.addColorStop(0,"rgb(255,255,255)");gnt.addColorStop(0.6,"rgb(156,56,52)");gnt.addColorStop(1,"rgb(66,16,19)");drawSolidCircle(ctx,0,0,r,gnt);ctx.restore();// 元素符号ctx.save();var r=R*0.38;ctx.textBaseline="middle";ctx.textAlign="center";ctx.font = r*1.3+"px Cambria";ctx.lineWidth=2;ctx.strokeStyle="white";ctx.strokeText("Ca",0,-r*0.0);// 质子数/原子量ctx.save();var r=R*0.91;ctx.textBaseline="middle";ctx.textAlign="center";ctx.font = r*0.15+"px consolas";ctx.fillStyle=COLOR;ctx.fillText("20/40",-r*0.80,-r*0.85);ctx.restore();// 核外电子排布ctx.save();var r=R*0.91;ctx.textBaseline="middle";ctx.textAlign="center";ctx.font = r*0.15+"px consolas";ctx.fillStyle=COLOR;ctx.fillText("[Ar]4s2",r*0.71,-r*0.85);ctx.restore();// 元素名ctx.save();var r=R*0.91;ctx.textBaseline="middle";ctx.textAlign="center";ctx.font = r*0.2+"px consolas";ctx.fillStyle=COLOR;ctx.fillText("Calcium",0,r*1.01);ctx.restore();// 玻璃光ctx.save();var r=R*0.96;drawRoundRect(ctx,0,0,2*r,2*r,R/5-0.04*R);ctx.clip();// 切图矩形var a=createPt(-r,0);var b=createPt(0,-r/2);var c=createPt(r,0);var d=createPt(r,-r);var e=createPt(-r,-r);var gnt=ctx.createLinearGradient(0,-r,0,0);gnt.addColorStop(0,"rgba(240,240,240,0.4)");gnt.addColorStop(0.5,"rgba(210,210,210,0.2)");gnt.addColorStop(1,"rgba(180,180,180,0.1)");ctx.fillStyle=gnt;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.quadraticCurveTo(b.x,b.y,c.x,c.y);ctx.lineTo(d.x,d.y);ctx.lineTo(e.x,e.y);ctx.closePath();ctx.fill();ctx.restore();        writeText(ctx,WIDTH/2-30,HEIGHT/2-5,"逆火制图","8px consolas","lightgrey");// 版权}
}/*----------------------------------------------------------
函数:用于绘制矩形
ctx:绘图上下文
x:矩形中心横坐标
y:矩形中心纵坐标
width:矩形宽
height:矩形高
----------------------------------------------------------*/
function drawRect(ctx,x,y,width,height){ctx.beginPath();ctx.moveTo(x-width/2,y-height/2);ctx.lineTo(x+width/2,y-height/2);ctx.lineTo(x+width/2,y+height/2);ctx.lineTo(x-width/2,y+height/2);ctx.closePath();
}/*----------------------------------------------------------
函数:用于绘制倒角矩形
ctx:绘图上下文
x:矩形中心横坐标
y:矩形中心纵坐标
width:矩形宽
height:矩形高
chamferLength:倒角长度
----------------------------------------------------------*/
function drawChamferedRect(ctx,x,y,width,height,chamferLength){ctx.beginPath();ctx.moveTo(x-width/2+chamferLength,y-height/2);ctx.lineTo(x+width/2-chamferLength,y-height/2);ctx.lineTo(x+width/2,y-height/2+chamferLength);ctx.lineTo(x+width/2,y+height/2-chamferLength);ctx.lineTo(x+width/2-chamferLength,y+height/2);ctx.lineTo(x-width/2+chamferLength,y+height/2);ctx.lineTo(x-width/2,y+height/2-chamferLength);ctx.lineTo(x-width/2,y-height/2+chamferLength);ctx.closePath();
}/*----------------------------------------------------------
函数:用于绘制圆角矩形
ctx:绘图上下文
x:矩形中心横坐标
y:矩形中心纵坐标
width:矩形宽
height:矩形高
radius:圆角半径
----------------------------------------------------------*/
function drawRoundRect(ctx,x,y,width,height,radius){ctx.beginPath();ctx.moveTo(x-width/2+radius,y-height/2);ctx.lineTo(x+width/2-radius,y-height/2);ctx.arcTo(x+width/2,y-height/2,x+width/2,y-height/2+radius,radius);ctx.lineTo(x+width/2,y-height/2+radius);ctx.lineTo(x+width/2,y+height/2-radius);ctx.arcTo(x+width/2,y+height/2,x+width/2-radius,y+height/2,radius);ctx.lineTo(x+width/2-radius,y+height/2);ctx.lineTo(x-width/2+radius,y+height/2);ctx.arcTo(x-width/2,y+height/2,x-width/2,y+height/2-radius,radius);ctx.lineTo(x-width/2,y+height/2-radius);ctx.lineTo(x-width/2,y-height/2+radius);ctx.arcTo(x-width/2,y-height/2,x-width/2+radius,y-height/2,radius);ctx.closePath();
}/*----------------------------------------------------------
函数:用于绘制实心圆,用途是标记点以辅助作图
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();
}/*-------------------------------------------------------------
让心情变好的五条法则:
1.不说负面情绪,只描述事实;
2.越来越专注于过好自己,能量和幸运越会照顾你;
3.只解决问题,不做没有意义的担心,输了就认;
4.确定了一件事长期坚持有好处,就一直坚持;
5.学会原谅自己,要允许自己做错事,允许自己出现情绪波动,我知道你
已经在很努力很努力在做好了。勇敢无畏才是前进提升的前提。当你害怕被评判,害怕犯错,认为犯错就是失败,那么你往往会逃避,而不开始好像不会失败,但其实不开始才是真正的选择了失败,当你选择逃避不做的那一刻,1%-99%的成功率成了0%。
--------------------------------------------------------------*/
//-->
</script>

END

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

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

相关文章

YOLOv8实战无人机视角目标检测

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化&#xff0c;该数据集包含丰富的无人机目标图像…

C#里怎么样使用new修饰符来让类智能选择基类函数还是派生类函数?

C#里怎么样使用new修饰符来让类智能选择基类函数还是派生类函数&#xff1f; 在C#里有一个特殊的用法&#xff0c;就是在创建与基类相同的函数时&#xff0c; 如果使用一个new修饰符&#xff0c;就会导致它会根据变量的类型而选择不同的函数运行。 这是一个比较特殊的使用方法&…

私有库gitea安装

一 gitea是什么 Gitea是一款自助Git服务&#xff0c;简单来说&#xff0c;就是可以一个私有的github。 搭建很容易。 Gitea依赖于Git。 类似Gitea的还有GitHub、Gitee、GitLab等。 以下是安装步骤。 二 安装sqilite 参考&#xff1a; 在windows上安装sqlite 三 安装git…

netconf 代码架构

NETCONF&#xff08;Network Configuration Protocol&#xff09;是一种基于 XML 的网络配置管理协议&#xff0c;主要用于在网络设备之间进行配置管理、状态监控和操作。它被设计为一种可扩展的协议&#xff0c;并且在自动化网络管理中扮演着重要角色。NETCONF 通过安全的通信…

【Anaconda】 创建环境报错:CondaHTTPError: HTTP 000 CONNECTION FAILED for url

问题描述 使用 Anaconda 创建环境时报错&#xff1a; CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/free/noarch/repodata.json.bz2> Elapsed: -An HTTP error occurred when trying to retrieve this URL. HTTP errors are o…

十一、快速入门go语言之接口和反射

文章目录 接口:one: 接口基础:two: 接口类型断言和空接口:star2: 空接口实现存储不同数据类型的切片/数组:star2: 复制切片到空接口切片:star2: 类型断言 反射 &#x1f4c5; 2024年5月9日 &#x1f4e6; 使用版本为1.21.5 接口 十、Java类的封装和继承、多态 - 七点半的菜市…

计算机的错误计算(一百七十)

摘要 回复一中学生来信&#xff0c;探讨 MATLAB 关于算式 的计算问题。 在计算机的错误计算&#xff08;一百三十二&#xff09;中&#xff0c;我们探讨了手持式计算器关于算式 的计算问题。一中学生来信询问该算式在数学软件中是否会出错。 例1. 在 MATLAB 中计算 . 首…

Maven CMD命令

打包测试命令 在当前文件中 >mvn clean package -D maven.test.skiptrue 基本命令 mvn clean 清理目标目录&#xff08;target&#xff09;中的输出文件。 mvn compile 编译主源代码路径&#xff08;src/main/java&#xff09;下的 Java 代码。 mvn test-compile 编译测试源…

redis升级

服务器原来使用yum安装的。可以参考下面文章 Linux---Redis安装以及配置_yum安装redis-CSDN博客 yum安装的redis版本比较旧&#xff0c;我们直接下载源码编译安装。 我们下载已经发布的版本 Releases redis/redis GitHub 1、解压 2、make 3、make install 4、修改red…

【科研】9如何高效阅读和理解学术论文

【科研】9如何高效阅读和理解学术论文 写在最前面一、为什么需要系统的阅读方法&#xff1f;二、阅读论文的11步方法三、实践示例四、常见问题解答五、结语 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ …

iptables 用于设置、维护和检查 IP 数据包的过滤规则。其基本用法是通过命令行界面配置流量的过滤策略,分为以下几类规则链:INPUT(入站流量)、OU

iptables 是 Linux 下的一个强大的防火墙工具&#xff0c;用于设置、维护和检查 IP 数据包的过滤规则。其基本用法是通过命令行界面配置流量的过滤策略&#xff0c;分为以下几类规则链&#xff1a;INPUT&#xff08;入站流量&#xff09;、OUTPUT&#xff08;出站流量&#xff…

CSS中flex:1时overflow失效

现象&#xff1a; 当连续多层标签使用了flex:1或者height:100%之后&#xff0c;最后一层设置overflow: auto失效 解决办法&#xff1a; 给上面设置了flex:1或者height:100%的标签都添加上overflow: auto

RabbitMQ在手动消费的模式下设置失败重新投递策略

最近在写RabbitMQ的消费者&#xff0c;因为业务需求&#xff0c;希望失败后重试一定次数&#xff0c;超过之后就不处理了&#xff0c;或者放入死信队列。我这里就达到重试次数后就不处理了。本来以为很简单的&#xff0c;问了kimi&#xff0c;按它的方法配置之后&#xff0c;发…

计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

《我的世界之武艺时代》——第2话

观众朋友们&#xff0c;大家好&#xff01;欢迎来到《我的世界之武艺时代》的精彩世界。在开始这段奇幻旅程之前&#xff0c;请您花几秒钟的时间为我们的作品点个赞&#xff0c;并将其收藏到您的书架中。这不仅是对我们创作者的最大支持&#xff0c;也是让更多人发现这部作品的…

Linux下的wlan0控制

WIFI常用的两种模式&#xff1a;STA / AP 1. STA模式&#xff1a;客户端 嵌入式的系统下常常要手动配置wifi&#xff0c;和IP地址才能开始上网&#xff0c;关于STA模式下&#xff0c;常用的wifi配置工具有wpa_supplicant和轻量级的udhcpc客户端。 1.1wpa_supplicant 最小配置…

如何将 GitHub 私有仓库(private)转换为公共仓库(public)

文章目录 如何将 GitHub 私有仓库转换为公共仓库步骤 1: 登录 GitHub步骤 2: 导航到目标仓库步骤 3: 访问仓库设置步骤 4: 更改仓库可见性步骤 5: 确认更改步骤 6: 验证更改注意事项 如何将 GitHub 私有仓库转换为公共仓库 在软件开发领域&#xff0c;GitHub 是一个广受欢迎的…

RPA:电商订单处理自动化

哈喽&#xff0c;大家好&#xff0c;我是若木&#xff0c;最近闲暇时间较多&#xff0c;于是便跟着教程做了一个及RPA&#xff0c;谈到这个&#xff0c;可能很多人并不是很了解&#xff0c;但是实际上&#xff0c;这玩意却遍布文末生活的边边角角。话不多说&#xff0c;我直接上…

oracle中删除指定前缀的表

近期接手做的项目&#xff0c;发觉数据库中有许多多余的表。究其原因&#xff0c;应该是同事贪图方便&#xff0c;将过去做过的项目复制粘贴&#xff0c;然后修修改改。包括数据库也是克隆过来的&#xff0c;然后又没有删除本项目多余的表&#xff0c;结果经过几个轮回&#xf…

【C#】C# resx方式实现多语言切换(静态切换)

1. 效果 中文界面 英文界面 2. 步骤 1. 添加resx文件 2. Form1.en-GB.resx内容 3. Form1.zh-CN.resx内容 4. Form1.cs修改&#xff08;重点&#xff09; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Syste…