最近開發一個遊戲時,有一個需求是:求兩個物體的z方向向量在三維座標下的夾角。
在實現過程中發現了一個問題;
假定這兩個物體的方向向量相同,則它們的夾角計算出來應該是0。代碼如下:
Vector3 t1 = new Vector3(Camera.main.transform.forward.x, 0.0f, Camera.main.transform.forward.z);
Vector3 t2 = new Vector3(target.transform.forward.x, 0.0f, target.transform.forward.z);
float dot = Vector3.Dot(t1, t2);
但是代碼運算後結果dot = 17.1.......,並非預想中的等於0。
此時,將t1、t2的值打印出來發現都是(0,0,1),並沒有什麼問題。隨後我直接給t1、t2賦值(0,0,1)去計算,這次結果又是0了。
兩次計算的數值相同,但結果完全不一樣。
最後,我將t1、t2向量單位化(值沒有變化)後再去計算,結果就正確了。
float dot = Vector3.Dot(t1.normalized, t2.normalized);//注意使用單位向量來計算
目前還沒找到具體是因爲什麼導致的這種差異。