js math atan2

在双十二活动中,视觉要求实现一个鼠标跟随运动的的效果,就像“”的那个效果类似

其实原理很简单,看鼠标从哪个方向进的及从哪个方向出的,然后区块里绝对定位的浮层就可以根据鼠标方向

运动;

:在鼠标进入事件中判断鼠标从左边进入区块那么定位层就从left:区块宽走到区块零,在鼠标离开事件中判断鼠标是从上边离开的那么定位层就从top:零走到负的区块高度就可以的。是不是很简单呢,但是有一个问题就是怎么判断方向?那么我们的atan2就隆重出场了。

看一下w3cshool上是怎么介绍atan2()的

atan2(x,y):返回-PI 到 PI 之间的值,是从 X 轴正向逆时针旋转到点 (x,y) 时经过的角度。

看维基网上的一张图:

那我们是不是计算出区块四个顶点的的atan2值,然和鼠标的atan2值比较确定范围看图:

是不由

CB>=RB&&CB<RT就在左边


CB>=RT&&CB<LT就在上边

CB>=LB&&CB<RB就在下边

否则就在右边

我们可以使用正切操作将角度转变为斜率,那么怎样利用斜率来转换为角度呢?可以利用斜率的反正切函数将他转换为相应的角度.as中有两个函数可以计算反正切,我们来看一下.
1、as中Math.atan()
Math.atan()接受一个参数:用法如下:
angel=Math.atan(slope) 
angel为一个角度的弧度值,slope为直线的斜率,是一个数字,这个数字可以是负的无穷大到正无穷大之间的任何一个值.
不过,利用他进行计算比较复杂.因为他的周期性,一个数字的反正切值不止一个.例如atan(-1)的值可能是45度,也可能是225度.这样就是他的周期性,对于正切函数来说,他的周期是180度,所以两个相差180度的角具有相同的正切和斜率:
tanθ=tan(θ+180)
然而,Math.atan()只能返回一个角度值,因此确定他的角度非常的复杂,而且,90度和270度的正切是无穷大,因为除数为零,我们也是比较难以处理的~!因此我们更多的会采用第二个函数.
2、Math.atan2()
Math.atan2()接受两个参数x和y,方法如下:
angel=Math.atan2(y,x)
x 指定点的 x 坐标的数字。
y 指定点的 y 坐标的数字。
计算出来的结果angel是一个弧度值,也可以表示相对直角三角形对角的角,其中 x 是临边边长,而 y 是对边边长。 
下面我们来测试一下这两个函数:
x=Math.atan(1)//计算正切值为1的数字对应的弧度值
trace(x) //输出一个弧度值0.785398163397448
x=180*x/Math.PI//转换为角度值
trace(x) //输出45
x=Math.atan2(7,7)
trace(x)//输出0.785398163397448
x=180*x/Math.PI//转换为角度值
trace(x)//输出45
x=Math.atan2(7,-7)
trace(x)2.35619449019234
x=180*x/Math.PI//转换为角度值
trace(x)135
x=Math.atan2(-7,7)
trace(x)//输出-0.785398163397448
x=180*x/Math.PI//转换为角度值
trace(x)//输出-45
x=Math.atan2(-7,-7)
trace(x)//输出-2.35619449019234
x=180*x/Math.PI//转换为角度值
trace(x)//输出-135
//从这些测试可以看出,通过坐标系的自动调整,我们可以很自由的计算出处于不同象限的位置相对应的角度.
3、计算两点间连线的倾斜角.
这种方法非常的有用.
Math.atan2()函数返回点(x,y)和原点(0,0)之间直线的倾斜角.那么如何计算任意两点间直线的倾斜角呢?只需要将两点x,y坐标分别相减得到一个新的点(x2-x1,y2-y1).然后利用他求出角度就可以了.使用下面的一个转换可以实现计算出两点间连线的夹角.
Math.atan2(y2-y1,x2-x1)
不过这样我们得到的是一个弧度值,在一般情况下我们需要把它转换为一个角度.
下面我们用一段代码来测试一下这样的转换.
//测试,计算点(3,3)和(5,5)构成的连线的夹角
x=Math.atan2(5-3,5-3)
trace(x)//输出0.785398163397448
x=x*180/Math.PI//转换为角度
trace(x)//输出45
时间: 2024-09-19 15:17:12

js math atan2的相关文章

JS math 对象方法

abs 返回数字的绝对值. Math.abs(number) acos 返回数的反余弦值. Math.acos(number) asin 返回数字的反正弦值. Math.asin(number) atan 返回数字的反正切值. Math.atan(number) atan2 返回由 X 轴到 (y,x) 点的角度(以弧度为单位). Math.atan2(y, x) ceil 返回大于等于其数字参数的最小整数. Math.ceil(number) cos 返回数的余弦值. Math.cos(num

js Math随机数

#2015-8-12 ##Math随机数 ###**1**. JS 随机数(不要问我为什么,百度也说不清,百度最新版) var rand  = (function(){   var today  = new Date();    var seed  = today.getTime();   function rnd(){     seed  = ( seed * 9301 + 49297 ) % 233280;     return seed  / ( 233280.0 );   };   re

[JS]Math.random()

参考网址:http://www.soulteary.com/2014/07/05/js-math-random-trick.html [JS]Math.random()的二三事 看到题目,如果大家平时被问到:如何生成一个怎么样怎么样的整数随机数,估计大家都会不屑,但是当你淡定的回答获取一个范围应该是随机数seeds和区间数值差的乘机与最小数相加然后再怎么怎么的时候-有没有发现你的思维已经固化了呢. 这个知识点应该是玩JS肯定会碰到的之一吧.文末有Markdown,可以直接下载阅读,清爽一点. 先

js Math对象常用方法

//js Math对象常用方法// 一组数字求最大最小值var max=Math.max(1,2,3,4,8,-9);//求最大值var min=Math.min(1,2,3,4,8,-9);//求最小值console.log(max,min);//返回 8 -9 注意:如果参数中出现字符串 则返回NaN //取整var num=18.1;var num2=18.9;//向上取整 Math.ceil()console.log(Math.ceil(num),Math.ceil(num2));//返

JS Math.sin() 与 Math.cos() 用法(计算圆)

JS Math.sin() 与 Math.cos() 用法 Math.sin(x)      x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x)    x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指的“弧度”而非“角度”,弧度的计算公式为: 2*PI/360*角度: 30° 角度 的弧度 = 2*PI/360*30 如何得到圆上每个点的坐标? 解决思路:根据三角形的正玄.余弦来得值: 假设一个圆的圆心坐标是(a,b),半径为r, 则圆

js Math函数

1.丢弃小数部分,保留整数部分parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math.round(5/2) 4,向下取整 Math.floor(5/2) Math 对象属性 属性 描述 E 返回算术常量 e,即自然对数的底数(约等于2.718). LN2 返回 2 的自然对数(约等于0.693). LN10 返回 10 的自然对数(约等于2.302). LOG2E 返回以 2 为底的 e 的对数(约等于 1.414). LOG10E

使用js Math.random()函数生成n到m间的随机数字

何使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备,Math.random()函数返回0和1之间的伪随机数 摘要: 本文讲解如何使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备. Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 1.生成n-m,包含n但不包含m的整数: 第一步算出 m-n的值,假设等于w 第二步Math.random()*w 第三步Math.random()*w+n 第四步parseInt(M

js Math [ 随机数、绝对值、四舍五入、进一取整、舍去取整、最大值、最小值、圆周率 ]

<script> /* 数学对象:Math */ with (document) { write('<br>-3.5的绝对值:'+Math.abs(-3.5)); write('<br>3.5的四舍五入:'+Math.round(3.01)); write('<br>3.01的进一取整:'+Math.ceil(3.01)); write('<br>3.99的舍去取整:'+Math.floor(3.99)); write('<br>获取

JS Math.sin() 与 Math.cos()

Math.sin(x)      x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x)    x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指的"弧度"而非"角度",弧度的计算公式为: 2*PI/360*角度: 30° 角度 的弧度 = 2*PI/360*30 如何得到圆上每个点的坐标? 解决思路:根据三角形的正玄.余弦来得值: 假设一个圆的圆心坐标是(a,b),半径为r, 则圆上每个点的X坐标=a + Ma