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 相关文章推荐
使用javascript访问XML数据的实例
Dec 27 Javascript
根据分辩率调用不同的CSS.
Jan 08 Javascript
javascript String 的扩展方法集合
Jun 01 Javascript
javascript之典型高阶函数应用介绍二
Jan 10 Javascript
jQuery实现图片放大预览实现原理及代码
Sep 12 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
Jun 24 Javascript
jQuery中:first-child选择器用法实例
Dec 31 Javascript
javascript显式类型转换实例分析
Apr 25 Javascript
jQuery实现垂直半透明手风琴特效代码分享
Aug 21 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
Highcharts学习之坐标轴
Aug 02 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 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
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
有趣的javascript数组定义方法
2010/09/10 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
解决element UI 自定义传参的问题
2018/08/22 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
跟老齐学Python之list和str比较
2014/09/20 Python
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
三星印度官网:Samsung印度
2019/08/03 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
几个MySql的面试题
2013/04/22 面试题
大学生学习生活的自我评价
2013/11/01 职场文书
给公司的建议书范文
2014/05/13 职场文书
北京奥运会主题口号
2014/06/13 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
Python WSGI 规范简介
2021/04/11 Python