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 相关文章推荐
Chrome下ifame父窗口调用子窗口的问题示例探讨
Mar 17 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
Aug 24 Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
iView框架问题整理小结
Oct 16 Javascript
富文本编辑器vue2-editor实现全屏功能
May 26 Javascript
vue使用websocket的方法实例分析
Jun 22 Javascript
JavaScript中的this妙用实例分析
May 09 Javascript
简单了解常用的JavaScript 库
Jul 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系统命令函数使用分析
2013/07/05 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python通过smpt发送邮件的方法
2015/04/30 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
如何理解委托
2012/01/06 面试题
Java的类与C++的类有什么不同
2014/01/18 面试题
乡镇团代会开幕词
2016/03/04 职场文书
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
Python利用capstone实现反汇编
2022/04/06 Python