第1步、求出 tan θ 的值
① 将目标向量 归一化为 单位向量
② 将单位向量 的 Y值 / X值,就能得到 tan θ
**知识点:**通过观察单位圆上坐标点,能方便知道某角度的正弦余弦值 。
想象一个 半径为1的圆,圆心在坐标原点(0,0)。
起点:从圆上最右边的点(1,0)开始。
旋转 :从这个点开始,逆时针转动一个角度(比如30度、120度、400度都行)。停下来的位置,在圆上有一个点。
看坐标 :这个停下来的点的坐标就是 (cosθ, sinθ)。
x坐标 = cosθ(余弦)
y坐标 = sinθ(正弦)
知识点:tanθ (正切) = sinθ / cosθ
第2步、分析 tan θ 的值,推算出 θ
Y = tanX 函数图
2.1 通过 Atan(反正切)求出 θ 是否可行?
从函数图可以看出:

C# 的Atan(反正切)函数 也确实也只返回一个数值,但这是因为:

2.2 正确的方法 Atan2 :
Atan2(y, x) 直接根据点的 直角坐标 (x, y) 来计算该点与原点连线相对于正X轴的角度,自动处理了所有象限和特殊边界情况。
函数签名:

返回值单位
-
返回的是弧度值
-
如需角度,需要转换:
角度 = 弧度 * 180 / π
为什么有
atan2没有asin2/acos2?
因为
tan(θ) = y/x中,比值y/x会完全丢失符号信息(例如 1/1 和 (-1)/(-1) 都是 1),无法判断象限。而
sin(θ) = y/r和cos(θ) = x/r中,至少还能保留一个符号信息(y 或 x 的符号)。
atan2的本质作用
它是一个专门从直角坐标 (x, y) 计算角度的"完全版"函数。
它同时利用 x 和 y 的符号,直接给出正确象限的角度。
范围是
(-π, π],覆盖全方向。其他反三角不需要"2"版本的原因
asin(y)和acos(x)已经有明确的主值区间 (分别是[-π/2, π/2]和[0, π])。它们丢失的信息可以用
atan2完美替代,没必要再造新函数。实际上:
asin(y/r)或acos(x/r)经过象限调整后,结果就等于atan2(y, x)。一句话总结 :
atan2是专门为"从坐标到角度"这个任务设计的终极工具,其他反三角函数通过主值区间已经足够定义,且都能用atan2替代实现。




