博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用JavaScript在Canvas上画出一片星空
阅读量:6591 次
发布时间:2019-06-24

本文共 1663 字,大约阅读时间需要 5 分钟。

随着Html5的迅猛发展,画布也变得越来越重要。下面我就写一个关于在canvas上画出一片星空的简单的代码的示例。


理论基础

  • 初始化一个canvas,获得一个用于绘制图形的上下文环境context。并指定为2d方式进行绘图。
  • 画一个五角星其实就是找点和连线的过程。根据几何知识,可以使用两个同心圆来方便的求得相应的坐标位置。
  • 设置状态,完成五角星的绘制过程。最后应用于整片星空,绘制很多的五角星。

封装好的五角星绘制函数


下面这个绘制的五角星的方法是可以被复用的,注释也写的比较的清楚。

/**             * 画一个五角星的封装的函数             * @param {Object} cxt  提供绘图的上下文的环境             * @param {Object} r    充当绘图时小圆的半径的值             * @param {Object} R    充当绘图时大圆的半径的值             * @param {Object} x    绘图时x轴方向上的偏移量             * @param {Object} y    绘图时y轴方向上的偏移量             * @param {Object} rota 绘图时图形旋转的角度,表示顺时针的旋转方向!             */            function drawStar(cxt, r,R ,x,y,rota){                cxt.beginPath();                //使用循环的方式确定点的位置                for(var i =0 ;i<5 ;i++){                    //外层大圆上的五个点的位置                    cxt.lineTo(Math.cos((18+i*72-rota)/180*Math.PI)*R+x                    ,-Math.sin((18+i*72-rota)/180*Math.PI)*R+y);                    //内层小圆上点的位置                    cxt.lineTo(Math.cos((54+i*72-rota)/180*Math.PI)*r+x                    ,-Math.sin((54+i*72-rota)/180*Math.PI)*r+y);                }                cxt.closePath();                //设置一些状态                cxt.fillStyle="bf1";                cxt.strokeStyle="#fd5";                cxt.lineWidth=3;                cxt.lineJoin="round";                cxt.fill();                cxt.stroke();            }

星空的代码演示


            
创建一个Canvas的小实例

Canvas 实例


如果这段文字出现,那就说明你的浏览器不支持Canvas哟!

程序运行结果


这里写图片描述


总结


这段代码是基于在imooc上Canvas详解而制作的。在这里非常感谢作者给我的启发。另外我觉得在图形的相关的绘制过程中一些常用的而且有用的代码很是值得我们将其封装起来,以便于今后的代码的复用。省时省力还高效!

你可能感兴趣的文章
JetBrains在CLion的Linux和OS X版本中引入Swift支持
查看>>
玩大了,开源协议修改引发MongoDB“大动荡”?
查看>>
独家揭秘:微博深度学习平台如何支撑4亿用户愉快吃瓜?
查看>>
数据不是石油,占得多未必有用
查看>>
IBM提出8位深度网络训练法,提速4倍同时保持高精度
查看>>
64位的Mac OS X也有Windows.Forms了
查看>>
VS 2019要来了,是时候了解一下C# 8.0新功能
查看>>
Chrome 42禁用NPAPI和相关插件:Java、Unity和Silverlight
查看>>
自己动手用PHP编写一个简单的HTTP Server(单进程版)
查看>>
React从入门到精通系列之(19)彻底理解React如何重新处理DOM(Diffing算法)
查看>>
从战争到外包软件开发:如何赢得最后胜利
查看>>
华中科大提出EAT-NAS方法:提升大规模神经模型搜索速度
查看>>
TensorFlow发布1.12.0版本,改善XLA稳定性和性能
查看>>
Box开源持续本土化平台Mojito
查看>>
CentOS 6.5下利用Docker使用Letsencrypt
查看>>
url到一个网页经历的什么
查看>>
为了监视快递小哥,我做了一个小程序!
查看>>
Swift 关联类型
查看>>
[Leetcode] First Missing Positive
查看>>
Java 性能要点:自动装箱/ 拆箱 (Autoboxing / Unboxing)
查看>>