JavaScript多种图形实现代码实例


Posted in Javascript onJune 28, 2020

1.小星星

设有如下的曲线参数方程:

N=5

x = r*sin(nθ)*cos(θ)

y = r*sin(nθ)*sin(θ) (0≤θ≤2π)

用循环依次取θ值为0~2π(每次增量为π/64),计算出X和Y,在canvas画布中将坐标点(X,Y)用线连起来,可绘制出一个一个5瓣花卉图案。

编写如下的HTML代码。

<!DOCTYPE html>
<head>
<title>小星星</title>
<script type="text/javascript">
 function draw(id)
 {
   var canvas=document.getElementById(id);
   if (canvas==null)
    return false;
   var context=canvas.getContext('2d');
   context.fillStyle="#EEEEFF";
   context.fillRect(0,0,400,300);
   context.strokeStyle="blue";
   context.lineWidth=2;
   context.beginPath();
   var r=120;          // 下面可进行修改的语句 (3)
   var n=5;           // 下面可进行修改的语句 (3)
   for (theta=0;theta<=2*Math.PI;theta+=Math.PI/64)
   {
     b=r*Math.sin(n*theta);  // 下面可进行修改的语句 (3)
     x=200+b*Math.cos(theta);
     y=150+b*Math.sin(theta);
     if (theta==0)
      context.moveTo(x,y);
     else
      context.lineTo(x,y);
   }
   context.stroke();
  }
</script>
</head>
<body onload="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300"></canvas>
</body>
</html>

将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出如图1所示的5瓣花卉图案。

JavaScript多种图形实现代码实例

图1 5瓣花卉图案1

我们将上面程序中标识的语句1“var r=120;”修改为“var r=50;”,适当减小初始半径,使得绘制的图案不会超出画布的范围,在将标识的语句3“b=r*Math.sin(n*theta);”修改为“b=r*(1+Math.sin(n*theta)/2);”,则在画布中绘制出如图2所示的5瓣花卉图案。

JavaScript多种图形实现代码实例

图2 5瓣花卉图案2

这个图案比图1中的图案的感觉是中间向外扩展了,使得中心部位出现空白。再次修改语句3为“b=r*(2+Math.sin(n*theta)/2);”,以增大中间部分的空白,则在画布中绘制出如图3所示的图案,像小星星吗?

JavaScript多种图形实现代码实例

图3 小星星图案

上面程序中的n值也可修改,例如在上面绘制小星星图案的程序中,将标识语句2

“var n=5;”修改为“var n=6;”,则在画布中绘制出如图4所示的图案。像六角雪花图案吗?

JavaScript多种图形实现代码实例

图4 六角雪花图案

我们这样想一想,若将n的值修改为一个实数(有小数部分)会这样呢?例如,将

“var n=5;”修改为“n=5.05;”,则在画布中绘制出如图5所示的图案。

JavaScript多种图形实现代码实例

图5 未封闭的小星星图案线

2.环带

由图5知,θ值取0~2π时,正好绘制一圈,由于n取非整数时,曲线不封闭,因此,若取θ值为0~10π,绘制5圈,可得到一个环带图案。为读者引用和下面讲述方便,给出完整HTML文件内容如下。

<!DOCTYPE html>
<head>
<title>环带</title>
<script type="text/javascript">
 function draw(id)
 {
   var canvas=document.getElementById(id);
   if (canvas==null)
    return false;
   var context=canvas.getContext('2d');
   context.fillStyle="#EEEEFF";
   context.fillRect(0,0,400,300);
   context.strokeStyle="red";
   context.lineWidth=2;
   context.beginPath();
   var n=5.05;
   k=10;
   for (theta=0;theta<=k*Math.PI;theta+=Math.PI/120)
   {
    var r=110*(1+Math.cos(n*theta)/5);
    var x =200+ r*Math.cos(theta);
    var y =150+ r*Math.sin(theta);
    if (theta==0)
      context.moveTo(x,y);
    else
      context.lineTo(x,y);
   }
   context.stroke();
  }
</script>
</head>
<body onload="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300"></canvas>
</body>
</html>

在浏览器中打开包含这段HTML代码的html文件,可以看到在画布中绘制的五角环带,如图6所示。

JavaScript多种图形实现代码实例

图6 五角环带

将上面程序中的n值由“n=5.05”修改为“n=9.05”,则在画布中绘制出如图7所示的环带。

JavaScript多种图形实现代码实例

图7 九角环带

若将上面程序中的n值修改为9.2,且将k值修改为12,则在画布中绘制出如图8所示的圆环带。

JavaScript多种图形实现代码实例

图8 n值为9.2时的圆环

若将上面程序中的n值修改为5.5,且将k值修改为12,则在画布中绘制出如图9所示的圆环。

JavaScript多种图形实现代码实例

图9 n值为5.5时的圆环

在绘制图9的程序中,再将语句“var r=110*(1+Math.cos(n*theta)/5);”修改为

“var r=90*(1+Math.cos(n*theta)/2);”则在画布中绘制出如图10所示的图案。

JavaScript多种图形实现代码实例

图10 n值为5.5时的另一环状图案

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中使用css需要注意的地方小结
Sep 01 Javascript
jquery动态加载图片数据练习代码
Aug 04 Javascript
jQuery操作checkbox选择(list/table)
Apr 07 Javascript
通过复制Table生成word和excel的javascript代码
Jan 20 Javascript
JS、jQuery中select的用法详解
Apr 21 Javascript
AngularJS基础 ng-repeat 指令简单示例
Aug 03 Javascript
JS中常用的正则表达式
Sep 29 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
Mar 09 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
Vue在 Nuxt.js 中重定向 404 页面的方法
Apr 23 Javascript
vue移动端屏幕适配详解
Apr 30 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
Jun 26 #Javascript
Vue如何提升首屏加载速度实例解析
Jun 25 #Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
Jun 25 #Javascript
国内常用的js类库大全(CDN公共库)
Jun 24 #Javascript
viewer.js实现图片预览功能
Jun 24 #Javascript
Javascript实现鼠标移入方向感知
Jun 24 #Javascript
javascript实现前端input密码输入强度验证
Jun 24 #Javascript
You might like
php 强制下载文件实现代码
2013/10/28 PHP
php中文验证码实现示例分享
2014/01/12 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php中memcache 基本操作实例
2015/05/17 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
体育专业个人求职信范文
2013/12/27 职场文书
班级安全教育实施方案
2014/02/23 职场文书
2014年母亲节寄语
2014/05/07 职场文书
触电现场处置方案
2014/05/14 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
结婚仪式主持词
2015/06/29 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers