三角函数

三角函数、勾股定理、两点间的距离,还有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中三角函数,三角函数(一)相关推荐

  1. java解三角函数方程_Java 中的三角函数

    最近用到了一个java中的三角函数,发现中学的知识忘完了,这里结合java的三角函数方法重新复习一下. Math 类中:PI 代表180°对应的弧度. 三角函数:sin();cos(); tan(); ...

  2. [转载] python中三角函数_Python中的三角函数

    参考链接: Python | type()函数 python中三角函数 Python三角函数/方法 (Python Trigonometric functions/methods) In python ...

  3. python如何使用三角函数_Python中计算三角函数之cos()方法的使用简介

    Python中计算三角函数之cos()方法的使用简介 这篇文章主要介绍了Python中计算三角函数之cos()方法的使用简介,是Python入门的基础知识,需要的朋友可以参考下 cos()方法返回x弧 ...

  4. Java 中的三角函数

    最近用到了一个java中的三角函数,发现中学的知识忘完了,这里结合java的三角函数方法重新复习一下. Math 类中:PI 代表180°对应的弧度. 三角函数:sin();cos(); tan(); ...

  5. jsMath对象中的三角函数

    /*Math中的三角函数参数为弧度,一般我们计算时采用的是角度 首先需要知道如何将角度转换为弧度角度转弧度的公式:π/180*角度弧度转角度: 180/π*弧度*///sin30度var result ...

  6. python计算cos_Python中计算三角函数之cos()方法的使用简介

    Python中计算三角函数之cos()方法的使用简介 cos()方法返回x弧度的余弦值. 语法 以下是cos()方法的语法: cos(x) 注意:此函数是无法直接访问的,所以我们需要导入math模块, ...

  7. python如何使用三角函数_python中的三角函数应用

    原博文 2017-09-11 10:14 − 三角函数在python中的应用: 如果要求tan(1)的反函数,可用如下方法: 1 import math 2 math.atan(1)*180/(mat ...

  8. html5代码转换为视频,HTML5中的视频代码详解

    摘要 腾兴网为您分享:HTML5中的视频代码详解,智学网,云闪付,易推广,小红书等软件知识,以及360win10,流量魔盒,fitbit,上港商城,安卓2.3.7,全民惠,五年级下册英语单词表图片,t ...

  9. HTML5学习之二:HTML5中的表单2

    (本内容部分节选自<HTML 5从入门到精通>) 对表单的验证 -------------------------------------------------------- •1.re ...

最新文章

  1. html搜索,文中的关键字变色
  2. C语言结构体值复制与字符数组值复制的比较测试
  3. 微软Build 2018展示Visual Studio功能:跨系统云编程
  4. Ubuntu 12.04 root用户登录设置
  5. 通过jQuery把数据库里面的数据进行增删查改
  6. 拥有一个高性能低延时数据库是什么样的体验?
  7. python编程胡牌将是什么意思_OpenCV+Python识别车牌和字符分割的实现
  8. centos 6.6 mysql5.7_centos6.6 下安装mysql5.7
  9. php socket 读网页,PHP webSocket实现网页
  10. 在阿里做了五年技术主管,我有话想说
  11. android assets 编译,使用Android Studio编译assets文件未打包进apk
  12. 两位共阳极数码管c语言,89c51驱动两位共阳极数码管倒计时显示程序,60秒到30秒能实现,但从30秒到90秒不能实现,请高手帮忙!...
  13. MultiSigWallet实例
  14. android 11.0 12.0USB连接模式默认设为MTP
  15. Ubuntu20.04ssh服务器和客户端配置
  16. matlab循环神经网络,循环神经网络的增强方法:注意力机制以及更多
  17. 为什么3D游戏建模师就业要求越来越高的原因
  18. java pdf 水印_Java在PDF中添加水印(文本/图片水印)效果
  19. python提取视频字幕_荐利用Python提取视频中的字幕(文字识别)
  20. 具有PLQY的绿色发光CsPbBr3和红色发射CsPbI3纳米晶体

热门文章

  1. www的主要语言html,编写www页面所使用的语言是什么
  2. 采用matlab编制含电气热的综合能源优化程序,采用yalmip和cplex求解,通过二阶锥模型实现相关约束限制
  3. 由于内核久,腾讯云的webrtc服务在微信web端尚无法使用此功能(客服已解释)
  4. 太解压了!!!还有5天高考,想过做程序猿吗?提前关注
  5. 51nod 1414 冰雕(思维+暴力)
  6. Asp.net实例:C#代码绘制折线图
  7. dubbo的后台管理以及监控中心
  8. 你必须做到的 3 件事
  9. 腾讯云cos图片迁移
  10. 炫酷翻页时钟FlipClock的使用和样式自定义