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创建快捷方式的简单实例
Aug 09 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
Dec 07 Javascript
微信小程序 input输入框详解及简单实例
Jan 10 Javascript
vuejs实现递归树型菜单组件
Jan 13 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
Sep 04 Javascript
使用微信小程序开发弹出框应用实例详解
Oct 18 Javascript
一些可能会用到的Node.js面试题
Jun 15 Javascript
vue实现给div绑定keyup的enter事件
Jul 31 Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 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
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
js编写选项卡效果
2017/05/23 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
python实现扫描ip地址的小程序
2019/04/16 Python
详解Python学习之安装pandas
2019/04/16 Python
python实现字典嵌套列表取值
2019/12/16 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
学生宿舍管理制度
2014/01/30 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
公司年底活动方案
2014/08/17 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
分享Python异步爬取知乎热榜
2022/04/12 Python