游戏中通常需要知道两点连线的角度:比如野怪逃跑时,不能冲着玩家方向逃跑,所以需要知道野怪与玩家的角度以及野怪与逃跑位置的角度。
求角度要用反正切函数,但是会发现有atan()
和atan2()
两个。该如何选择呢?
其实可以想想,atan()
有什么缺陷,需要再出个atan2()
来解决?
反三角函数表
atan()
参数是一个正切值(直线的斜率),返回弧度值,但是由于正切的周期性,atan()
的值域是从(-PI/2~PI/2)
,也就是它只处理一四象限,本可以有两个角度的但它却只返回一个(比如atan(1)可以是45°也可以是225°,但是只会返回45°
),所以一般不用它。
- 正切的周期性:对于正切函数来说,他的周期是180°,所以两个相差180°的角具有相同的正切和斜率。还记得高中时候的诱导公式吗:
tan(π+α)=tanα
atan2(double y,double x)
参数有两个,分别代表点的y坐标(对边边长)和x坐标(邻边边长),返回值是原点与此点的连线与x轴正方向夹角的弧度值,这样它就可以处理四个象限的任意情况了,值域相应的是(-PI~PI)
将得到的弧度值r
换算为角度,公式:角度 = (r*180)/PI
简单概括
r = atan(y/x)
求出的r
取值范围是(-PI/2, PI/2)
r = atan2(y, x)
求出的r
取值范围是(-PI, PI)
(待思考:为什么没有asin2和acos2 ?
)