每日科技英文20: 游戏中关键的一个三角函数atan2

public static double Atan2(double y,double x)

Parameters(参数):

  • The y coordinate(坐标) of a point(点).
  • The x coordinate of a point.

Return Value

An angle, θ, measured in radians(以弧度来计量), such that -π≤θ≤π, and tan(θ) = y / x, where (x, y) is a point in the Cartesian plane(笛卡尔平面).

Observe the following(观察如下:)[实际就是atan2实现细节]

  • For (x, y) in quadrant(象限) 1, 0 < θ < π/2.
  • For (x, y) in quadrant(象限) 2, π/2 < θ≤π.
  • For (x, y) in quadrant(象限) 3, -π < θ < -π/2.
  • For (x, y) in quadrant(象限) 4, -π/2 < θ < 0.

For points on the boundaries(边缘或分界线) of the quadrants(象限), the return value is the following:

  • If y is 0 and x is not negative(不为负), θ = 0.
  • If y is 0 and x is negative, θ = π.
  • If y is positive(为正) and x is 0, θ = π/2.
  • If y is negative and x is 0, θ = -π/2.
  • If y is 0 and x is 0, θ = 0.

If x or y is NaN(not a number,不是一个数值), or if x and y are either(要么是) PositiveInfinity(正无穷大) or (要么是)NegativeInfinity(负无穷大), the method returns NaN.

This is the counterclockwise(逆时针) angle.

每日科技英文20: 游戏中关键的一个三角函数atan2_第1张图片
atan2.png

专业词汇区别:

  • Parameter: 形式参数(函数声明中的参数)
  • Argument: 实际参数(函数调用时的参数)

下面扩展是因为和参数关系比较密切(其实和类型更密切):

扩展一下,什么是函数签名(the function’s signature)
强类型语言中,函数签名是非常重要的一个概念,那么

提问: 函数签名包括那些内容呢?
回答: 除了函数名之外的任何东西

例如: double Atan2(double y,double x)

签名包括:

  1. 函数的返回值类型(double)
  2. 函数的参数个数(2个)
  3. 函数的参数类型(2个都是double)
  4. 函数的参数的顺序位置(不能顺序错误)
  5. 如果是c/c++的话,还可能包括函数的调用规范

其实回调函数就是函数签名的一个经典应用场合。

重点句型及扩展:

  • either....or....: 要么.....要么.....(两者选其一)
  • neither...nor...: 即不是....也不是....(两者都否定)
  • not only...but also...: 不但...而且...(两者都为肯定)
    如果这三句不放在一起讲解,那肯定不是个好老师,哈哈!

与atan区别:

与 atan 的不同,atan2 比 atan 稳定。
如:atan(y/x),当 y 远远大于 x 时,计算结果是不稳定的。

atan2(y,x)的做法:
当 x 的绝对值比 y 的绝对值大时使用 atan(y/x);
反之使用 atan(x/y)。
这样就保证了数值稳定性。

这三天,分享了三角函数sin/cos/atan2这三个基础重要的函数,因为只要这三个函数,就能解决经典的2D朝向正确的位移功能。

每日科技英文20: 游戏中关键的一个三角函数atan2_第2张图片
tank.gif

上面就是sin/cos/atan2的应用。当然还有高效的矢量法及矩阵法。但是三角函数的确是最基础最基础的解决方案。其他方案都是从三角函数开始更高层次的公式推导而来。

其实你会发现一个有趣的事实,当你学了矢量数学,你会觉得经典牛顿力学的计算会方便快速高效很多,而当你学了导数后,高中时令人头疼的极值问题迎刃而解。

但是不管如何,只有一步一步,踏踏实实的学习才能有进步不是。

顺便提一下,关于参考文档,我个人偏好微软的MSDN。

你可能感兴趣的:(每日科技英文20: 游戏中关键的一个三角函数atan2)