js 实现在2d平面上画8的方法


Posted in Javascript onOctober 10, 2018

效果如下:

js 实现在2d平面上画8的方法

实现这样通过圆画实现这样一个8的形状,首先我们要会画圆。我们可以通过角度转成弧度:

radian = angle/180 * Math.PI;

再通过弧度获取当前的点的位置,这样最基础的圆的位置在-1到1的位置内

var x = Math.sin(radian);
var y = Math.cos(radian);

当画完一个完整的圆以后,另一个圆的x轴绘制和当前的x轴的位置是相同的,但是y轴需要改变,所以,我们就判断一下,是否画完一整个圆(画完一整个8需要720度),如果大于360度,就代表当前正在绘制的是第二个圆,所以,在绘制第二个圆的时候,我们调整一下y的位置,这样就实现的两个圆的绘制:

if(angle%720 > 360){
 y = -y+2;
}

案例代码

<!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>实现一个点在二维平面上面画8</title>
 <style>
  #canvas{
   display: block;
   margin:0 auto;
  }
 </style>
</head>
<body>
<canvas id="canvas" width="300" height="600"></canvas>
</body>
<script>
var canvas = document.querySelector("#canvas");
var ctx = canvas.getContext("2d");
var angle = 0; //角度
var radian = 0; //弧度
function draw() {
 angle += 2;
 radian = angle/180 * Math.PI;
 var x = Math.sin(radian);
 var y = Math.cos(radian);

 if(angle%720 > 360){
  y = -y+2;
 }

 var left = x*150+150;
 var top = y*150+150;

 ctx.arc(left, top, 1, 0, Math.PI*2);

 ctx.strokeStyle = "green";

 ctx.stroke();

 requestAnimationFrame(draw);
}

requestAnimationFrame(draw);
</script>
</html>

以上这篇js 实现在2d平面上画8的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用javascript连接access数据库的方法
Nov 17 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
May 15 Javascript
js常用自定义公共函数汇总
Jan 15 Javascript
json字符串之间的相互转换示例代码
Aug 21 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
javascript实现动态标签云
Oct 16 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
vue 巧用过渡效果(小结)
Sep 22 Javascript
vue elementUI table 自定义表头和行合并的实例代码
May 22 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
从零开始用electron手撸一个截屏工具的示例代码
Oct 10 #Javascript
js正则取值的结果数组调试方法
Oct 10 #Javascript
webpack dll打包重复问题优化的解决
Oct 10 #Javascript
4个顶级JavaScript高级文本编辑器
Oct 10 #Javascript
Koa代理Http请求的示例代码
Oct 10 #Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
Oct 10 #Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
Oct 10 #jQuery
You might like
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
django使用html模板减少代码代码解析
2017/12/12 Python
python字符串的方法与操作大全
2018/01/30 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
美国电视购物:QVC
2017/02/06 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
日语专业个人的求职信
2013/12/03 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
民主评议党员总结
2014/10/20 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
老乡聚会通知
2015/04/23 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
手术室消毒隔离制度
2015/08/05 职场文书