html5中三角函数,三角函数(一)
三角函数
三角函数、勾股定理、两点间的距离,还有sin、cos、tan,是不是感觉这些很是熟悉,恍惚间回到了初中时代,想起了数学课本上那一道道让人头疼的三角函数。今天就让我们来回顾一下!
对于三角函数,我会分为两章来讲,这一章主要讲三角函数和反三角函数的基本公式:
角度与弧度的转换
Math对象中的三角函数
实例:指红针
在下一章主要讲我们能利用三角函数做些什么:
波形(平滑的上下运动、线性运动、脉冲运动)
圆周运动与椭圆运动
两点间的距离(勾股定律)
现在我们就进入这一章的内容!
1、三角函数
(1)角度和弧度
角度和弧度都是角的度量单位,一弧度约等于57.2958°,反向计算可得360°(一个完整圆的角度)等于6.2832弧度(也就是2*PI),所以弧度(radians)和角度(degrees)的转换公式如下:
1弧度 = degrees * PI / 180;
1度 = radians * 180 / PI;
在JavaScript中是这样:
1弧度 = degrees * Math.PI / 180;
1度 = radians * 180 / Math.PI;
在后面,我们会经常用到这公式,如果记不住,可以写在纸上。
(2)坐标系
数学上的坐标系(下图左边)和网页坐标系(下图右边)是有所区别的:
从上图可以看到,网页坐标系相当于普通坐标系绕着x轴旋转180度得来的,两者y轴的正方向相反,而且网页是以左上角为坐标原点的,也就是o点,当然,就像上图一样,网页上也会有负方向。
也正是因为y轴正方向的不同,所以导致角度测量也是不同的,如下图:
实质就是绕着X轴旋转180度后得到canvas上的坐标,角度的正负很重要。
(3)直角三角形
相信大家对直角三角形并不会陌生(留意这张图:x是邻边,y是对边,R是斜边,θ是角度),在数学上,有如下三角函数:
正弦:sin(θ) = y / R
余弦:cos(θ) = x / R
正切:tan(θ) = y / x
/*反三角函数*/
反正弦:arcsin(y/R) = θ
反余弦:arccos(x/R) = θ
反正切:arctan(y/x) = θ
看得是不是有点晕晕的,如果你还想完整的了解三角函数,建议百度。
在JavaScript的Math对象中,已经给我们封装好了这些方法,我们只需如下调用:
Math.sin(θ*Math.PI/180)
Math.cos(θ*Math.PI/180)
Math.tan(θ*Math.PI/180)
/*反三角函数*/
Math.asin(y/R)*(180/Math.PI) = θ
Math.acos(x/R)*(180/Math.PI) = θ
Math.atan(y/x)*(180/Math.PI) = θ
我想你应该也注意到了,在使用Math对象中的三角函数时,并不是直接的传入 θ 角度值,而是使用 θ*180/Math.PI得到的值,这是因为Math对象中的三角函数采用的弧度制,也就是说,传入的值是弧度,而不是角度,反三角函数得到的值也是弧度,而不是角度。
注意:使用Math对象的三角函数时,一定要留意角度和弧度的转换。
在这里,还要额外的说一个常用(可能你会一直用它,而忽略Math.atan())的方法:
Math.atan2(y,x)
Math.atan2()也是一个反正切函数,不过它接受两个参数:对边和邻边的长度,一般是X坐标和Y坐标。
Math.atan()和Math.atan2()的区别:
Math.atan(θ)和Math.atan2(x,y)两个方法除了传入参数不一样外,它们的返回值也会有所不同:
Math.atan2()返回值的范围是-PI到PI之间(不包括-PI)的值,而Math.atan()返回的值范围是-PI/2到PI/2(不包括-PI/2和PI/2)之间。
我们再用一个例子来看一下区别:
下面使用 Math.atan() ,结果如下:
A: Math.atan(-1/2) -0.5 => Math.atan(-1/2)*180/Math.PI -26.57°
B: Math.atan(1/2) 0.5 => Math.atan(1/2)*180/Math.PI 26.57°
C: Math.atan(1/-2) -0.5 => Math.atan(1/-2)*180/Math.PI -26.57°
D: Math.atan(-1/-2) 0.5 => Math.atan(-1/-2)*180/Math.PI 26.57°
光是从上面得到的值,我们无法判断到底是三角形A还是C或B还是D。
而使用 Math.atan2() :
A: Math.atan2(-1,2) -0.5 => Math.atan2(-1,2)*180/Math.PI -26.57
B: Math.atan2(1,2) 0.5 => Math.atan2(1,2)*180/Math.PI 26.57
C: Math.atan2(1,-2) 2.7 => Math.atan2(1,-2)*180/Math.PI 153.43
D: Math.atan2(-1,-2) -2.7 => Math.atan2(-1,-2)*180/Math.PI -153.43
显然,使用Math.atan2()得到的值都是不一样的,这样我们就可以很容易的知道第一个是A三角形,第二个是B三角形,第三个是C三角形,第四个是D三角形。
注意:这里不需记住具体值,只需记住正负号,还有大于90还是小于90。
同一个三角形得到不同的值是因为两个方法测量角的方式不一样(下面是两种方法对D三角形的测量):
注意:这个函数很有用。
光说不练这肯定不符合TG法则,所以下面我们来搞一个例子,相信大家都玩过指南针吧,当然,这里我们不会搞出一个指南针,而是搞出一个“指红针”。
canvas-demo/disk.html
对这里例子,还是直接上图:
在上面的图中,红色代表了三角磁铁的指向,先平移,A1是向右平移x1,向下平移y1后的A,B是鼠标点坐标,根据鼠标坐标和三角磁铁的中心点计算出需要旋转的角度,也就是上面的θ,然后旋转cavnas。
注意:每次绘制不同的三角磁铁时,必须先使用save()保存状态,再绘制完一个三角磁铁后,再用restore()恢复上一次的状态,不然的话,每次旋转平移都会在上一次的基础上平移旋转,而不是以(0,0)点平移,后旋转了。如果不明白,可以试试不用save()和restore(),看看会发生什么。
总结
常用的三角函数有:Math.sin()、Math.cos()、Math.tan()
常用的反三角函数有:Math.asin()、Math.acos()、Math.atan()、Math.atan2()(用的频率很高)
一般情况下,对canvas做变形(平移、旋转、缩放等)操作时,都要使用save()和restore()来保存和恢复状态。
html5中三角函数,三角函数(一)相关推荐
- java解三角函数方程_Java 中的三角函数
最近用到了一个java中的三角函数,发现中学的知识忘完了,这里结合java的三角函数方法重新复习一下. Math 类中:PI 代表180°对应的弧度. 三角函数:sin();cos(); tan(); ...
- [转载] python中三角函数_Python中的三角函数
参考链接: Python | type()函数 python中三角函数 Python三角函数/方法 (Python Trigonometric functions/methods) In python ...
- python如何使用三角函数_Python中计算三角函数之cos()方法的使用简介
Python中计算三角函数之cos()方法的使用简介 这篇文章主要介绍了Python中计算三角函数之cos()方法的使用简介,是Python入门的基础知识,需要的朋友可以参考下 cos()方法返回x弧 ...
- Java 中的三角函数
最近用到了一个java中的三角函数,发现中学的知识忘完了,这里结合java的三角函数方法重新复习一下. Math 类中:PI 代表180°对应的弧度. 三角函数:sin();cos(); tan(); ...
- jsMath对象中的三角函数
/*Math中的三角函数参数为弧度,一般我们计算时采用的是角度 首先需要知道如何将角度转换为弧度角度转弧度的公式:π/180*角度弧度转角度: 180/π*弧度*///sin30度var result ...
- python计算cos_Python中计算三角函数之cos()方法的使用简介
Python中计算三角函数之cos()方法的使用简介 cos()方法返回x弧度的余弦值. 语法 以下是cos()方法的语法: cos(x) 注意:此函数是无法直接访问的,所以我们需要导入math模块, ...
- python如何使用三角函数_python中的三角函数应用
原博文 2017-09-11 10:14 − 三角函数在python中的应用: 如果要求tan(1)的反函数,可用如下方法: 1 import math 2 math.atan(1)*180/(mat ...
- html5代码转换为视频,HTML5中的视频代码详解
摘要 腾兴网为您分享:HTML5中的视频代码详解,智学网,云闪付,易推广,小红书等软件知识,以及360win10,流量魔盒,fitbit,上港商城,安卓2.3.7,全民惠,五年级下册英语单词表图片,t ...
- HTML5学习之二:HTML5中的表单2
(本内容部分节选自<HTML 5从入门到精通>) 对表单的验证 -------------------------------------------------------- •1.re ...
最新文章
- html搜索,文中的关键字变色
- C语言结构体值复制与字符数组值复制的比较测试
- 微软Build 2018展示Visual Studio功能:跨系统云编程
- Ubuntu 12.04 root用户登录设置
- 通过jQuery把数据库里面的数据进行增删查改
- 拥有一个高性能低延时数据库是什么样的体验?
- python编程胡牌将是什么意思_OpenCV+Python识别车牌和字符分割的实现
- centos 6.6 mysql5.7_centos6.6 下安装mysql5.7
- php socket 读网页,PHP webSocket实现网页
- 在阿里做了五年技术主管,我有话想说
- android assets 编译,使用Android Studio编译assets文件未打包进apk
- 两位共阳极数码管c语言,89c51驱动两位共阳极数码管倒计时显示程序,60秒到30秒能实现,但从30秒到90秒不能实现,请高手帮忙!...
- MultiSigWallet实例
- android 11.0 12.0USB连接模式默认设为MTP
- Ubuntu20.04ssh服务器和客户端配置
- matlab循环神经网络,循环神经网络的增强方法:注意力机制以及更多
- 为什么3D游戏建模师就业要求越来越高的原因
- java pdf 水印_Java在PDF中添加水印(文本/图片水印)效果
- python提取视频字幕_荐利用Python提取视频中的字幕(文字识别)
- 具有PLQY的绿色发光CsPbBr3和红色发射CsPbI3纳米晶体