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 中文文档 - Panel面板
Sep 30 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
Dec 01 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
原生js实现简单的链式操作
Jul 04 Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
JS实现的简单表单验证功能示例
Oct 13 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
Feb 06 Javascript
jQuery中常用动画效果函数知识点整理
Aug 19 jQuery
详解在Javascript中进行面向切面编程
Apr 28 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
浅谈实现在线预览PDF的几种解决办法
Aug 10 Javascript
使用Cargo工具高效创建Rust项目
Aug 14 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
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
php输入流php://input使用浅析
2014/09/02 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
JavaScript中this详解
2015/09/01 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
django 发送手机验证码的示例代码
2018/04/25 Python
python实现银行管理系统
2019/10/25 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
电脑租赁公司创业计划书
2014/01/08 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
见习报告格式要求
2014/11/04 职场文书
秋菊打官司观后感
2015/06/03 职场文书
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js