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 相关文章推荐
js 编程笔记 无名函数
Jun 28 Javascript
javascript 星级评分效果(手写)
Dec 24 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
Sep 18 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
Vue数据驱动模拟实现1
Jan 11 Javascript
Node.js获取前端ajax提交的request信息
Feb 20 Javascript
JS中Attr的用法详解
Oct 09 Javascript
ios中视频的最后一桢问题解决
May 14 Javascript
JS根据json数组多个字段排序及json数组常用操作
Jun 06 Javascript
js实现掷骰子小游戏
Oct 24 Javascript
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
处理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 缩略图实现函数代码
2011/06/23 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
JS 时间显示效果代码
2009/08/23 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
使用yeoman构建angular应用的方法
2017/08/14 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
python opencv之分水岭算法示例
2018/02/24 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
python getpass模块用法及实例详解
2019/10/07 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
波兰在线运动商店:YesSport
2020/07/23 全球购物
新闻学专业应届生求职信
2013/11/08 职场文书
小加工厂管理制度
2014/01/21 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
师范生见习自我总结
2015/06/23 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python