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)