【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

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

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

相关文章

uniapp 阿里云点播 其他功能

详细记录 阿里云播放器 基础功能 官方文档 继 根据业务开发了其他功能 大家可以结合 上一篇 基础阿里云播放器使用 使用

C++指针的比较

指针可以用关系运算符进行比较&#xff0c;如 、< 和 > 整体的流程&#xff1a; 初始化指针ptr指向数组var的第一个元素。进入while循环&#xff0c;循环条件是ptr的地址小于或等于数组最后一个元素的地址。在循环内&#xff0c;首先打印ptr指向的地址和该地址处的值。然…

Laravel 多语言项目开发

配置 Laravel 已经内置了对多语言的支持&#xff0c;可以使用 Laravel 的本地化&#xff08;localization&#xff09;功能轻松实现多语言。 首先&#xff0c;你需要创建一个语言文件存储你的翻译内容。在 resources/lang 目录下&#xff0c;创建一个你需要的语言文件夹&…

Mybatis学习周报总结

学习Mybatis的周报 在过去的一周里&#xff0c;我们在飞思学习和掌握Mybatis这一优秀的持久层框架。通过谭老师的两周课程&#xff0c;我也有很大的收获。以下是本周的学习总结和收获&#xff1a; 一&#xff1a;Mybatis概述&#xff1a; MyBatis&#xff0c;全称为My Batis …

【Flutter 面试题】 Dart 当中的 .. 表示什么?

【Flutter 面试题】 Dart 当中的 … 表示什么? 文章目录 写在前面口述回答补充说明写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flutter 的同学,你好! 😊 Flutter…

mysql锁表的原因及mysql行锁

mysql锁表的原因 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中&#xff0c;除传统的计算资源&#xff08;如CPU、RAM、I/O等&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。 如何保证数据并发访问的一致性、有效性是所有数据库…

FA-128晶振用于医疗设备

血糖仪已成为家庭常用的医疗设备,日本爱普生晶振公司生产的2016封装,32MHz贴片晶振可完美应用于医疗器械血糖仪,此款晶振订货型号为X1E000251005900晶振,型号为FA-128,负载电容分8PF,精度10PPM,其尺寸参数为2.0x1.6x0.5mm,符合ROHS标准且无铅,具有封装尺寸超小,高精度,频率范围…

C++ | Leetcode C++题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int n nums.size();int rightmost 0;for (int i 0; i < n; i) {if (i < rightmost) {rightmost max(rightmost, i nums[i]);if (rightmost > n - 1) {r…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(一)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 1 - 2节&#xff09; P1《课程介绍》 开场白&#xff0c;HarmonyOS 的一个简介&#xff0c;话不多说&#xff0c;直接看图吧&…

第十五届蓝桥杯省赛第二场C/C++B组C题【传送阵】题解(AC)

解题思路 由于 a a a 数组是一个 1 1 1 到 n n n 的一个排列&#xff0c;那么形成的一定是如下形式&#xff1a; 一定会构成几个点的循环&#xff0c;或者是几个单独的点。 从任意点开始&#xff0c;如果能进入一个循环&#xff0c;一定可以将整个循环的宝藏都拿走&#x…

QSqlTableModel的canFetchMore、fetchMore效率太低,需替换

问题描述&#xff1a;SQLITE数据库&#xff0c;使用QSqlTableModel获取行数&#xff0c;调用函数rowCount()&#xff0c;仅能获取256行&#xff0c;故使用下面代码获取实际行数&#xff1a; while(m_model->canFetchMore()){m_model->fetchMore();} 但实际使用发现效率…

[vant] 图片预览关闭按钮显示不正常

如果这里显示不正常, 那就应该是按照文档引入了 显示有问题, 直接不引入, 声明一下就行

每日论文推荐:我们距离GPT-4V有多远,最接近GPT-4V的开源多模态大模型

&#x1f4cc; 元数据概览&#xff1a; 标题&#xff1a;How Far Are We to GPT-4V? Closing the Gap to Commercial Multimodal Models with Open-Source Suites作者&#xff1a;Zhe Chen, Weiyun Wang, Hao Tian, Shenglong Ye, Zhangwei Gao, Erfei Cui, Wenwen Tong, Kon…

富格林:可信操作提升做单盈利

富格林指出&#xff0c;黄金市场有涨有跌&#xff0c;有赚有赔&#xff0c;投资黄金并非有机会天天盈利&#xff0c;能够盈利出金最重要的原因还是投资者有正规精妙的技术。在黄金交易中&#xff0c;投资者一定要掌握可信的交易方法&#xff0c;提前布局好策略&#xff0c;这样…

java输入输出流

文件的输入输出流&#xff1a; import java.io.*;public class Stream {//文件输出流public static void SerializableOblect(String path, Object o) throws IOException {FileOutputStream fos null;ObjectOutputStream oos null;fos new FileOutputStream(path);oos ne…

mysql统计数据库或数据表记录总数

目录 1.Information_schema表简介 2.统计数据库或数据表记录总数方法 1.Information_schema表简介 Information_schema数据库是MySQL自带的&#xff0c;它提供了访问数据库元数据的方式。 把Information_schema 看作是一个数据库&#xff0c;确切说是信息数据库。其中保存着…

企业计算机服务器中了helper勒索病毒怎么办?Helper勒索病毒解密处理流程

网络技术的不断发展与成熟&#xff0c;为企业的生产运营提供了极大便利&#xff0c;让企业的发展速度大大提升&#xff0c;但网络毕竟是虚拟服务系统&#xff0c;虽然可以为企业提供便利&#xff0c;但也会给企业数据安全带来严重威胁。近日&#xff0c;云天数据恢复中心接到山…

【Qt踩坑】Qt项目嵌入Web踩坑记录--加载QtWebEngine模块的程序会出现崩溃

1. Ubuntu20.04环境中设置自启动应用程序后&#xff0c;加载QtWebEngine模块的程序会出现崩溃 解决方法一&#xff1a; 使用root用户会报错1.自启动脚本使用 sudo -S /opt/run.sh 方式启动脚本会出现问题2.手动启动或者修改自启动脚本启动方式 run.sh 就能正常运行解决方法二…

subject may not be empty | type may not be empty报错解决

目录 1、今天在提交前端代码时突然发现这个包错&#xff0c;尝试了下面方法&#xff0c;已解决。 2、解决方式一&#xff1a;修改提交信息&#xff0c; 使其符合规范 3、解决方式二&#xff1a;直接卸载工具 1、今天在提交前端代码时突然发现这个包错&#xff0c;尝试了下面方…

c++中的链表list的模拟实现

拖更了半个月&#xff0c;我终于来填c的坑啦。上次我们说的vetcor不知道小伙伴还记得多少呢&#xff1f;今天我们要讲list的模拟实现。 目录 架构结点list表的结构 构造函数尾插push_back()尾删pop_back()计算个数&#xff1a;size()判断空empty()※迭代器问题普通迭代器迭代器…