1. 程式人生 > >acos 等出現結果:-1.#IND00,實操解決。求取兩個向量夾角時所遇到的問題

acos 等出現結果:-1.#IND00,實操解決。求取兩個向量夾角時所遇到的問題

當出現如題的結果時,主要是因為越界導致的。

首先,C++中acos的取值範圍是[0,M_PI],也就對應cos的[-1,1]。因此,當acos(alpha)中的alpha不在[-1,1]中時,執行結果就會是:-1.#IND00。

這裡是在求取向量夾角時所遇到的問題。公式如下所示:

|a|=√[x1^2+y1^2]
|b|=√[x2^2+y2^2]
a*b=(x1,y1)(x2,y2)=x1x2+y1y2
cos=a*b/[|a|*|b|]
=(x1x2+y1y2)/[√[x1^2+y1^2]*√[x2^2+y2^2]]

出現越界情況也只能是cos約等於+1或-1時。因此這裡添加了一個if判斷,如下,最終解決問題。

			float seata = acos(fz / fm);
			if (isnan(seata))//acos取值範圍[-1,1],若超出範圍則越界,輸出-1.#IND00
			{
				seata = acos(fm / fz);
			}