[英]computing angle between two 3d vectors - how to implement
我想計算兩個3d向量之間的角度。 我正在使用以下方程式(方程式的來源 )來實現這一目標:
diffangle = atan2(norm(cross(v1,v2)),dot(v1,v2))
v1和v2的分量在數據類型float中給出,但是由於我的角度很小,所以我希望在double類型中具有差角。 我的實際實現如下所示:
double angle(float x1, float y1, float z1, float x2, float y2, float z2)
{
double dot = x1*x2 + y1*y2 + z1*z2;
double crossX = y1*z2-z1*y2;
double crossY = z1*x2-x1*z2;
double crossZ = x1*y2-y1*x2;
double norm = sqrt(crossX*crossX+crossY*crossY+crossZ*crossZ);
return (atan2(norm,dot)/M_PI*180);
}
我的實現應該是應該做的還是必須做些事情或考慮其他事項?
謝謝你的幫助。
關於精度問題:在C(和C ++)中,浮點數將在計算中加倍時提升為兩倍(從int提升為long int也是一樣)。
所以表達
double z = x*y;
首先以單精度( float
)計算x*y
,然后將結果轉換為double
。 要實際使用雙精度執行計算,您需要轉換表達式中涉及的元素之一:
double z = (double)x*y;
但是,最簡單的解決方案是將函數聲明更改為接受double
。 這樣,將在調用函數時提升float
值,並且所有計算都將使用雙精度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.