javascript动画基础(二)--三角学在动画中的运用(1)
来源:互联网 发布:月薪2万 知乎 编辑:程序博客网 时间:2024/05/16 16:57
要做动画,三角函数是必须的,好吧,如果你忘记了一大堆的三角函数的转换公式,无所谓,在动画中,我们用到的三角函数其实最多的还是sin和cos,偶尔会用到tan,但是不多,反而javascript提供的Math.atan2(y,x)这个函数,我们会多次用到,所以请放心,你需要掌握的三角函数也就这几个,当然还有些基础知识
1. 弧度和角度
90°是多少,45°,180°这些角度在我们日常文化中已经形成的常态,现在大家一说都知道大概是多少的角度,不过在衡量角的大小的时候,计算机更倾向于弧度
一弧度大概是57.2958°,怎么来的?一个完整的圆---360°,那还记得高中的公式么?360等于多少,对的,2π,那么π呢?对的,π≈3.1415926,所以,360°≈6.2832弧度,有了这个推算,那么180°是π,90°是π/2相信大家都能推算出来是多少弧度了。当然不需要过多的去推算这些,大家只需要知道在javascript中要使用的度数我们都应该转换为弧度就ok了,所以这里直接给出弧度和度数的转换公式:
radians = degrees * Math.PI / 180; //角度转弧度degrees = radians * 180 / Math.PI; //弧度转角度
2. 笛卡尔坐标与canvas坐标
canvas画布的坐标系和计算机坐标系一样,以左上角为原点(0,0),这里给出图形,相信大家都比较清楚计算机坐标系的正负关系,向右为正,向左为负,向下为正,向上为负,而角度也是一样的正负原理
3. 三角函数回顾
上面的图,大家不用觉得太烦,暂时只需要掌握sin,cos,tan就已经足够了。
但是上面的图和公式对我们有什么作用呢?现在来做一道简单的数学题:
已知:斜边 h = 2,角度 A=30°,那么能不能求得邻边b和对边a的值呢?当然可以,直接用三角函数公式不就行了吗?a = Math.sin(A*Math.PI/180)*h; //sin,cos函数需要将角度转化为弧度b = Math.cos(A*Math.PI/180)*h;
那么,这里的a和b不是正好对应了坐标的y轴和x轴的值吗?我们需要的这个坐标点不就出来了吗?
干说没意义,还是直接上一个简单的例子,为了简化代码和操作,所有的javascript动画都会使用HTML5的画布canvas来实现
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><style>div{padding: 20px 10px;border:1px dashed #ccc;}canvas{margin: 20px;background-color: #eee;}</style></head><body><div>请输入圆的中心点-X: <input type="number" min=100 max=400 value=100 id=originX /> <br>请输入圆的中心点-y: <input type="number" min=100 max=400 value=100 id=originY /> <br>请输入圆的半径-r: <input type="number" min=50 max=100 value=50 id=radius /> <br><input type="button" value="显示" id="showBtn" /></div><canvas id="myCanvas" height=500 width=500></canvas></body><script>window.onload = function(){var originX = document.getElementById('originX');var originY = document.getElementById('originY');var radius = document.getElementById('radius');var showBtn = document.getElementById('showBtn');var canvas = document.getElementById('myCanvas');//画布获取上下文var ctx = canvas.getContext('2d');showBtn.addEventListener('click',function(){//清空画布ctx.clearRect(0,0,canvas.width,canvas.height);var x=y=0;//获取原点位置var ox = parseInt(originX.value) || 250;var oy = parseInt(originY.value) || 250;var r = parseInt(radius.value) || 100;//获取半径ctx.beginPath();for(var i=0;i<=360;i++){//斜边 * cos = 邻边x = Math.cos(i * Math.PI / 180) * r;//斜边 * sin = 对边y = Math.sin(i * Math.PI / 180) * r;ctx.lineTo(ox + x, oy + y);ctx.stroke();}},false);}</script></html>上面的代码很简单,就是画一个圆,注意循环的部分,其实就是从0°循环到360°,由于我们只是知道半径,那么这个半径就可以看作三角形的斜边,通过不断循环变化的角度,得到x,y的坐标,不知道怎么得出结论的?仔细研究一下,下面的图
- javascript动画基础(二)--三角学在动画中的运用(1)
- javascript动画基础(三)--三角学在动画中的运用(2)
- javascript动画基础(四)--三角学在动画中的运用(3)
- javascript动画基础(五)--三角学在动画中的运用(4)
- MTM动画教程学习笔记1【第三章 动画中的三角学】
- IOS中的基础动画CABasicAnimation的运用指南
- JavaScript学习(二)动画
- javascript 基础 动画
- javascript 基础 抽象化动画
- JavaScript基础之动画
- 基础动画(二)
- iOS中的动画二
- CSS3中的动画基础
- JavaScript动画1-速度动画
- Android基础:动画二:XML创建动画
- Android 属性动画浅谈(二)基础运用及工作原理
- javascript动画基础(一)--前言
- javascript基础 图片雪碧动画
- 九度OJ1508:把字符串转换成整数
- 《SAS编程与数据挖掘商业案例》学习笔记之十六
- 星路推送:①对②发信息,③能收到提示
- 电路交换与分组交换
- 企业APP如何才能在移动互联网平台展翅高飞
- javascript动画基础(二)--三角学在动画中的运用(1)
- sublime text 配置ctags插件实现多文件函数符号跳转
- 硬盘参数调整命令hdparm
- 静态方法与非静态方法区别
- 《SAS编程与数据挖掘商业案例》学习笔记之十七
- Java构造解析Json数据的两种方法
- 【转】PHP操作MongoDB技術總結
- 实用又好看的 jQuery插件 转自——Helloworld
- oracle 字符集