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 相关文章推荐
最简单的js图片切换效果实现代码
Sep 24 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
jQuery控制TR显示隐藏的几种方法
Jun 18 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
Sep 24 Javascript
JS实现旋转木马式图片轮播效果
Jan 18 Javascript
详解Vue微信公众号开发踩坑全记录
Aug 21 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 Javascript
vue双花括号的使用方法 附练习题
Nov 07 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
Sep 26 Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
Apr 04 jQuery
聊聊JS ES6中的解构
Apr 29 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
需要发散思维学习PHP
2009/06/29 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
一分钟理解js闭包
2016/05/04 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
python获取豆瓣电影简介代码分享
2014/01/16 Python
python追加元素到列表的方法
2015/07/28 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
质检的岗位职责
2013/11/17 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
公司经营目标责任书
2015/01/29 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
营业员岗位职责范本
2015/04/14 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis