簡體   English   中英

計算兩個3d向量之間的角度-如何實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM