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 事件小结 表格区别
Aug 13 Javascript
div层的移动及性能优化
Nov 16 Javascript
javascript学习笔记(十二) RegExp类型介绍
Jun 20 Javascript
js保留两位小数使用toFixed实现
Jul 29 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
Apr 03 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
EasyUI Combobox设置默认值 获取text的方法
Nov 28 Javascript
URL中“#” “?” &amp;“”号的作用浅析
Feb 04 Javascript
Vue.js组件tab实现选项卡切换
Mar 23 Javascript
ionic3 懒加载
Aug 16 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
Aug 20 Javascript
基于axios 解决跨域cookie丢失的问题
Sep 26 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
实用函数7
2007/11/08 PHP
介绍php设计模式中的工厂模式
2008/06/12 PHP
PHP 采集获取指定网址的内容
2010/01/05 PHP
小谈php正则提取图片地址
2014/03/27 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
JS 继承实例分析
2008/11/04 Javascript
JavaScript 原型继承
2011/12/26 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
2019/05/15 Python
wxPython实现文本框基础组件
2019/11/18 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
openCV提取图像中的矩形区域
2020/07/21 Python
Pycharm调试程序技巧小结
2020/08/08 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
公司培训心得体会
2014/01/03 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
小学教师培训方案
2014/06/09 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL