1

XMVector3AngleBetweenVectors 関数の奇妙な結果があります。次のコードを検討してください。

float angle = XMConvertToDegrees(XMVectorGetX(
        XMVector3AngleBetweenVectors(GMathFV(XMFLOAT3(0.0f, 100.0f, 0.0f)), 
        GMathFV(XMFLOAT3(0.0f, 200.0f, 0.0f)))));

XMFLOAT3 構造体で記述された 2 つの 3D ベクトル間の角度を探しています。GMathFV は、次のように XMFLOAT3 を XMVECTOR に変換するユーザー定義関数です。

inline XMVECTOR GMathFV(XMFLOAT3& val)
{
    return XMLoadFloat3(&val);    
}

それ以外はすべて directxmath.h ライブラリです。ここではすべて問題なく、結果の角度は予想どおり 0.00000 です。

ただし、負の y 軸値を持つ他のベクトルの場合、たとえば次のようになります。

float angle = XMConvertToDegrees(XMVectorGetX(
        XMVector3AngleBetweenVectors(GMathFV(XMFLOAT3(0.0f, -100.0f, 0.0f)), 
        GMathFV(XMFLOAT3(0.0f, -99.0f, 0.0f)))));

結果は 0.0197823402 で、ゼロ角度とは言えません。

誰かが問題を理解するのを手伝ってください。負の数値精度か、ベクトル座標が近すぎるか、それとも何か他のものですか?

UPD: すばらしいですが、 の場合は 0.0197823402 になりますが、 の場合はa(0.0f, 100.0f, 0.0f) x b(0.0f, 99.0f, 0.0f)0.000000 になります。a(0.0f, 101.0f, 0.0f) x b(0.0f, 100.0f, 0.0f)

4

1 に答える 1