javascript三角函数的使用

其实很多编程语言里面都有数学函数,而且很多数学函数包括三角函数,只不过有些时候可能我们用的并不多,我最近在做一个h5的游戏,其中有一个需求就是射击的枪支需要更随鼠标变换位置,鼠标移动到什么地方,炮口就要指向那个方位,刚开始一直不能理解,后来朋友提供了思路,其实使用的就是javascript里面的三角函数。

  首先呢,我们复习一下高中时候学习的三角函数的的基本知识吧,我这里介绍其中几个简单的,第一个是sin函数,第二个是cos函数 ,第三个是tan函数,四四个是atan函数,sin函数在数学里面其实是一个三角形的对边比上斜边得出的值,我们来看一个图像,那么cos30=x/r,cos函数是临边比上斜边,tan30=y/x,tan函数则是对边比上临边,通过这些公式,我们可以很容易的得到这个三角函数的值,然后就阔以拿这些值去做有意思的事情啦!!

  那么我们在javascript里面的三角函数和数学中的三角函数其实有一点区别外,第一是写发上不一样,js里面三角函数都是静态方法,必须使用Math来调用,三个函数分别是Math.sin(),Math.cos(),Math.tan()。这个很容易理解咯,那么第二个不同就是数学里面的三角函数使用接受的参数是角度,但是在js里面所接受的参数是弧度,有的朋友可能晕了,弧度角度什么玩意???不要着急,这里简单介绍一下,我们首先来看一个圆,,如果一个圆的一段边的长度等于这个圆的半径长度,那么这段边就代表一弧度,正如图中红色部分,就代表一弧度,这个其实仅仅就是一个概念,我们真正要使用的是吧我们想要的角度转化成弧度,这里直接套用数学公公式  1角度=π/180  那么10个角度就等于10*π/180啦,那我们要用js的Math.sin()算出30度角等于多少,那么就应该写成Math.sin(30*Math.PI/180),这里注意一下js里面的π是Math.PI。相信大家看到这里对js的三角函数肯定有一些了解咯,那么接下来我们来看一个实际的小例子吧。

  首先呢,有一个需求。页面上有一个小球,我希望当我的鼠标放到页面上时候,我的鼠标移动到那里。小球就会移动到对应的位置,注意,不是移动到鼠标所在的位置,而是对应的位置,这里不好发网址,发个图看看吧。其中,红色小球代表一个枪口。蓝色的小球代表鼠标的位置,当鼠标放置到页面不同位置的时候,红色的小球就会移动到相应的角度上与之对应,但是我们也看到有一个r,表示在平面的范围呢,红色小球能够移动的范围,实际上就是一个圆的半径,如果这个r越大,那么小球移动的范围就越大啦!!(不理解的朋友先把下面的例子复制出来运行一下就可以了)

  这个功能的实现就需要我们使用三角函数来完成,检测鼠标的位置并且是在360度的范围上来检测,这里就需要通过角度就算出红色小球的距离左边值和距离上边的值,然后赋值给小球就阔以啦!!我们再来看一张图,现在要做的就是如何获取t的值和l的值,我们刚才已经说了小球运动是有范围的,这个范围其实就是一个圆,而半径的大小决定小球运动范围的大小,所以呢这个半径是我们自己定义的,随你定义多少都阔以,当然太小了可能效果就不是那么明显了,因此图中的r我们其实已经知道了,我们就定义成100吧,接下来我们看一个推导公式  sin30=t/r 那么t=sin30*r   cos30=l/r  那么l=cos30*r,怎么样?有木有很激动,就是这样算出来的!!但是问题来了,这个角度该怎么得到呢,刚才我们只是随意随意写了个角度来推导,而事实上我们的鼠标在不停的移动,角度自然也是在不停的变化啦,我们看一下上图中的大三角形,看准了,是红色的大三角形,不是蓝色的小三角形哦!这个大三角形对应的边分别是a边和b边,只要我们得到a边和b边的长度,然后用反正切函数atan(a/b)就可以得到鼠标与球的夹角啦,这个反正切函数Math.atan(),接受一个参数,就是对边比上临边的值,他会更具这个值返回对应的弧度,这个弧度就是我们需要的咯,那么这个a和b怎么算出来了,这个就简单了,我们通过js可以很容易获取到鼠标距离上边和左边的距离,然后又能获取到小球距离左边和上边的距离,我们把鼠标距离上边的距离减去小球距离上边的距离,然后取一个绝对值,不就是ad的值了嘛,吧=把鼠标距离左边的距离减去小区距离左边的距离,再去一个绝对值,不就是b的值咯,这样我们在通三角函数Math.atan(b/a)就可以得到我们想要的那么角度了,哈哈,拿到角度以后我们来套公式吧,假设我们实时得打的角度是n,那么对应的t就是 t = Math.sin(n)* -r,l=Math.cos(n)*r,有人也许会说为什么t的值是乘以一个-r,原因就是我们在检测的时候其实是把360度分成四个区域,当鼠标在左上方的时候,小球的位置是向左边以及向上边同时运行的,小球往左边走,当然是把小球当前的位置加上往左边要走的距离,如果要往上边走的话则要把小球当前距离上边的距离减去要移动的距离,小球才能往上走,这个相信大家都明白,距离上边的值越小自然就越靠上,对吧!!!那么对应的在其他三个区域,这个r的值也是有所变化,有的时候取正值有的时候取负值,都是看他具体的运动方向和当前的位置,这个很容易,刚才也讲过了,就不再啰嗦了!

  最后就是判断鼠标在哪一个区域上,这个其实也挺简单的,我举一个例子就可以了,当鼠标在右上方的时候,我们来对比鼠标和小球的位置,右上方的鼠标距离左边的值肯定是大于小球距离左边的值的,距离上边的值肯定是小于小球距离上边的值的,满足这两个条件,则表明鼠标在左上方。ok??相信大家都懂了,再说一句,这个判断方法学名好像叫象限判定发。

  以上就是js的三角函数的简单使用,这个例子是有点bug的,有兴趣的朋友自行解决吧!!!其实还可以开发出很多更有的效果,当然js的三角函数还有一下其他的,不过使用起来都是大同小异,大家看看就阔以啦,下面是这个案例的代码,有兴趣的朋友可以看看!

/***********例子来了*************/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style>
#box{width:30px;height:30px;background:red;position:absolute;top:400px;left:400px;border-radius:15px;}
</style>
</head>
<body>
<div id="box"></div>
</body>

<script>
var obox = document.getElementById(‘box‘);
var r=50;
document.onmousemove=function(ev){
var oev = ev||event;
var x = Math.abs(oev.clientX-obox.offsetLeft);
var y = Math.abs(oev.clientY-obox.offsetTop);
var angle = Math.atan(y/x);
var cx=0;
var cy=0;
if(oev.clientX>=obox.offsetLeft && oev.clientY<=obox.offsetTop){
cx = Math.cos(angle)*r;
cy = Math.sin(angle)*-r;
}
if(oev.clientX<obox.offsetLeft && oev.clientY<obox.offsetTop){
cx = Math.cos(angle)*-r;
cy = Math.sin(angle)*-r;
}
if(oev.clientX<obox.offsetLeft && oev.clientY>obox.offsetTop){
cx = Math.cos(angle)*-r;
cy = Math.sin(angle)*r;
}
if(oev.clientX>obox.offsetLeft && oev.clientY>obox.offsetTop){
cx = Math.cos(angle)*r;
cy = Math.sin(angle)*r;
}

obox.style.top = 400+cy+‘px‘;
obox.style.left = 400+cx+‘px‘;
}
</script>
</html>

时间: 2024-08-29 09:52:23

javascript三角函数的使用的相关文章

三角函数与JavaScript

 1. 三角函数 sin&(求对边与斜边的比值) cos&(邻边与斜边的比值) tan&(对边与邻边的比值) 2.JavaScript的函数的使用 Math.sin() Math.cos() Math.tan()  3. 角度 角度与弧度的关系 1弧度等于的r的半径 360=2π 1度的转弧度的js的写法1*Math.PI/180 求对边的长度就是 Math.sin(Math.PiI/180)*r; 求邻边的长度就是Math.cos(Math.PI/180)*r; 求邻边的长度就是

Javascript中,数学方法可以分成以下几类: constans(常数)、power functions(乘方函数)、trigonometic functions(三角函数)、rounding functions(舍入函数)、random numbers(随机数字)

在Javascript中,数学方法可以分成以下几类: constans(常数).power functions(乘方函数).trigonometic functions(三角函数).rounding functions(舍入函数).random numbers(随机数字) 常数和乘方函数 Math.E 自然对数的底(为常数) 2.718 Math.LN10 10的自然对数 2.302 Math.LN2 2的自然对数 0.693 Math.PI 圆周率 3.1415 Math.SQRT1_2 1/

javascript类型系统——Math对象

× 目录 [1]常量 [2]函数 前面的话 javascript使用算术运算符实现基本的算术运算,如果要实现更加复杂的算术运算,需要通过Math对象定义的常量和函数来实现.和其他对象不同,Math只是一个静态对象,而并没有Math()构造函数.实际上,Math只是一个由Javascript设置的对象命名空间,用于存储数学常量和函数.本文将详细介绍Math对象 new Math();//Uncaught TypeError: Math is not a constructor 常量 Math对象一

javascript实例1——时间日期篇

本来想在网上找一些js实例来练练手,结果发现一本书<突破JavaScript编程实例五十讲>,看了下内容还不错,就下了下来: 后面又下了该书籍的源码,一看才发现这本书编的日期是2002年的,代码运行之后,也没有效果,原因是其所用的一些语言是已经淘汰的了.于是就想,要不我把他的代码整理整理,再添加一些自己的想法在里面,顺便练练手. 在此,也对该书的作者马健兵等编著表示致敬,感谢他们的辛苦编著.如本文有侵权,立删! 由于空间的限制,就不将js,css以单独文件存储了,全部都在html文件中,但已分

第一章:数据结构与算法javascript描述

在前端工程师中,常常有一种声音,我们为什么要学数据结构与算法,没有数据结构与算法,我们一样很好的完成工作.实际上,算法是一个宽泛的概念,我们写的任何程序都可以称为算法,甚至往冰箱里放大象,也要通过开门,放入,关门这样的规划,我们也可以视作为一种算法.可以说:简单的算法是人类的本能.而算法的知识的学习则是吸取前人的经验.对于复杂的问题进行归类,抽象,帮助我们脱离刀耕火种的时代,系统掌握一个算法的过程. 随着自身知识的增长,不论是做前端,服务端还是客户端,任何一个程序员都会开始面对更加复杂的问题,算

JavaScript: 使用 atan2 来绘制 箭头 和 曲线

最近搞Canvas绘图,知道了JavaScript中提供了atan2(y,x)这样一个三角函数.乍眼一看,不认识,毕竟在高中时,学过的三角函数有:sin,cos,arcsin,arccos,tan,arctan等,并没有这个.而工作中又需要用到它,所以这里就做了个简单的了解. 在坐标系中理解tan 和atan 为何存在atan2 ? atan2 应用 何时需要用到 atan2 在坐标系中理解tan 和 atan 回顾一下三角函数tan: tanθ,用三角函数来表示时,它的值等于sinθ/cosθ

javascript 之算术运算(Math对象的运用)

Javascript支持复杂的算术运算,这些复杂的算术运算通过作为Math对象的属性定义的函数和常量来实现: Math.pow(2,53)            // =>   2的53次方,幂的运算 Math.round(.6)             // =>   1.0:四舍五入 Math.ceil(.6)                // =>   1.0:向上求整 Math.floor(.6)              // =>   0.0:向下求整 Math.ab

JavaScript数学对象Math的创建与使用

Js中Math对象不用使用new创建,直接使用即可 常用的功能有,取绝对值,四舍五入,取整,随机数,取最大最小值 取绝对值:Math.abs(number) <script type="text/javascript"> // 绝对值 document.write("-100的绝对值为:" + Math.abs(-100) + '<br/>'); // 100 </script> 四舍五入,Math.round(number) &

【JS】 Javascript 入门

javascript **********本章大量示例和内容引用自w3cschool的javascript教程************** 本来已经快写完90%左右了,结果不小心跑了个js,不小心把浏览器弄死,不小心没保存草稿T-T一切都要从头开始写过了orz.好吧再写一遍! ■ 概述 js是一种轻量级的浏览器脚本语言,其兼容性很好(几乎可以用在所有的浏览器上)这也就意味着从PC到智能手机所有可以用浏览器的设备都可以运行js脚本了.所以说js是互联网上最受欢迎&最常用的脚本语言不为过. js被互