主題

Atan2 函式與應用

mike | 2021-02-11 21:47:38

簡單記錄所學

通常遊戲開發上會有角度上的需求 - 我跟斜對面的敵人,我要轉幾度才會面對他呢
這時候拿出我們的三角函數 - 正切函數 tanθ = a / b


但正切是求三角函數的值,如果我們已知 a 與 b 的話,怎麼反過來求角度θ
這時候就可以利用反三角函數 - arctan 來達到需求
y = tan( θ )
θ = arctan( y )


Unity 中就有兩種 arctan 的方法
1. Atan( tanθ )  =>  Atan( y / x)
2. Atan2( y, x)   => 此為反正切的變種


其實以一張圖來看就會比較好懂,tanθ 就是斜率的概念,
兩點X的變化量和Y的變化量之概念帶入上述方法,近而求到角度。

Atan2 有優勢的地方於直接塞入座標 (x,y),避免了Atan ( y/x ) x = 0 的異常狀況。
且 Atan2 值域 [ -π, π ] 比起 Atan 值域 [ -π/2, π/2 ] 來的好用.

以下圖來看,把值域當作三維的高(弧度),可以發現其運作的不同
有了以上概念來實作持續面向2D物體
SampleCode -


對了,角度是從X軸往左增長,如果你的原圖不是朝X軸方向的,記得扣掉相對應的角


Reference:

74 巴幣: 110

創作回應

趴趴鼠Loading
感謝分享!
2021-02-23 11:50:50

相關創作

更多創作