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入门教程(2) JS基础知识
Jan 31 Javascript
jquery 倒计时效果实现秒杀思路
Sep 11 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 Javascript
js强制把网址设为默认首页
Sep 29 Javascript
Angularjs CURD 详解及实例代码
Sep 14 Javascript
简单谈谈axios中的get,post方法
Jun 25 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 Javascript
Angular封装表单控件及思想总结
Dec 11 Javascript
JS实现打字游戏
Dec 17 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
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
json简单介绍
2008/06/10 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
jquery 元素相对定位代码
2010/10/15 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
js获取url传值的方法
2015/12/18 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python海龟绘图实例教程
2014/07/24 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
django富文本编辑器的实现示例
2019/04/10 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
Linux文件系统类型
2012/02/15 面试题
数控技术应届生求职信
2013/11/13 职场文书
企业厂长岗位职责
2013/12/17 职场文书
出国导师推荐信
2014/01/16 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
学习十八大的心得体会
2014/09/01 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书