【Canvas与艺术】绘制美国星条旗

2024-04-28 17:36

本文主要是介绍【Canvas与艺术】绘制美国星条旗,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【成图】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>使用HTML5/Canvas绘制美国星条旗</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 RATIO=2;// 高宽
const WIDTH=RATIO*380;
const HEIGHT=RATIO*200;// 舞台对象
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);// 清屏    writeText(ctx,WIDTH/2-20,HEIGHT/2-10,"逆火原创","8px consolas","black");// 版权}// 画前景this.paintFg=function(ctx){// 十三根横条for(var i=0;i<13;i++){ctx.fillStyle=(i % 2==0)?"rgb(178,34,52)":"white";ctx.fillRect(-WIDTH/2, -HEIGHT/2+HEIGHT/13*i, WIDTH, HEIGHT/13);         }// 左上角蓝底var D=WIDTH/5*2;var C=HEIGHT/13*7;ctx.fillStyle = "rgb(60,59,110)";ctx.fillRect(-WIDTH/2, -HEIGHT/2, D, C);// 准备画星星const r=5*RATIO;// 五行六列星星for(var i=0;i<6;i++){for(var j=0;j<5;j++){                var x=D/12+2*i*D/12-WIDTH/2;var y=C/10+2*j*C/10-HEIGHT/2;draw5Star(ctx,x,y,r);ctx.fillStyle = "white";ctx.fill();}}// 五行四列星星for(var i=0;i<5;i++){for(var j=0;j<4;j++){var x=D/6+2*i*D/12-WIDTH/2;var y=C/5+2*j*C/10-HEIGHT/2;draw5Star(ctx,x,y,r);ctx.fillStyle = "white";ctx.fill();}}}
}/*--------------------------------------------------
函数:绘制正五角星的推荐画法
ctx:绘图上下文
x:五角星中心横坐标
y:五角星中心纵坐标
R:五角星中心到顶点的距离
---------------------------------------------------*/
function draw5Star(ctx,x,y,R){var r=R*Math.sin(Math.PI/10)/Math.sin(Math.PI/10*7);var arr=[0,0,0,0,0,0,0,0,0,0];// 顶五点for(var i=0;i<5;i++){var theta=i*Math.PI/5*2-Math.PI/10;var x1=R*Math.cos(theta)+x;var y1=R*Math.sin(theta)+y;arr[i*2]=createPt(x1,y1);}// 内五点for(var i=0;i<5;i++){var theta=i*Math.PI/5*2+Math.PI/10;var x1=r*Math.cos(theta)+x;var y1=r*Math.sin(theta)+y;arr[i*2+1]=createPt(x1,y1);}ctx.beginPath();for(var i=0;i<arr.length;i++){ctx.lineTo(arr[i].x,arr[i].y);}ctx.closePath();
}/*----------------------------------------------------------
函数:创建一个二维坐标点
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

这篇关于【Canvas与艺术】绘制美国星条旗的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943839

相关文章

uniapp 微信小程序使用ec-canvas图表

微信小程序中使用到了ec-canvas图表,从DCloud插件市场中下载echarts-for-wx; 在uniapp项目中找到js-sdk文件夹,把其中的uni-ec-canvas放到要用的包的components中。 在文件中导入: 饼图: <template><view><uni-ec-canvasforce-use-old-canvas="true" id="mychartDom"

Java并发编程的艺术(十)——线程池(1)

线程池的作用 减少资源的开销 减少了每次创建线程、销毁线程的开销。提高响应速度 每次请求到来时,由于线程的创建已经完成,故可以直接执行任务,因此提高了响应速度。提高线程的可管理性 线程是一种稀缺资源,若不加以限制,不仅会占用大量资源,而且会影响系统的稳定性。 因此,线程池可以对线程的创建与停止、线程数量等等因素加以控制,使得线程在一种可控的范围内运行,不仅能保证系统稳定运行,而且方便

威胁建模的艺术:了解网络安全风险的另一面

网络安全的本质是攻防双方的对抗与博弈。然而,由于多种攻防之间的不对称性因素存在,使得攻击者总能在对抗过程中抢占先机。为了更好地了解潜在的威胁和缺陷,实现主动式防御,企业需要重新考虑他们的网络防护方法,而威胁建模(Threat modeling)正是网络安全武器库中关键防御武器。   威胁建模的必要性 威胁建模是指识别并评估如何管理应用系统中安全弱点的过程,可以帮助企业更快速地发现信息化系统应用

绘制一个单级放大电路原理图过程,保姆级教程

新手在学习pads的使用最好最快的方法就是实际上手去画原理图,画PCB图,在这个过程中,就能够更快速得掌握PADS软件的使用。 本篇就是对于实际画原理图过程的一个记录,手把手教学,如果有纰漏或者有更好的一些技巧,欢迎留言交流。 首先,按照必要的流程(具体流程可以看以前文章:)就是创建一个新的原理图项目,并给项目进行命名,这里命名为“单级放大电路”。 然后正式进入PCB原理图文件中

美国加州正测试ChatGPT等生成式AI,在4大部门应用

5月11日,美联社消息,美国加州政府正在测试ChatGPT等生成式AI,应用在税收和收费管理部、交通部、公共卫生部以及卫生与公众服务部4大部门。 测试时间6个月,为其提供技术支持的一共有5家公司,分别是OpenAI、Anthropic、谷歌、Meta和ServiceNow,测试环境将在多家云服务平台中进行,费用只需每家支付1美元。 测试期间,州政府会根据实际业务的应用情况,要求对生成式AI工具

数据可视化训练第6天(美国人口调查获得关于收入与教育背景的数据,并且可视化)

数据来源 https://archive.ics.uci.edu/dataset/2/adult 过程 首先;关于教育背景的部分翻译有问题。 本次使用字典嵌套记录数据,并且通过lambda在sorted内部进行对某个字典的排序,最后用plotly进行绘图 本次提取数据的时候,用到了array的布尔型数组,这是比较方便的一种做法 import numpy as npimport matpl

让 计算机 将 数学 公式 表达式 的计算过程绘制出来 【mathematical-expression(MAE)】

目录 文章目录 目录介绍开始实战引入数学表达式计算库引入流程图代码生成库开始进行生成 介绍 大家好 今天我们来分享一个新知识,将数学表达式的整个计算过程,以及计算繁多结果在 Java 中绘制出来,计算机中的数学表达式计算的功能很常见了,但是今天我们要使用一个工具,它可以将 整个计算过程 使用 Java 绘制成为 mermaid 的流程图!!! 开始实战 引入数学表

深入解析 @Transactional:Spring 事务管理的艺术及实战应对策略

在Spring框架的事务处理中,@Transactional 注解扮演着核心角色,它极大地简化了开发者在应用中实施事务控制的复杂度。本文将全面解析 @Transactional 注解的各个关键属性,并结合实际问题——多数据源配置中遇到的 PlatformTransactionManager 选择难题,提供解决方案,助你掌握事务管理的精髓。 @Transactional 属性精讲 value /

NCL绘制WRF domain区域并添加气象站点

读取文件 根据官网例子Using gsn_csm_contour_map to plot WRF-ARW data绘制: ; It shows how to use gsn_csm_xxxx scripts to do the plotting.;; You can use the map projection settings on the WRF file, or you; can

13个JavaScript图表(JS图表)图形绘制插件

现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件。我之前给一家网站做过复杂的图形,我们用的是 highchart。在那段时间,没有很多可供选择的插件。但现在不同了,很容易就可以找到很多功能非常不错的图表库。个人而言,此类插件的上升,是因为: 1. Flash 过去是最佳解决方案,但很多人多在从那迁移; 2. 现代浏览器及其更强大的计算能力,使其在转化绘制实时数据