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 相关文章推荐
jQuery EasyUI API 中文文档 - ValidateBox验证框
Oct 06 Javascript
GRID拖拽行的实例代码
Jul 18 Javascript
node.js中Socket.IO的进阶使用技巧
Nov 04 Javascript
jquery实现标签上移、下移、置顶
Apr 26 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
Apr 27 Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
Webstorm2016使用技巧(SVN插件使用)
Oct 29 Javascript
Vue 中使用富文本编译器wangEditor3的方法
Sep 26 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
Oct 19 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数据缓存技术
2007/02/14 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
初识Node.js
2014/09/03 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
python 接口_从协议到抽象基类详解
2017/08/24 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
Python之list对应元素求和的方法
2018/06/28 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
如何写毕业求职自荐信
2013/11/06 职场文书
机械个人求职信范文
2014/01/24 职场文书
中学教师教育感言
2014/02/21 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书