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知识点之&quot;字面量和对应类型&quot;说明介绍
Apr 23 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
Oct 29 Javascript
js类式继承的具体实现方法
Dec 31 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
Sep 22 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
Sep 05 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
Sep 29 Javascript
JavaScript触发onScroll事件的函数节流详解
Dec 14 Javascript
鼠标经过出现气泡框的简单实例
Mar 17 Javascript
ES6中Array.copyWithin()函数的用法实例详解
Sep 16 Javascript
React SSR样式及SEO的实践
Oct 22 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
Aug 01 Javascript
Vue formData实现图片上传
Aug 20 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
贝佳斯官方网站:Borghese
2020/05/08 全球购物
事业单位接收函
2014/01/10 职场文书
标准自荐信范文
2014/01/29 职场文书
幼儿教师求职信
2014/05/24 职场文书
小学开学标语
2014/07/01 职场文书
内科护士节演讲稿
2014/09/11 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
医院员工辞职信范文
2015/05/12 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
2015年暑假工作总结
2015/07/13 职场文书
小学校本教研总结
2015/08/13 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
Linux中如何安装并部署Redis
2022/04/18 Servers