JavaScript实现沿五角星形线摆动的小圆实例详解


Posted in Javascript onJuly 28, 2020

五角星形线的笛卡尔坐标方程式可设为:

r=10+(3*sin(θ*2.5))^2 

x=r*cos(θ)

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

根据这个曲线方程,在[0,2π]区间取一系列角度值,根据给定角度值计算对应的各点坐标,然后在计算出的坐标位置绘制一个填充色交替变换的小圆,从而得到沿五角星形线摆动的小圆的动画效果。

编写如下的HTML代码。

<!DOCTYPE html>

<html>

<head>

<title>沿曲线摆动的小圆</title>

</head>

<body>

<canvas id="myCanvas" width="400" height="400" style="border:3px double #996633;">

</canvas>

<script type="text/javascript">

 var canvas = document.getElementById('myCanvas');

 var context = canvas.getContext('2d');

 var i = 0;

 var j = Math.PI/32;

 var t = 0;

 var col = ['red','orange','yellow','green','cyan','blue','magenta'];

 function loop()

 {

 t = t + 1;

 i = i + j;

 if (t > 6) { t = 0; }

 var r=10+9*Math.sin(2.5*i)*Math.sin(2.5*i);

 var x = 7*r*Math.cos(i)+200;

 var y = 7*r*Math.sin(i)+200;

 context.beginPath();

 context.moveTo(200, 200);

 context.lineTo(x, y);

 context.lineCap = 'round';

 context.strokeStyle = 'rgba(50,100,255,0.6)';

 context.stroke();

 context.beginPath();

 context.moveTo(200, 200);

 context.arc(x, y, 8, 0, 2 * Math.PI);

 context.fillStyle = col[t];

 context.fill();

 if (i>2*Math.PI)

 {

 j =-Math.PI/32;

 context.clearRect(0, 0, 400, 400);

 }

 if (i<0)

 { 

 j = Math.PI/32;

 context.clearRect(0, 0,400, 400);

 }

 }

 setInterval('loop()',300);

</script>

</body>

</html>

在浏览器中打开包含这段HTML代码的html文件,可以在浏览器窗口中呈现出如图1所示的沿五角星形线摆动的小圆动画效果。

JavaScript实现沿五角星形线摆动的小圆实例详解

图1 沿五角星形线摆动的小圆

将上面程序中的语句

var r=10+9*Math.sin(2.5*i)*Math.sin(2.5*i);

var x = 7*r*Math.cos(i)+200;

var y = 7*r*Math.sin(i)+200;

改写为:

var e=80*(1+Math.cos(2*i)/4);

  var f=e*(1+Math.sin(4*i));

  var x=200+f*Math.cos(i);

  var y=200-f*Math.sin(i);

就可以在画布中看到如图2所示的沿四瓣花型线摆动的小圆。

JavaScript实现沿五角星形线摆动的小圆实例详解

图2 沿四瓣花型线摆动的小圆

若改写为:

var r = 200 * Math.pow(Math.cos(i/3),3);

 var x = 200 + r * Math.sin(i);

 var y = 110 + r * Math.cos(i);

同时修改 if (i>2*Math.PI) 为 if (i>3*Math.PI)

就可以在画布中看到如图3所示的沿苹果形线摆动的小圆。

JavaScript实现沿五角星形线摆动的小圆实例详解

图3 沿苹果形线摆动的小圆

若改写为:

var r=100*Math.pow(Math.cos(2*i),0.5);

var x = 200 + 160*Math.sin(i)*Math.sin(i)*Math.sin(i);

var y = -(-170+ 10*(13*Math.cos(i)- 5*Math.cos(2*i) - 2*Math.cos(3*i) - Math.cos(4*i)));

就可以在画布中看到如图4所示的沿心形线摆动的小圆。

JavaScript实现沿五角星形线摆动的小圆实例详解

图4 沿心形线摆动的小圆

有兴趣的读者,可以根据自己感兴趣的曲线的参数方程,适当修改坐标位置(x,y)的计算语句,就可以看到沿指定曲线摆动的小圆的动画效果。

到此这篇关于JavaScript实现沿五角星形线摆动的小圆实例详解的文章就介绍到这了,更多相关JavaScript 沿五角星形线摆动的小圆内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
统计jQuery中各字符串出现次数的工具
May 03 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
jquery ztree实现下拉树形框使用到了json数据
May 14 Javascript
js中最容易被忽视的事件问题大总结
May 15 Javascript
用angular实现多选按钮的全选与反选实例代码
May 23 Javascript
AngularJS实现进度条功能示例
Jul 05 Javascript
vue.js语法及常用指令
Oct 29 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
Aug 19 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
python虚拟环境 virtualenv的简单使用
Jan 21 Javascript
Vue的data、computed、watch源码浅谈
Apr 04 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
Jun 16 Javascript
处理JavaScript值为undefined的7个小技巧
Jul 28 #Javascript
vue中touch和click共存的解决方式
Jul 28 #Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
Jul 28 #Javascript
JavaScript中window和document用法详解
Jul 28 #Javascript
vue中echarts引入中国地图的案例
Jul 28 #Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 #Javascript
JavaScript文档加载模式以及元素获取
Jul 28 #Javascript
You might like
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
PHP创建XML接口示例
2019/07/04 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
python的继承知识点总结
2018/12/10 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
如何写一封打动人心的求职信
2014/02/17 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
走群众路线剖析材料
2014/10/09 职场文书
工作能力自我评价2015
2015/03/05 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
python中Matplotlib绘制直线的实例代码
2021/07/04 Python